javascript - tag - web audio api examples
Web Audio API: cómo reproducir una secuencia de fragmentos de MP3 (3)
Así que estoy intentando usar la Web Audio API
para decodificar y reproducir fragmentos de archivos MP3 transmitidos al navegador usando Node.js & Socket.IO.
Mi pregunta es si mi única opción es crear un nuevo AudioBufferSourceNode
para cada fragmento recibido de los datos de audio recibidos o ¿es posible crear un único AudioBufferSourceNode para todos los fragmentos y simplemente agregar los nuevos datos de audio al atributo de buffer
del nodo fuente?
Actualmente, así es como estoy recibiendo mis fragmentos de MP3, decodificándolos y programándolos para su reproducción. Ya verifiqué que cada fragmento que se recibe es un ''fragmento de MP3 válido'' y que está siendo decodificado con éxito por la API de audio web.
audioContext = new AudioContext();
startTime = 0;
socket.on(''chunk_received'', function(chunk) {
audioContext.decodeAudioData(toArrayBuffer(data.audio), function(buffer) {
var source = audioContext.createBufferSource();
source.buffer = buffer;
source.connect(audioContext.destination);
source.start(startTime);
startTime += buffer.duration;
});
});
Cualquier consejo o información sobre la mejor manera de "actualizar" la reproducción de la API de audio web con nuevos datos de audio sería muy apreciado.
Actualmente, decodeAudioData()
requiere archivos completos y no puede proporcionar decodificación basada en fragmentos en archivos incompletos. La próxima versión de la API de audio web debe proporcionar esta función: https://github.com/WebAudio/web-audio-api/issues/337
Mientras tanto, comencé a escribir ejemplos para decodificar audio en fragmentos hasta que la nueva versión de API esté disponible.
No, no puede reutilizar un AudioBufferSourceNode y no puede push
en un AudioBuffer. Sus longitudes son inmutables.
Este artículo ( http://www.html5rocks.com/en/tutorials/audio/scheduling/ ) tiene buena información sobre la programación con la API de Web Audio. Pero estás en el camino correcto.
Veo al menos 2 enfoques posibles.
Configuración de un
scriptProcessorNode
, que alimentará la cola de datos recibidos y decodificados al flujo en tiempo real de audio web.Explotar la propiedad de
audioBufferSource.loop
: actualizar el contenido de audioBuffer en función del tiempo de audio.
Ambos enfoques se implementan en https://github.com/audio-lab/web-audio-stream . Técnicamente puede usar eso para enviar los datos recibidos al audio de la web.