如何以编程方式确定 JavaScript AudioContext AudioBufferSource 何时播放完毕?
How can I programmatically determine when an JavaScript AudioContext AudioBufferSource is done playing?
我正在使用 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!
}
我正在使用 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!
}