我有一个简单的例程,该例程创建一个音频上下文节点并使用缓冲区加载它。即将开始的事件似乎在开始时触发。我为持续时间设置了一个计时器,并且onended事件在音频停止播放之前触发了该时间量。任何人都知道如何获得真正的事件。我试图使用目的地和来源,同样的结果

function playSoundFile(buffer) {
   'use strict';
   audioCtx.close();
   audioCtx = new (window.AudioContext || window.webkitAudioContext)();
   audioSource = audioCtx.createBufferSource();
   audioSource.connect(audioCtx.destination);
   audioSource.buffer = buffer;
   audioSource.playbackRate.value = 1;
   stillPlaying(true);
   audio_player = audioCtx.destination;
   audioSource.addEventListener('onended', whatsUp());
   console.log('start ' + showTime());
   filePlayed(buffer.duration);
   audioSource.start();
}


播放和即将结束的事件之间的时间戳仅相差1毫秒。
filePlayed启动一个超时事件,以显示开始和结束的时间。

最佳答案

好的,guest271314多数情况下都正确。

该文档令人困惑。 eventListener是“ endended”而不是“ onended”,并且您必须在parans中使用函数名称

所以

audioSource.addEventListener('ended', whatsup);


解决这个问题。谢谢。

10-08 18:45