1
Я играю с Web Audio API и используя этот код:Удаление console.log Перерывы кода с Web Audio API
function playTones(startFreq, numNotes) {
if (numNotes === 0) return;
var osc = AC.createOscillator();
osc.frequency.value = startFreq;
osc.onended = function() {
playTones(startFreq + 20, numNotes-1);
};
console.log(osc.onended);
osc.connect(AC.destination);
osc.start();
osc.stop(AC.currentTime + 1);
}
Это просто должен играть серию заметок, каждый из которых 20Гц более высокий, чем предыдущая. Однако, когда я удаляю console.log
, он не работает; он воспроизводит только первую ноту, а затем останавливается с обратным вызовом onended
, который никогда не вызывается. Почему это произойдет? Спасибо за любую помощь.
Определить 'osc' за пределами вашей' функции playTones', и передать его в качестве параметра. – jperezov
работает для меня: https://jsfiddle.net/d3m041o6/ (с помощью Chrome 47 в Windows). Кроме того, я не понимаю, почему это должно изменить поведение кода, к сожалению – pomeh
Хм, это странно, что эта скрипка работает ... Неправильно ли предположить, что этот обратный вызов 'onended' будет срабатывать, пока' osc' все еще существует? Другими словами, возвращается функция, а затем вызов 'onended' callback вызывается для' osc', но теперь он вышел из callstack, поэтому ничего не происходит? – JuliusAlexanderIV