AudioContext: Oscillator - знать, когда все звуки были проиграны
Я использую этот javascript api (miniMusic). Я смог создать музыку, а затем экспортировать код JavaScript. Я также могу запустить его.
Я хотел бы знать, когда моя музыка закончилась, чтобы я мог играть ее снова и иметь контроль над ней.
with(new AudioContext)
for(i in D=[12,,,13,,,18,,,,,,12,,,13,,,18,,,,,,12,,,13,,,18,,,15,,,12,,,8,,,12,,,13]) {
with(createOscillator())
if(D[i]) {
connect(destination)
frequency.value=800*1.06**(13-D[i]),
type='square',
start(i*.1),
stop(i*.1+.1)
}
}
// -> onEnd = function (...) {}
Цикл запускается мгновенно, поэтому я не могу использовать индексы, чтобы найти ноту, на которой играет музыка. Кто-нибудь может мне помочь?
1 ответ
Решение
В осцилляторе есть функция onend, которая вызывается по окончании тона, однако связанный с вами API создает новый осциллятор для каждой ноты, вы можете посчитать количество сыгранных нот, а затем выполнить цикл, когда количество нот будет равно количеству нот в мелодия
пример
with(new AudioContext)
for (i in D = [12, , , 13, , , 18, , , , , , 12, , , 13, , , 18, , , , , , 12, , , 13, , , 18, , , 15, , , 12, , , 8, , , 12, , , 13]) {
with(createOscillator())
if (D[i]) {
onended = function() {
console.log('Note has stopped playing');
}
connect(destination)
frequency.value = 800 * 1.06 ** (13 - D[i]),
type = 'square',
start(i * .1),
stop(i * .1 + .1)
}
}
Надеюсь это поможет!