2012-07-02 12 views
9

¿Es posible tener un archivo de audio cargado desde <audio/> -elemento a través de createMediaElementSource y luego cargar los datos de audio en un AudioBufferSourceNode?Cargar datos audio en AudioBufferSourceNode del elemento <audio/> a través de createMediaElementSource?

Usando el elemento de audio como fuente (MediaElementSource) no parece ser una opción, ya que quiero usar métodos de amortiguamiento como noteOn y noteGrain.

Carga del archivo de audio directamente a la memoria intermedia a través de XHR por desgracia no es una opción ni (ver Open stream_url of a Soundcloud Track via Client-Side XHR?)

Cargando el contenido del búfer de los elementos de audio parece ser posible sin embargo:

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

¿O es incluso posible utilizar directamente el buffer de un <audio/> -element como un sourceNode?

Respuesta

5

Esto es posible. Ver mi publicación en http://updates.html5rocks.com/2012/02/HTML5-audio-and-the-Web-Audio-API-are-BFFs. También hay un fragmento de código y un ejemplo allí. Hay algunos errores pendientes, pero cargar un <audio> en Web Audio API debería funcionar como lo desee.

+3

sí, pero me gustaría saber si es posible obtener el ** buffer ** de un MediaElementSource para usarlo como/en un bufferSourceNode (que tiene noteOn, noteOff, noteGrain etc.)? –

+0

buen ejemplo, aunque :) –

+0

por qué dejar +100 ir a perder ... así que ahí tienes :) –

0

no estoy seguro de si encontró una solución mejor todavía y también he comprobado el enlace W3C informados: http://www.w3.org/2011/audio/wiki/Spec_Differences#Reading_Data_from_a_Media_Element

Pero para que funcione realmente tiene que usar AudioContext.createScriptProcessor(). Todavía no lo intenté, pero básicamente conectas el nodo de origen (un elemento de audio) a un procesador de scripts, pero luego ni siquiera emite el audio si no lo necesitas. En la devolución de llamada onaudioprocess tiene acceso directo a los datos del búfer de audio (en fragmentos de un tamaño de curso específico). Hay ejemplos en el enlace de arriba.

También creo que de alguna manera puede ajustar la velocidad de la reproducción para que pueda obtener más matrices de almacenamiento intermedio más rápido.

Cuestiones relacionadas