SoundJSのSoundInstance.completeイベントでSoundInstance.play()メソッドがサウンドを再生しない [Edit]

SoundJSでサウンドを再生し終わると、SoundInstance.completeイベントが起こります。そのイベントリスナーでSoundInstance.play()メソッドを呼出しても、サウンドが再生されないという話しを聞きました。「SoundInstance Class」のドキュメントの「Example」を参考に試してみたら、本当に再生されませんでした。

With the SoundJS library the SoundInstance.complete event is fired when playback completes. However the SoundInstance.play() method does not seem to play sound in its event listener.

テストしたのは、つぎのようなごく簡単なコードです。ほぼ、ドキュメントの「Example」どおりです。

The test code is simple and based on the Example in the document of "SoundInstance Class" as follows:

createjs.Sound.addEventListener("loadComplete", loadHandler);
createjs.Sound.registerSound("sounds/test.mp3", "sound");
function loadHandler(eventObject) {
	var instance = createjs.Sound.play("sound");
	instance.addEventListener("complete", playAgain);
}
function playAgain(eventObject) {
	var instance = eventObject.target;
	instance.play();
}

ボタンなどのイベントハンドラを用いれば、何度でも再生できました。SoundInstance.play()メソッドを呼出す前にひと呼吸おけばよさそうです。そこで、window.setTimeout()メソッドを介することにより、再生することができました。メソッドの第2引数に渡す待ち時間は0で構いません。

The SoundInstance.play() method can playback again from handler function of the onclick event. Therefore a moment might be needed before the method is called. The window.setTimeout() method succeeds to call the SoundInstance.play() method even if zero is passed as the second argument.

function playAgain(eventObject) {
	var instance = eventObject.target;
	setTimeout(function () {
		instance.play();
	}, 0);
}

ご参考までに、テスト用のコードをjsdo.itに掲げました。

Test code is uploaded to jsdo.it for your reference:

[追記: 2013/03/19] CreateJS Supportで尋ねたところ、回答がありました。内部的に、SoundInstanceオブジェクトの初期化とSoundInstance.play()メソッドのタイミングがずれてしまっているためのようです。やはり、ひと呼吸おくことになるのでしょう。なお、単純に繰返し再生をしたい場合なら、Sound.play()メソッドでループの引数を定めることも考えられます。

See: CreateJS Support "SoundInstance.play() method does not seem to play sound in a listener of SoundInstance.complete event"

[追記: 2013/03/20] この問題は、つぎのバージョンで修正されます(「SoundInstance.play() method does not seem to play sound in a listener of SoundInstance.complete event」参照)。GitHubにはすでに修正版が上げられており、soundjs-NEXT.min.jsにも対応が加えられました。

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事