« Web MIDI APIでAndroidのChromeだけで発生するタイミング問題で困っています。 | トップページ | ポケミクに棒読みさせる - ブラウザで動くシーケンサー作った Web MIDI API »

2015年3月12日 (木曜日)

AndroidのChromeのWeb MIDI APIでsendのtimestampが無視されているっぽい

 AndroidのChromeを対象にWeb MIDI APIをテスト。.sendメソッドでデータを送る際にtimestampをパラメータとして与えても無視される。そのため、即時送信されている模様。「Web MIDI APIでAndroidのChromeだけで発生するタイミング問題で困っています。」の続きです。

 以下、調べてわかったこと、その時点で思ったことを時系列に記録。無駄に長い。

 テストしているプログラムの一例はこれ。

 Wrapper for Web MIDI API

 「Fire MIDI」ボタンのクリックでで、ドラミファソラシドと鳴るのだけど、AndroidのChromeでは、すべて一瞬で鳴っているのか、「プツッ」って鳴って終わり。1音だけではないような気がするけど、一瞬すぎてわからない。

 最初は使われている(と、思っていた)ライブラリWebMIDIAPI.jsのせいかと思ったら、現在のChromeではそもそも使われていない模様。Web MIDI API未対応のブラウザのためのものだったようで(何もわからず、AndroidのChromeからadbでログを拾ったりと、えんえんいろいろチェックしてしまったのだけど、なんのヒントも見つけられず。該当ライブラリが使われてないことだけがわかった)。

 で、再度、メインのプログラムを見る。データをMIDIデバイスへの送信に使われているのはsendメソッド。

 sendメソッドではポートにデータの送信を開始する時刻をtimestampで指定できるのだという。以下のリンクにあった。

 Web MIDI API (日本語訳)

 これがちゃんと機能していない。無視される。Chrome Beta(Ver. 41.0.2272.90)でも結果は同じ。

 上のドキュメントの日本語訳を見ると、timestampは「Optional」となっている。むむ。

 オプションだから、AndroidのChromeではサポートされてないのか? RFCのOPTIONALについての文章では、ベンダーの裁量により選択するみたいなことが書いてある(テキトーな解釈)。

 結局、現状ではこのtimestampに頼らずにコードを書いてなんとかするしかなさそう。

 という、素人なりの結論に達した。

 デスクトップのChromeとは別のやり方をしなくてはらないというのは、かなり面倒。どうしよう。今、手を付けているのを放り出したくなった。

 なんか勘違いだったら、逆にうれしいのだけど。

 どなたか、ご存知でしたら教えて下さい。

 と、いったんはここで記事を終わらせようと思ったのだけど、続ける。

 希望としては。オプションだからサポートされてないのではなく、単なるバグで動いてないという状況。

 Windows版のChromeでもバージョン33の時にtimestamp関連のバグがあった模様。DTM Stationの以下の記事で知る。

 Web Music時代到来!楽器、ツールは自分で作ろう!? : 藤本健の“DTMステーション”

 上記ページの一番下の写真から。で、Chrome 34ではバグがFixされたという。

 で、さらに調べると、Mac OS XでもChrome 35でtimestampの問題が修正されたのだという。

 とよしま語録: 続・ChromeにおけるWeb MIDI APIの実装状況

 こんな感じで、Android版のChromeも修正されるといいのだけど。

 さらに続く。

 引き続き検索すると、昨年5月の段階でtimestampがきちんと処理されるようになったみたいな話が。

 Issue 303596 - chromium - Web MIDI: implement MIDIManager for Android - An open-source project to help move the web forward. - Google Project Hosting

 英語なのでよくわからない。直ってるようにも読める。

 とにかく、今は望み通りの動きをしていない。とはいえ、こうした現在の不具合がほかの環境でも生じているというのが前提となるのだけど。Web MIDI APIが試せるAndroid端末が1台しかないので、実際のところはわからない。

 そういえば、Android版のChromeではいまだMIDIデバイス名さえ拾えてなかったっけ。これはほかの人がテストしている動画にも出ていたので間違いないはず。

 ということで、これに関してはしばらく様子見。なんとかほかの端末を用意できたら、またなんか書きます。

 と、書いたところで、Chrome Betaのバージョンアップ(42.0.2311.38)の通知が来てた。どうなるのか?

(追記)

 よりシンプルなデモプログラム作った。かなり雑ですが。

 simple demo

 まあ、結果は同じ。デスクトップでは音階が順番に鳴るけど、Androidでは「どッ」って全部いっしょに鳴る。

(追記 2015/04/04)

 次のChrome 43で修正されるそうです。よかった。


|

« Web MIDI APIでAndroidのChromeだけで発生するタイミング問題で困っています。 | トップページ | ポケミクに棒読みさせる - ブラウザで動くシーケンサー作った Web MIDI API »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/35726/61270020

この記事へのトラックバック一覧です: AndroidのChromeのWeb MIDI APIでsendのtimestampが無視されているっぽい:

« Web MIDI APIでAndroidのChromeだけで発生するタイミング問題で困っています。 | トップページ | ポケミクに棒読みさせる - ブラウザで動くシーケンサー作った Web MIDI API »