夜勤の合間に、ちまちまと作っていた物が、動きました。
楽器みたいなものを電子工作でつくりたい→
「マイコンに、VS1003ボードと市販のMIDIキーボード(鍵盤)を接続、MIDI音源として鳴らす」計画。
なかなか大変でした・・・。
ざっくりと図にすると、こんな感じです。
①鍵盤を弾いたら
②Arduino nanoマイコンが受信、プログラムでデータを加工して転送し
③VS1003ボードが音を鳴らす
まず、①→②ですが
Arduino nanoにシリアル通信のMIDI INポートを増設します。
これは作例がネットに多数あり、比較的少ない部品でできました。
データ受信処理はArduino MIDI Libraryの「MIDI.h」を使用しました。
②→③がやっかいで
手元のVS1003ボード(青)は、標準でリアルタイムMIDIの受信に対応していません。
基板にモード変更やシリアル通信のピンが出ていないので。
そこで機能変更するプラグイン(改造プログラムみたいなもの)を流し込む必要があります。
情報が見つからず、一週間ほど調べてgithubに1つだけソースが見つかり、やっと動作しました。
※上位のVS1053ボードの方がgithubに情報が多く、扱いやすいようでオススメです。
今回の回路図です。
左からMIDI INポート、Arduino nano、VS1003ボード。
結線は見よう見まねなので、間違っていたらご容赦を。XRSTピンの扱いが怪しいかも。
VS1003ボードをリアルタイムMIDIに対応させる、プラグインコードはこんな感じです。
開発元メーカーのVLSI社が公開しているのですが、
http://www.vlsi.fi/en/support/software/vs10xxapplications.html
プラグインを適用する詳細情報が無く、ほぼ謎解き状態でした。
こちらの方が動作に成功していて、github含め大変参考になりました。Kevin氏に感謝です。
https://diyelectromusic.wordpress.com/2021/01/09/arduino-midi-vs1003-synth/
https://github.com/diyelectromusic/sdemp/tree/master/src/SDEMP/ArduinoMIDIVS10xxSynth
簡易圧縮されたデータをほどいてSPI通信で送信、
最後のシメでSCIに0x30(VS1053は0x50)を送るそうです。
私を含め、プラグインがうまく動かない人はこのシメが抜けていると思われます。
「鍵盤を押した」情報を、Arduino nanoが受信した様子です。
MIDIデータの構造についてネットで調べたところ、
十六進数で、「90」が「鍵盤を押した」、「3C」が「ド」、「7F」が「強さ127」を意味するようです。
こんな感じで鍵盤を弾きながら、流れるMIDIデータを洗って
下流のVS1003ボードに流す情報、流さない情報を決めました。
なお、鍵盤から受信したデータに対して、転送するデータをプログラムで自由に制御できるので
鍵盤に対応する演奏動作をカスタマイズし放題です。
「ドレミファソラシド」を弾いたら「ドシラソファミレド」と鳴るようにもできます。
今回は「低いド」「低いレ」の鍵盤に、音色14種類のアップダウンを割り当ててみました。
・・・。
説明が長くなりました。
実際にMIDIキーボード(鍵盤)でVS1003ボードを演奏してみたのが、以下の動画です。
ピアノなんて弾けないので、
小学生のとき音楽室で覚えた「ネコふんじゃった」です。
めちゃくちゃヘタですが、リアルタイムで弾いている感じは伝わる・・・かなあ。
というわけで、鍵盤入力をマイコンに取り込んで、鳴らせるようになったのはデカいです。
更にいろいろ試してみたいと思います。
ピアノを覚えろとは・・・言わないでください。
おしまい。