Web MIDI APIでAndroidのChromeだけで発生するタイミング問題で困っています。

 先日からいろいろやっている「ポケミクに音声認識でしゃべらせる」が、AndroidのChromeで動かないかな? といろいろやっているのですが、手詰まり。
 音声認識もできてるし、発音データはSysExで送れているのですが、発音がうまくいかない。数十msごとに送られるはずのNote Onがまとまって送られているのか、20文字がたった0.1秒で発音されてるという感じ。もちろん、何を言っているかはわからない。タイミングが変。
 このへんのロジックはオリジナルのKodamaそのまま。
 問題解決へのヒント的なものはここで使われているライブラリ「WebMIDIAPI.js」にありそう。
 (追記:この推測は外れでした。次のエントリに詳細あり)


 このライブラリを使っている別のWebアプリも試してみる。
 Wrapper for Web MIDI API
Webmidiapiwrapperdemo
 アウトプットデバイスを選択すると、鍵盤(Flatkey)とか「Fire MIDI」というボタンとかが出てくる。鍵盤で音が鳴る。「Fire MIDI」では「ドレミファソラシド」と順番にノートが発音される。これがWindowsやMac、iOSでの動作。
 しかし、AndroidのChromeだと、一瞬で発音が終わる。「ドレミファソラシド」になってるかどうかすらわからない。「プツッ」っていう感じ。
 これもタイミングがおかしい。
 ソースを見ても、わからず。解決する知識もスキルもなく(既存のものに好みの機能を足したり、いろいろ組み合わせるのが関の山)。ライブラリの問題なのか、Chromeの問題なのか。
 で、ライブラリに問題があったとしても、WebMIDIAPI.jsを使わずにやるってことは、かなり面倒になりそうで。
 「AndrodのChromeはタイマー関連がおかしいのかなあ」と思い、いくつかチェックするもsetTimeoutとかsetIntervalとははちゃんと動いてるっぽい。
 window.performance.now のあたりなのかなあ?
 それとも。ウチの端末がおかしいだけなのか? 
 で。
 Androidのデバッグを有効にして、WindowsのADBで受けるまでの設定はできたのだけど、そこから先をやる時間がとれず。エミュレーター使ってやったほうがいいいのか? それでUSBデバイス(ここではポケミク)つないで、ってことが可能なのか? 考えるだけでいろいろ面倒。
 ということで、現状のメモでした。


コメント