Conversión de WAV a cualquier formatting de audio comprimido en JavaScript del lado del cliente

Estoy grabando audio de getUserMedia({audio:true}); en el browser usando Recorder.js y luego exportarlo como un file WAV porque esa es la única opción que proporciona la biblioteca.

Un file de 1 minuto y 20 segundos tiene 14,1 MB de tamaño. Necesito upload el audio a un server y necesito hacerlo rápido. ¿Cómo convierto el audio WAV en cualquier otro formatting comprimido para networkingucir el tamaño del file?

No me importa convertirme a:

  • MP3
  • Opus
  • WebM
  • Ogg
  • FLAC
  • cualquier otro formatting que conozcas

Si no hay manera de convertir ahora a ninguno de estos formattings, ¿cómo puedo comprimir el file WAV en el cliente?

PD: hice muchas búsquedas para encontrar cualquier cosa que convierta WAV en JS, pero no encontré nada. libmp3lame.js no funciona en Chrome.

¡Gracias!

He hecho una grabadora de audio que graba en mp3 directamente desde el browser combinando RecorderJS y libmp3lame.js

Puede encontrar el proyecto gitHub aquí: https://github.com/nusofthq/Recordmp3js

y una explicación más detallada de la implementación: http://nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/

Lo que realmente quieres es MediaStream "Recording API", que se está trabajando actualmente. Hasta que esté disponible, recomiendo usar emscriptem en una fuente C / C ++, y considere ejecutarlo en un webworker para evitar el locking de la IU y otras tabs.

Estaba enfrentando el mismo problema y se me ocurrió una solución bastante rápida y sucia:

  • comprime el file wav con zip.js (funciona con Chrome, Firefox, Safari 6 e Internet Explorer 10)

Más información acerca de la documentation zip.js

Al less esto está networkinguciendo mucho el tamaño, el file es aproximadamente> 75% más pequeño, por lo que la compression es 1: 4

ACTUALIZACIÓN: Tal vez echar un vistazo a esto: https://webrtc.github.io/samples/

Es una aplicación de chat para Chrome y Firefox desarrollada por google, supongo que con tipo de licencia CC

Tuve un problema similar (también el uso de recorder.js) y he logrado resolver el uso del excelente proyecto videoconverter.js , que incluye un puerto de ffmpeg a Javascript con emscripen. A less que esto es el file ffmpeg.js es de aproximadamente 25Mb.

exportWAV function exportWAV existente en recorderWorker.js para devolver tanto un WAV (para reproducción HTML5 <audio> ) como un Blob que contiene un file MP2 codificado:

 function encodeWAV(samples) { var buffer = new ArrayBuffer(44 + samples.length * 2); var view = new DataView(buffer); /* ... various writing methods */ return { wavdata: new Blob([buffer], { type: "audio/wav" }), mp2data: ffmpeg_convert(buffer) }; } function ffmpeg_convert(buffer) { console.log("starting mp2 conversion"); var args = "-i input -f mp2 output.mp2"; var results = ffmpeg_run({ arguments: args.split(" "), files: [ { data: new Uint8Array(buffer), "name": "input" } ] }); if (results) { var file = results[0]; console.log("File recieved", file.name, file.data); return new Blob([file.data], { type: "audio/mpeg" }); } return null; } 

Este método se puede utilizar para codificar el WAV a cualquier códec respaldado por libavcodec de ffmpeg

Pude lograr la compression usando opus.js ,

Puedes encontrar mi implementación aquí: recordOpus , pero hay una trampa , la mía está acoplada con el server, y yo uso el server node.js ….

    Intereting Posts