2012-07-02 9 views
9

È possibile caricare un file audio da <audio/> -elemento tramite createMediaElementSource e quindi caricare i dati audio in un AudioBufferSourceNode?Carica audiodata in AudioBufferSourceNode dall'elemento <audio/> tramite createMediaElementSource?

L'utilizzo dell'elemento audio come origine (MediaElementSource) sembra non essere un'opzione, poiché desidero utilizzare metodi di buffer come noteOn e noteGrain.

Caricamento del file audio direttamente al buffer tramite XHR purtroppo non è un'opzione né (vedi Open stream_url of a Soundcloud Track via Client-Side XHR?)

Inserire il contenuto del buffer dagli elementi audio sembra essere possibile però:

http://www.w3.org/2011/audio/wiki/Spec_Differences#Reading_Data_from_a_Media_Element

Oppure è addirittura possibile utilizzare direttamente il buffer di un elemento <audio/> come un sourceNode?

risposta

5

Questo è possibile. Vedi il mio post allo http://updates.html5rocks.com/2012/02/HTML5-audio-and-the-Web-Audio-API-are-BFFs. C'è anche uno snippet di codice e un esempio lì. Ci sono alcuni bug in sospeso, ma il caricamento di un <audio> nell'API Web Audio dovrebbe funzionare come si desidera.

+3

sì, ma mi piacerebbe sapere se è possibile ottenere il ** buffer ** da un MediaElementSource per usarlo come/in un bufferSourceNode (che ha noteOn, noteOff, noteGrain ecc.)? –

+0

bel esempio, anche se :) –

+0

perché lasciare +100 andare a sprecare ... così ci vai :) –

0

non sono sicuro se hai trovato ancora una soluzione migliore e ho anche controllato il link che hai postato W3C: http://www.w3.org/2011/audio/wiki/Spec_Differences#Reading_Data_from_a_Media_Element

Ma per farlo funzionare davvero è necessario utilizzare AudioContext.createScriptProcessor(). Non l'ho ancora provato, ma fondamentalmente connetti il ​​nodo sorgente (un elemento audio) a un processore di script ma poi non emetti nemmeno l'audio se non ne hai bisogno. Nella callback onaudioprocess si ha accesso diretto ai dati del buffer audio (in blocchi di una determinata dimensione del corso). Ci sono esempi nel link sopra.

Inoltre penso che si possa in qualche modo modificare la velocità della riproduzione in modo da poter ottenere più array di buffer più velocemente.

Problemi correlati