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 :

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top