概要
WebでMIDI入力を受け取って記録し、SMF(Standard MIDI File)の書き出しまで行えるものをつくりました。
動作には以下の条件が必要です。
・Web MIDI API対応のブラウザであること(Can I use)
・MIDI入力ができるデバイス等があること
デモ
https://cagpie.net/web-midi-recording/
UIの作りがだいぶアレですが、
-
-
Web MIDI API start
を押すとMIDIデバイスへアクセスを開始し、
- この状態から、繋いだMIDIデバイスから入力を送ると音が出ます(音が出る部分はソースコード的には
Sample
にあたります)
-
-
-
recording start
で記録を開始し、recording stop
で終了してSMFの書き出しが走ります。
-
-
-
play
で書き出したSMFの再生、またdownload
からSMFのダウンロードができます。
- playでの再生は、WebAudioAPIを用いてSMFを再生する PicoAudio.js を用いています。
-
ソースコード
https://github.com/cagpie/web-midi-recording
記録部分のみを本体としており、音がなる部分は本体に入っていません。
上記のデモは Sample
の内容になります。
MIDIを記録して保存する とは
例えば、
MIDIデバイスとして使用するピアノの真ん中の方の「ミ」の鍵盤を押したとします。
すると、 0x90 0x40 0x7F
というMIDIメッセージが送られます。
(このデバイスの接続と、MIDIメッセージの受け取りにWeb MIDI APIを用いています)
このイベント(MIDIメッセージ)を、押したタイミングと一緒に記録しておきます。
最終的に保存する際に、SMF形式にするのですが、
これは、上記のイベントの内容と、それがいつ実行されるか(正確には前回のイベントからの差分時間)の情報を交互に記述します(ざっくり)
それら情報と、ヘッダ情報などを含めれば完成です。
バイナリデータに起こし保存すれば、
DAWやMIDIシーケンスソフトで開いたりすることができます。
おわり
おわりです。
Web×MIDI Web×音楽 がもっと見られますように
参考
MIDIメッセージ一覧
https://www.g200kg.com/jp/docs/tech/midi.html
SMF (Standard MIDI Files) の構造
https://sites.google.com/site/yyagisite/material/smfspec