Web MIDI APIのTypedefを書いたよ

Web MIDI APIでいろんなことができそうだ。
Chrome v39からAPI Draftの仕様に沿った呼び出しができるようになった。
早速TypeScriptから触るべく、typedefを書いて、DefinitelyTypedにあげた。
利用サンプルも書いた。

利用は簡単で、まずrequestMIDIAccessを呼び、promiseを受け取る。
再生はsendメソッドでできるらしい。

navigator.requestMIDIAccess().then(this._onSuccessCallback, this.onErrorCallback);

SuccessCallbackで受け取ったMIDIAccessの、inputsがmidi入力、outputsがmidi出力。
それぞれvalues()メソッドを呼ぶことでイテレータにアクセスできる。
また、midi入力はomnidimessageで受け取れる。

private _onSuccessCallback = (item: Midi.MIDIAccess)=>{
            this._midiPort = item;

            var inputs = this._midiPort.inputs.values();
            for(var o = inputs.next(); !o.done; o = inputs.next()){
                this._inputs.push(o.value);
                o.value.onmidimessage = (event: Midi.MIDIMessageEvent)=>{
                	console.log(event.data);
                }
            }

            var outputs = item.outputs.values();
            for(var op = outputs.next(); !op.done; op = outputs.next()){
                this._outputs.push(op.value);
                op.value.send([ 0x90, 0x45, 0x7f ] );
            }


        };

正味これだけでmidiのnote/velocity/valuesが入ったUInt8Arrayを受け取ることができる。
midiを触ったのは今回が初めてだが、思ったより簡単にmidiデバイスと連携できた。

Written on November 23, 2014