我有一个基于PhoneGap(Cordova)的简单JavaScript游戏,用户正在寻找图片中的某些功能。如果找到正确的功能,则播放音频(通知正确答案的铃声)。虽然我有问题 - 叮当声是X秒长。当用户在前一个完成播放之前找到另一个正确的特征(时间小于X)时,新的叮当将不会开始播放。我需要每个新的叮当声覆盖前一个叮当声以防前一个叮当声还没有完成播放(所以让用户在声学上听到最后一个正确的特征猜测)。
这是我的代码 - 它在Android上运行得像我想要的那样:
var gMedia;
function playAudio(src, callback) {
if (gMedia) {
gMedia.stop();
gMedia.release();
}
var mediaSource;
if (iOS) mediaSource = "sounds/" + src;
else mediaSource = "/android_asset/www/sounds/" + src;
gMedia = new Media(mediaSource, onSuccess, onError);
gMedia.play();
gMedia.setVolume('1.0');
// onSuccess Callback
function onSuccess() {
gMedia.release();
if (callback && typeof(callback) === "function") {
callback.call();
}
}
// onError Callback
function onError(error) {
gMedia.release();
}
}
答案 0 :(得分:1)
看来,问题是你在成功回调中释放了Media
对象,因为当你停止声音时它也会被调用(gMedia.stop()
)。因此,当您创建新的Media
对象时,它将立即释放。
在测试中,我从gMedia.release()
函数中移除onSuccess
后,您的代码正常工作。