Estoy trabajando con la muestra fantástica aquí .
En esencia, estoy capturando el audio del micrófono usando getUserMedia y luego reduciendo la resolución de cada cuadro a un Int16Array de 16000 muestras por segundo.
En el lado del servidor, puedo recibir el audio y usando el paquete wav , también puedo guardar archivos WAV.
El problema es cuando no quiero reducir la resolución (sí, conozco la implicación del ancho de banda, pero ese es mi requisito).
Puedo transmitir audio sin procesar (en Float32Array ) y guardarlo como WAV. Sin embargo, se agrega mucho ruido blanco.
Cuando reduzco la muestra en el lado del servidor, el paquete WAV no puede manejarlo porque ya no es un marco WAV viable.
Traté de envolver las muestras de micrófono usando
var samples = new Float32Array(e.inputBuffer.getChannelData(0)) socket.emit('binaryData',samples.buffer);y lo recibió en el lado del servidor con
socket.on('binaryData',function (data){ var recovered = new Float32Array(data); wavFileWriter.write(recovered.buffer); });Pero eso tampoco funciona.
Ahora me pregunto si Socket.io hace algo con los datos que disparan la función de reducción de resolución .
¿O me estoy perdiendo algo obvio aquí?
Edición 1: en mi búsqueda para descartar problemas de Socket.io, creé el servidor con esta configuración sin ninguna mejora:
{ perMessageDeflate: false, httpCompression: false, maxHttpBufferSize:1e8 }Lo resolvió con:
const f32 = new Float32Array(data.buffer, 0, data.byteLength / Float32Array.BYTES_PER_ELEMENT);