Предположим, вы используете API Web Audio для воспроизведения чистого тона:
ctx = new AudioContext();
src = ctx.createOscillator();
src.frequency = 261.63; //Play middle C
src.connect(ctx.destination);
src.start();
Но позже вы решите, что хотите остановить звук:
src.stop();
С этого момента src
теперь совершенно бесполезен; если вы попытаетесь запустить его снова, вы получите:
src.start()
VM564:1 Uncaught DOMException: Failed to execute 'start' on 'AudioScheduledSourceNode': cannot call start more than once.
at <anonymous>:1:5
Если вы, например, делаете небольшую онлайн-клавиатуру, вы постоянно включаете и выключаете заметки. Кажется действительно неуклюжим удалить старый объект из графа аудио узлов, создать новый объект и connect()
поместить его в график (а затем отбросить объект), когда было бы проще просто включить и выключить его при необходимости.
Есть ли какая-то важная причина, по которой API-интерфейс Web Audio делает такие вещи? Или есть какой-нибудь более чистый способ перезапуска аудиоисточника?