2013-06-06 9 views
8

Ho controllato la documentazione dell'API Web e le esercitazioni, ma non ho risolto il problema di come affrontare questo problema.API audio Web: programmazione suoni ed esportazione del mix

Diciamo che carico alcuni file wav tramite XMLHttpRequest e quindi creo buffersources. So che posso programmare quando la riproduzione inizia in modo preciso. Ma cosa succede se non voglio giocarli, ma invece voglio memorizzarli e programmarli in un buffer.

Un esempio reale: voglio creare un sequencer semplice in cui si programma la batteria e quindi esportare l'intero mix in wav (senza registrarlo utilizzando RecorderJS o qualcosa del genere). Qualche idea, biblioteche?

risposta

4

Ho appena fatto qualcosa di simile.

In sostanza, è necessario creare un contesto in linea:

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

Dovrete ricreare tutte le BufferSources utilizzando questo nuovo contesto:

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

Quindi pianificare la riproduzione:

newBufferSource.start(offline.currentTime + 10); 

Quindi eseguire il binding all'evento complete per la tua attività offline dering:

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

Poi iniziamo 'resa':

offline.startRendering(); 

Una volta che avete ev.renderedBuffer, si può fare quello che vuoi con esso. Nella mia app, ho un codificatore WAV che ho finito per scrivere da solo - ma è possibile modificare Recorder.js per fare la stessa cosa abbastanza facilmente.

Solo un heads-up: webkitOfflineAudioContext è solo per Chrome al momento. Ecco un link se sei interessato: OfflineAudioContext

+1

In qualche modo non ho capito lo scopo di questo contesto offline solo guardando la documentazione. Grazie mille :) Ecco un esempio funzionante che ho realizzato: http://jsfiddle.net/jC6rd/ –

+0

Impressionante. Sono contento che tu ti sia alzato e correndo. –

+0

offline.startRendering(); non funziona in safari, nessuna soluzione per questo? –

Problemi correlati