2013-06-06 10 views
8

Sprawdzałem dokumentację API Web Audio i samouczki, ale nie zrozumiałem, jak rozwiązać ten problem.Web audio API: planowanie dźwięków i eksportowanie miksu

Załóżmy, że ładuję kilka plików WAV przez XMLHttpRequest, a następnie utworzę zasoby bufora. Wiem, że mogę zaplanować, kiedy odtwarzanie rozpocznie się dokładnie. Ale co, jeśli nie chcę ich odtwarzać, ale chcę je przechowywać i planować w buforze.

Prawdziwy przykład: chcę utworzyć prosty sekwencer, w którym planujesz perkusje, a następnie wyeksportować cały miks do wav (bez nagrywania za pomocą RecorderJS lub czegoś podobnego). Jakieś pomysły, biblioteki?

Odpowiedz

4

Po prostu zrobiłem coś takiego.

Zasadniczo, musisz utworzyć w trybie offline kontekstu:

var offline = new webkitOfflineAudioContext(numChannels, lengthInSamples, sampleRate) 

Musisz odtworzyć wszystkie BufferSources przy użyciu tego nowego kontekstu:

var newBufferSource = offline.createBufferSource(); 
newBufferSource.buffer = someAudioBuffer; 
newBufferSource.connect(offline.destination); 

Następnie zaplanować odtwarzanie:

newBufferSource.start(offline.currentTime + 10); 

Następnie połącz zdarzenie complete dla użytkownika w trybie offline Dering:

offline.onComplete = function(ev){ 
    doSomething(ev.renderedBuffer); 
} 

Następnie uruchom 'rendering':

offline.startRendering(); 

Gdy masz ev.renderedBuffer, możesz robić, co chcesz z nim. W mojej aplikacji mam koder WAV, który napisałem sam - ale możesz zmodyfikować Recorder.js, aby zrobić to samo łatwo.

Po prostu heads-up: webkitOfflineAudioContext jest w tej chwili tylko Chrome. Oto link, jeśli jesteś zainteresowany: OfflineAudioContext

+1

Jakoś nie zrozumiałem celu tego kontekstu offline, po prostu patrząc na dokumentację. Dziękuję bardzo :) Oto działający przykład: http://jsfiddle.net/jC6rd/ –

+0

Awesome. Cieszę się, że wstałeś i działasz. –

+0

offline.startRendering(); nie działa w safari, jakieś rozwiązanie tego? –