Web MIDI Browser 1.0.3でSysExが送れない問題

Webmidibrowser_sysexdialog
 iOSでWeb MIDI APIが使えるブラウザ「Web MIDI Browser」でSysExが送れないという話を前回した(Web MIDI Browserが1.0.3へバージョンアップ、フルスクリーンブラウズが可能に)。原因らしきものがわかったのでメモ。
 Web MIDI BrowserのSettingsでEnable Sysexというオプションがバージョン1.0.3でついた。これの挙動がちょっと想定外。
 基本的にOffにした状態で、SysExを使うWebアプリ(というかページ)を開くと、こんなメッセージが出る。
 SysEx access requested
 このメッセージが出たら、Onにした上で、ページをリロード。これでSysExの送信が可能になる。Onの状態だとメッセージは出ず、いつでも送信可能。ここまでは問題ない。
 しかし、SysExを使うやつでも、このメッセージが出ないページがある。だいぶ前に作ったやつは出る。最近作ったやつは出ない。これがSysEx送れない問題と関係あるのではないか? これはどうやって判断しているものか?
 こちらの環境でいろいろテスト。メッセージが出るやつと出ないやつの違いは、Polymerエレメントのx-webmidiを使用しているか否か、であった。
 HTMLファイルを走査(?)して、なんらかの処理をチェックしているのだろうと踏んで、x-webmidiのソース見る。
 x-webmidirequestaccess.html 内において、70行目にこんなのがある。
 navigator.requestMIDIAccess({sysex:sysex})
 sysexが2回出てくるのだけど、前者はプロパティで、後者はパラメータの変数(たぶん)。後者は、その上の行で中身が指定されている(ユーザーが使用時に指定する)。今回のプログラムでは常にtrueでOK(SysEx使えないとおもしろくない)。ということで、直接書き換える。
 navigator.requestMIDIAccess({sysex:true})
 これで、Web MIDI Browserで開く。
 ビンゴ! メッセージが出た。
 Onにして、ページをリロード。SysExの送信が可能になった。
 とりあえず、しばらくこれで続けようと思う。

コメント