Play an AudioBufferSourceNode twice?
-
12-11-2019 - |
Вопрос
Should I be able to use the same AudioBufferSourceNode
to play a sound multiple times? For some reason, calling noteGrainOn
a second time doesn't play audio, even with an intervening noteOff
.
This code only plays the sound once:
var node = audioContext.createBufferSource()
node.buffer = audioBuffer
node.connect(audioContext.destination)
var now = audioContext.currentTime
node.noteGrainOn(now, 0, 2)
node.noteOff(now + 2)
node.noteGrainOn(now + 3, 0, 2)
node.noteOff(now + 5)
Решение
Once you've played back a source node, you can't reuse it. You need to create another AudioBufferSourceNode
with the same buffer. Check out the Web Audio FAQ for more info (see the noteOn() question).
Другие советы
I have some hack to toggle play/pause easily :) You can map the audio to an existing audio tag directly and use the control on it
<audio id="sound" src="./test.mp3" controls="controls"></audio>
var audioElement = document.getElementById('sound');
source = audioContext.createMediaElementSource(audioElement);
/* ... */
audioElement.pause();
My example running here : http://www.b2bweb.fr/bonus/Braincer/ I currently use Chrome build 18.0.xxxx
Others refs :
Не связан с StackOverflow