West Gate Laboratory

人生を少しでも,面白く便利にするモノづくり

ピアノ演奏を可視化する装置作ってみた(それを使って弾いてみた)

概要

私は電子工作と別にピアノも趣味なのだが、最近は有名どころのクラシックを弾いている。
例えば、ショパンベートーヴェン・リストなどだ。

ただ弾くだけでも楽しいのだが、演奏が音だけでなく視覚でも楽しめると良いかな、と思い、ピアノ演奏を可視化する装置(以下、ピアノディスプレイ)を作ってみた。

こんな感じ。

また、このピアノディスプレイはMaker Faire Kyoto Online 2020にもオンライン出展した。この記事ではその製作過程を述べる。

背景

よくYoutubeでクラシックピアノ演奏動画を見たりするのだが、ある日Rousseau氏の動画を見かけた。

www.youtube.com

Rousseau氏はピアノの演奏とその演奏を可視化した動画を組み合わせて非常にきれいな作品を投稿している。
どうやら、動画の上半分は記録したMIDIをもとに動画を生成し、上下で動画を組み合わせているようである。

めっちゃきれいやん、と思い、早速自分でも作ってみることにした。
ただ、動画で後から組み合わせるのではなく、リアルタイムに可視化するディスプレイとした。

CADでハードウェア設計

Fusion360を使って設計をすすめる。
今回、ピアノの実寸大でディスプレイを開発するため、横幅は1mを超えるサイズになる。

f:id:kaname_m:20200502143222p:plain

鍵盤それぞれに対し、15個のフルカラーLEDを配置した。(後述:NeoPixel)
ピアノの鍵盤は88鍵あるので、全部で1320個のフルカラーLEDを使用している。 また、光らせた時に見栄えが良くなるよう、前面にはスモークアクリル板を設置している。

f:id:kaname_m:20200502143434p:plain

ちなみに、Fusion360レンダリング機能を使うといい感じの画像も作れる。それっぽいそれっぽい。

f:id:kaname_m:20200502143504j:plain

できるだけスタイリッシュな見た目にするため、極力前面にはネジなどの機構部品が見えないようにした。
アクリルの四隅の支持材も同様にFusion360で設計して、3Dプリンタで印刷した。

実際に作っていく

ハードウェア設計が終わったら、実際にものを集めて作っていく。

まずは、鍵盤サイズのアクリル板を用意する。

f:id:kaname_m:20200502143442j:plain

アクリル板の上にNeoPixelのLEDストリングを切って貼っていく。
今回使用したのはWS2812の300個/5mのものだ。

この際、鍵盤の寸法にピッタリ合うよう、コンマ1mm単位で位置を調整する必要がある。

f:id:kaname_m:20200502143449j:plain

LEDストリングを貼り終えたら、全てのストリング1つ1つ配線していく。

このとき注意しなければいけないのは、電源ラインである。
LEDストリングは接続数が増えていくと電流量が結構ハンパないことになるため、単純にストリングを全接続すると末端のLEDはまともに光らなくなる。
例えば、今回使用しているNeoPixel(WS2812B)は、LEDを白色最大光量にすると大体1個50mA消費する。
両手で10鍵押し続けると、15x10=150個のLEDが光り、単純計算で7.5Aの電流が流れることになる。

もちろん、実際には白色には光らせないのでもう少し電流量は少なくなるのだが、単純にLEDストリングをつなげると、末端のLEDに供給されるまでに電圧降下してしまい、以下のツイートのようにまともに光らなくなる。

というわけで、このピアノディスプレイでは銅テープをバスバーとしてディスプレイの上下に配置し、そこからそれぞれのLEDストリングに電源を供給することとした。

f:id:kaname_m:20200502143452j:plain

銅テープは5mm幅のものを用いた。

3M  銅箔テープ No.CU-35C 5mm幅 x 20m

3M 銅箔テープ No.CU-35C 5mm幅 x 20m

  • メディア: Tools & Hardware

ちなみに、LEDストリングの信号ラインをつなげるために合計87本の短い単線をつなげた。これが一番疲れた気がする・・・。

f:id:kaname_m:20200502143500j:plain

ソフトウェア

さて、次にソフトウェアの話。
今回はESP32を使って開発した。

MIDIをESP32で読み取る

ピアノディスプレイでは、電子ピアノのMIDI OUTをESP32で読み取っている。

ArduinoMIDIを解析する方法としては、以下の記事が詳しい。

qiita.com

MIDI OUTは、基本的には31.25kbpsのUART信号なので、マイコンで簡単に読み取ることができる。
ただ、出力信号とマイコンの入力はアイソレートする必要があり、高速フォトカプラが必要だ。

f:id:kaname_m:20200502143703p:plain
MIDI標準ハードウェア(MIDI1.0規格書より)

このあたりのハードウェア仕様はMIDI1.0規格書に詳しく記載されている。
規格書には、MIDIに適合する高速フォトカプラのリストも記載されている。

NeoPixel

みんな大好きNeoPixel。 使い方についてはネット上に多く記事が存在するので、ここでは多くは書かないが、今回はFastLEDライブラリを使用した。

github.com

NeoPixelのライブラリとしては、FastLEDの他にAdafruit_NeoPixelがあるが、Adafruitのライブラリは以下のツイートのようにLEDを多数接続した際に正しく点灯しないため、ピアノディスプレイのように多数のLEDを接続する場合はFastLEDがオススメだ。

マルチタスク

ピアノディスプレイでは1320個のNeoPixelを制御しているが、それだけたくさんのLEDをつなげるとその制御だけで(時間的に)大半のCPUリソースを食ってしまい、他の処理(MIDI入力など)ができなくなる。

そこで、ESP32はデュアルコアなので、1つのCPUをNeoPixelの制御に、もう1つのCPUをMIDI処理などに割り当てMIDIの取りこぼしやLEDの表示ミスなどがないようにする。

ESP32(M5Stack)を使ったマルチタスクの方法については以下の過去記事参照。

westgate-lab.hatenablog.com

最終形態

ディスプレイ部分まで完成したところで、Maker Faire Kyoto Online 2020に出展した。

ピアノの各鍵盤をHSV色空間の色相に割り当てると、こんな感じにゲーミングピアノのようになる。

2020年5月2日のMaker Faire Kyoto Online 2020に向けて最低限のところまで開発したため、まだ回路などは完成していない。(ブレッドボードがディスプレイの裏にぶら下がっている)

他にも、いろんな光らせ方の実装やHIDデバイスと連携させたシーケンスの実装など、色々やりたいことはあるのだが、それらは別途記事にしていきたいと思う。

さぁ、ピアノを目で楽しもう。