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の送信が可能になった。
とりあえず、しばらくこれで続けようと思う。
コメント