2012-02-24 17 views
10

Czy mogę używać tego samego AudioBufferSourceNode do odtwarzania dźwięku wiele razy? Z jakiegoś powodu ponowne wywołanie noteGrainOn nie odtwarza dźwięku, nawet jeśli interweniuje noteOff.Dwa razy zagraj w AudioBufferSourceNode?

Kod ten odtwarza tylko dźwięk raz:

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) 

Odpowiedz

16

Po odtwarzane węzeł źródłowy, nie można używać go. Musisz utworzyć kolejny AudioBufferSourceNode z tym samym buforem. Sprawdź numer Web Audio FAQ, aby uzyskać więcej informacji (patrz pytanie noteOn()).

+1

Dzięki za odpowiedź i FAQ. – alltom

+1

Tak jak mówisz, nie jest to możliwe http://www.html5rocks.com/en/tutorials/webaudio/intro/#toc-volume trzeba przeładować. Mam również problemy z ponownym ładowaniem za pomocą czasu bieżącego // play = function() {source.noteOn (now); }, pause = function() {now = audioContext.currentTime; source.noteOff (0); } – molokoloco

2

mam pewne sztuczki aby przełączyć odtwarzanie/pauza łatwo :) można odwzorować dźwięk do istniejącego tagu audio bezpośrednio i za pomocą regulatora na to

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

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

Mój przykład działa tutaj: http://www.b2bweb.fr/bonus/Braincer/ Obecnie używać Chrome budować 18.0.xxxx

Inne pozycje literaturowe:

Powiązane problemy