2012-02-24 21 views
10

¿Debería poder usar el mismo AudioBufferSourceNode para reproducir un sonido varias veces? Por alguna razón, llamar al noteGrainOn por segunda vez no reproduce audio, incluso con una intervención de noteOff.¿Reproduce un AudioBufferSourceNode dos veces?

Este código sólo reproduce el sonido una vez:

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) 

Respuesta

16

Una vez que haya reproducido un nodo fuente, no se puede volver a utilizarla. Necesita crear otro AudioBufferSourceNode con el mismo buffer. Consulte el Web Audio FAQ para obtener más información (consulte la pregunta de NoteOn()).

+1

Gracias, por la respuesta y por las preguntas frecuentes. – alltom

+1

Como dice, esto no parece posible. Es necesario volver a cargar http://www.html5rocks.com/en/tutorials/webaudio/intro/#toc-volume. También tengo problemas para recargar usando un currentime // play = function() {source.noteOn (now); }, pause = function() {now = audioContext.currentTime; source.noteOff (0); } – molokoloco

2

tengo algún artilugio para cambiar de reproducción/pausa fácilmente :) puede asignar el audio a una etiqueta de audio existente y utilizar directamente el control sobre ella

<audio id="sound" src="./test.mp3" controls="controls"></audio> 

var audioElement = document.getElementById('sound'); 
source = audioContext.createMediaElementSource(audioElement); 
/* ... */ 
audioElement.pause(); 

Mi ejemplo correr aquí: http://www.b2bweb.fr/bonus/Braincer/ que actualmente utilizar Chrome construir 18.0.xxxx

Otras referencias: