audio - programa - convirtiendo el archivo.wav a.ogg en javascript
ogg to mp3 online (4)
A los que votaron negativamente por esta publicación: no es productivo votar las preguntas sin tomarse el tiempo para ofrecer algún tipo de idea de por qué la pregunta es de alguna manera ''mala''. Creo que esta pregunta tiene sus méritos, y el cartel claramente ha dedicado un tiempo a tratar de resolver el problema por su cuenta. La especificación de Web Audio está diseñada para permitir exactamente este tipo de funcionalidad, pero aún no está cerca de cumplir con ese propósito:
Esta especificación describe una API JavaScript de alto nivel para procesar y sintetizar audio en aplicaciones web. El paradigma principal es un gráfico de enrutamiento de audio, donde varios objetos AudioNode se conectan entre sí para definir la representación general del audio. El procesamiento real se llevará a cabo principalmente en la implementación subyacente (normalmente optimizado código ensamblador / C / C ++), pero también admite el procesamiento y síntesis directa de JavaScript .
Aquí hay una declaración sobre el borrador actual de la especificación de audio w3c, que hace los siguientes puntos:
- Al procesar audio en JavaScript, es extremadamente difícil obtener audio confiable y sin problemas, mientras se logra una latencia razonablemente baja, especialmente bajo una gran carga de procesador.
- JavaScript es mucho más lento que el código C ++ altamente optimizado y no es capaz de aprovechar las optimizaciones SSE y multi-threading, que es fundamental para obtener un buen rendimiento en los procesadores de hoy. El código nativo optimizado puede ser del orden de veinte veces más rápido para procesar FFT en comparación con JavaScript. No es lo suficientemente eficiente para el procesamiento de audio de alta resistencia, como la convolución y la espacialización 3D de grandes cantidades de fuentes de audio.
- setInterval () y el manejo de XHR robarán tiempo del procesamiento de audio. En un juego razonablemente complejo, se necesitarán algunos recursos de JavaScript para la física y los gráficos del juego. Esto crea desafíos porque el procesamiento de audio es impulsado por fechas límite (para evitar problemas técnicos y obtener una latencia lo suficientemente baja). JavaScript no se ejecuta en un subproceso de procesamiento en tiempo real y, por lo tanto, puede ser reemplazado por muchos otros subprocesos que se ejecutan en el sistema.
- Garbage Collection (y grupos de liberación automática en Mac OS X) puede causar un retraso impredecible en un hilo de JavaScript.
- Se pueden ejecutar múltiples contextos de JavaScript en el hilo principal, robando el tiempo del contexto que realiza el procesamiento.
- Otro código (que no sea JavaScript), como el procesamiento de páginas, se ejecuta en el hilo principal.
- Se pueden tomar bloqueos y la memoria se asigna en el hilo de JavaScript. Esto puede causar un adelantamiento adicional del hilo.
- Los problemas son aún más difíciles con la generación actual de dispositivos móviles que tienen procesadores con un rendimiento relativamente bajo y problemas de consumo de energía / duración de la batería.
ECMAScript (js) es realmente rápido para muchas cosas, y cada vez es más rápido según el motor que interprete el código. Sin embargo, para algo tan intenso como el procesamiento de audio, sería mucho mejor utilizar una herramienta de bajo nivel compilada para optimizar los recursos específicos de la tarea. Actualmente estoy usando ffmpeg en el lado del servidor para lograr algo similar.
Sé que es realmente ineficiente tener que enviar un archivo wav a través de una conexión a Internet solo para obtener un archivo .ogg más compacto, pero ese es el estado actual de las cosas con la API de audio web. Para realizar cualquier procesamiento del lado del cliente, el usuario tendría que otorgar explícitamente acceso al sistema de archivos local y los privilegios de ejecución para que el archivo realice la conversión. Es de esperar que alguien aborde este problema evidente pronto. Buena suerte.
Editar: también puedes usar el native-client de Google si no te importa limitar a tus usuarios a Chrome. Parece una tecnología muy prometedora que se carga en una caja de arena y logra velocidades casi tan buenas como el código ejecutado nativamente. Asumo que habrá implementaciones similares en otros navegadores en algún momento.
Estoy tratando de capturar la entrada de audio del usuario desde el navegador. Lo he hecho con WAV pero los archivos son realmente grandes. Un amigo mío me dijo que los archivos OGG son mucho más pequeños. ¿Alguien sabe cómo convertir WAV a OGG? También tengo el buffer de datos en bruto, realmente no necesito convertir. Pero solo necesito el codificador OGG.
Aquí está el codificador WAV de Matt Diamond''s RecorderJS :
function encodeWAV(samples){
var buffer = new ArrayBuffer(44 + samples.length * 2);
var view = new DataView(buffer);
/* RIFF identifier */
writeString(view, 0, ''RIFF'');
/* file length */
view.setUint32(4, 32 + samples.length * 2, true);
/* RIFF type */
writeString(view, 8, ''WAVE'');
/* format chunk identifier */
writeString(view, 12, ''fmt '');
/* format chunk length */
view.setUint32(16, 16, true);
/* sample format (raw) */
view.setUint16(20, 1, true);
/* channel count */
view.setUint16(22, 2, true);
/* sample rate */
view.setUint32(24, sampleRate, true);
/* byte rate (sample rate * block align) */
view.setUint32(28, sampleRate * 4, true);
/* block align (channel count * bytes per sample) */
view.setUint16(32, 4, true);
/* bits per sample */
view.setUint16(34, 16, true);
/* data chunk identifier */
writeString(view, 36, ''data'');
/* data chunk length */
view.setUint32(40, samples.length * 2, true);
floatTo16BitPCM(view, 44, samples);
return view;
}
¿Hay uno para OGG?
Esta pregunta me está volviendo loca porque no he visto a nadie encontrar una solución realmente limpia, así que creé mi propia biblioteca:
https://github.com/sb2702/audioRecord.js
Uso básico
audioRecord.requestDevice(function(recorder){
// Request user permission for microphone access
recorder.record(); // Start recording
recorder.stop(); /Stop recording
recorder.exportOGG(function(oggBlob){
//Here''s your OGG file
});
recorder.exportMP3(function(mp3Blob){
//Here''s your mp3 file
});
recorder.exportWAV(function(wavBlob){
//Here''s your WAV file
});
});
Usando la opción de codificación continua de mp3, es completamente razonable capturar y codificar la entrada de audio completamente en el navegador, en todos los navegadores, sin un servidor o código nativo.
DEMO : http://sb2702.github.io/audioRecord.js/
Todavía es áspero en los bordes, pero intentaré limpiarlo / arreglarlo.
Ok, esta podría no ser una respuesta directa, ya que no dice cómo convertir .wav
en .ogg
. Por otra parte, ¿por qué molestarse con la conversión, cuando se puede el archivo .ogg
directamente. Esto depende de MediaRecorder API , pero los navegadores que soportan WebAudio generalmente también tienen esto (Firefox 25+ y Chrome 47+)
NUEVO : El trabajo derivado del grabador de Matt Diamond grabando en Ogg-Opus
Para codificar Ogg-Opus un archivo en su totalidad en un navegador sin extensiones especiales, se puede usar un puerto Emscripten de opus-tools/opusenc (demo) . Viene con soporte de decodificación para WAV, AIFF y un par de otros formatos y una nueva muestra incorporada.
Un codificador Ogg-Vorbis también está disponible .
Dado que la persona que pregunta está principalmente fuera de la compresión de audio, también podrían estar interesados en la codificación de mp3 utilizando lame .