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