AudioContext .End не срабатывает должным образом

У меня есть простая процедура, которая создает узел аудиоконтекста и загружает его в буфер. Постоянное событие, кажется, срабатывает в начале. Я устанавливаю таймер на продолжительность, и завершенное событие срабатывает примерно за это время до того, как звук перестанет воспроизводиться. Кто-нибудь знает, как получить истинное завершенное событие. Я пытался использовать пункт назначения, а также источник, тот же результат

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 запускает событие тайм-аута, чтобы показать время в начале и в конце.


person bobbdelsol    schedule 23.09.2017    source источник
comment
Обратите внимание, что код в Question немедленно вызывает whatsUp() вместо ссылки на функцию для вызова при событии.   -  person guest271314    schedule 24.09.2017
comment
Замените audioSource.addEventListener('onended', whatsUp); на audioSource.addEventListener('onended', whatsUp());   -  person guest271314    schedule 24.09.2017


Ответы (1)


Хорошо, guest271314 в основном был прав.

документация сбивает с толку. EventListener «завершен», а не «завершен», и вы должны использовать имя функции с параметрами

so

audioSource.addEventListener('ended', whatsup);

заботится о проблеме. Спасибо.

person bobbdelsol    schedule 25.09.2017
comment
Это сработало и для меня. Пожалуйста, примите свой собственный ответ как правильный, чтобы другие люди знали. Спасибо. - person Farhan Ahmed Wasim; 14.02.2019