В соответствии с документацией вы должны вызывать AudioContext только один раз на страницу.AudioContext не создает звук, если он определен вне функции
Когда я пытаюсь использовать его правильно и вызывать его вне функции, звук не создается. Переменная контекста определена и заполнена, в консоль не попадают ошибки, она просто не создает звук.
Когда я вызываю его внутри функции, которая называется каждым событием onClick, она изначально работает, но я, неудивительно, получаю ошибку в 6-й раз, когда я ее вызываю, так как я достиг предела времени, я могу вызвать его.
var context = new AudioContext; //when defined here, no sound is produced
function playChord() {
var context = new AudioContext; //when defined here, sound is produced (only 6 times)
var time = 0.05;
var frequencies = [...];
frequencies.forEach(function(frequency) {
var oscillator = context.createOscillator();
var gain = context.createGain();
gain.gain.setValueAtTime(0, audioContext.currentTime);
gain.gain.linearRampToValueAtTime(1, time);
gain.gain.linearRampToValueAtTime(0, time + 60*0.25);
oscillator.frequency.value = frequency;
oscillator.connect(gain);
gain.connect(context.destination);
oscillator.start(...);
oscillator.stop(...);
});
};
Почему просто перемещение экземпляра контекстной переменной останавливает мой браузер (хром) от создания звука?
Вы действительно называете do? Gain.gain.doThings() '? Это неверно. –
О, и поскольку вы получаете ошибку в 6-м контексте, вы, вероятно, используете Chrome, у которого есть ограничение на 6 одновременных контекстов. Для их GC требуется некоторое время, чтобы вы столкнулись с лимитом. –
Я обновил свой вопрос, чтобы уточнить вопрос, который я задаю. Я не вызывал doStuff(), я пытался упростить свой код, не включая все. И 6-я ошибка не является проблемой, я знаю, что это неправильное использование. Моя проблема в том, что правильное использование буквально бесшумно. – iquestionshard