我正在使用Web Audio API播放。mp3文件,并且我在编程上确定歌曲何时完成播放时遇到麻烦。
这是我的:
var request = new XMLHttpRequest();
audioContext = new AudioContext();
source = audioContext.createBufferSource();
source.connect(audioContext.destination);
request.open('GET',url,true);
request.responseType='arraybuffer';
request.onload = function() {
audioContext.decodeAudioData(request.response).then(function(buffer) {
source.buffer = buffer;
source.start(0);
});
}
request.send();
这工作得很好;我可以开始、停止、暂停和取消歌曲,没有任何问题。
然而,我想做的是,当歌曲在完成时停止播放(即,我没有调用audioContext.close()
),我想调用另一个函数来为用户设置消息。我一直在寻找某种我可以利用的回调,我已经尝试了audioContext.decodeAudioData()
提供的promise
的finally()
,但我还没能弄清楚这一点。
处理audioContext
的ended
事件。参考AudioScheduledSourceNode: ended event
source.addEventListener('ended', () => {
// done!
});
或者使用onended
属性
source.onended = () => {
// done!
}