隠されたもの

HTML5のaudio要素にはendedという再生終了を告げるイベントとプロパティが存在する。
これらを利用した音声ファイルの連続再生をenchant.jsで行おうとしたら、イベントの反応はないしプロパティはundefinedと返された。なんじゃらほいとenchant.jsの中を覗いてみると、ラッピングの過程でそれらが削ぎ落とされていた。再生終了の合図って結構大切な要素だと思うんだがな……。
まあユーザは意見こそ述べても、enchant.jsに何を組み込むかという最終的な捨取選択は開発サイドにあり我々はそれに従うまでだ。
それに、Javascriptである以上中身を剥き出しにするのは容易だ。
Sound.play()の中を見てみるとthis._element.play()とある。このthis._elementがaudio要素の実態であることは想像に難くない。実際にthis._element.endedにアクセスすると値が返ってきたしendedイベントにも反応した。つまり以下のようにしてやればHTML5で提供されるaudio要素を存分に使うことが出来る。
var audio = game.assets['audio.wav']._element;

というわけで先日発表したみくレコにつながるのであった。


ちなみにenchant.jsの機能だけで再生終了を検知するには、currentTimeがdurationに達しているかどうかで判断できると思う。思う、と書いたのはまだ試してないから。というか今気が付いた。