2015年2月25日水曜日

Web MIDI API:MacのChrome43でHotPlugが可能になります

English Version here

Chrome43(今日配信されたCanaryで試せます)でWeb MIDI APIに新たな機能が追加になりました!(まだMacだけ)

その機能はChromeを起動中にMIDI機器を抜いたり、挿したりした場合にEventが飛ぶという機能です。今まで、Chrome起動中にMIDI機器を挿しても認識してくれませんでしたので、とても便利になりますよね^^
仕様的には MIDIAccess Interfaceのonstatechange と、MIDIPort Interfaceのonstatechange です。
MIDIAccessの方のコードを書いてみるとこんな感じ。3行目から5行目のところ。

navigator.requestMIDIAccess({"sysex":true}).then(successCallback, errorCallback);
function successCallback(access) {
      access.onstatechange=function(event){
          console.log(event);
          // event.port に 接続/切断 されたMIDI機器が入っています。
      }
}
function errorCallback(msg) {
      console.log("[ERROR] ", msg);
}


こんな感じのがconsoleに表示されます。 port には接続/切断されたMIDI機器の情報が入ってきます。port.state に 状態が入ってきてその意味はこんな感じになっています。


  • disconnected:接続されていた機器が切断された状態
  • connected:接続されたけど、データのやりとりはできません状態
  • opened:接続され、データのやりとりができます状態

MIDIPort の方の同じように、onstatechangeにEventhandlerを書いてやると接続/切断で反応してくれます。
MIDIPort の onstatechange は requestMIDIAccess()を実行する前から接続されていた機器にしか Eventhandler をつけられませんので注意してください。 MIDIPortのEventhandlerについてですが、MIDIAccessのinputs/outputsのIteratorは接続/切断がある毎に更新されていますので、正確には requestMIDIAccess() 実行後でもEventhandlerをつけることは可能でした。間違った説明をしてしまいすみませんでした。(更新:2015/2/25 23:30)

ということで、また1つ便利になりました^^