Google Chromeで動かないのを何とかしてみた。
ミニタイプの方は一応何とかなったけど、88鍵タイプはムリっぽい。
今回の改善点は3つ。
- Chromeでオーディオの読み込みが終わらない問題を改善した。どうやら読み込みが終わる前にオーディオオブジェクトが解放されてしまう模様。弱参照とGCの兼ね合いみたいな感じ。鍵盤を表示するdiv要素のプロパティにオーディオオブジェクトを持たせるようにした。
- 鍵盤数の少ないミニタイプを作った。Chromeではオーディオオブジェクトが多くなるとなぜか鳴らないものが出てくるみたい。鳴らないAudioオブジェクトのプロパティを表示して調べてみたが原因は分からなかった。読み込み状態や音の長さ(duration)は正しい値を返すし、再生するとcurrentTimeがちゃんと増加する。でも音は鳴らない。個数制限でもあるのだろうか。
- ミニタイプではオーディオの巻き戻し(先頭へのシーク)をAudio.load()で行うようにした(つまり、押す度に読み込み直すようにした)。Audio.load()を連発するとメモリ消費量はどんどん増加していくみたいなのだけど(Firefox, Opera使用時)、Chromeではこの方法でないと妙なレイテンシー(?)が発生して聞けたものじゃなくなる。
※Google Chromeでの動作確認はバージョン6.0.447.0(Windows版)で行った。