Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

356
Vistas
Escriba o transmita un archivo de audio (voz en vivo) a una variable como binario en Node.js

Estoy trabajando con transmisiones de audio en Node.js. Por ahora, mi código no tiene utils.promisfy y tengo 3 etapas. Entonces, después del segundo .pipe , estoy escribiendo el archivo en el disco en formato de audio wav con los parámetros requeridos.

Ejemplo de código a continuación:

 import { FileWriter } from 'wav'; const filename = `./${Date.now()}-${userId}.wav`; const encoder = new OpusEncoder(16000, 1); receiver .subscribe(userId, { end: { behavior: EndBehaviorType.AfterSilence, duration: 100, }, }) // OpusDecodingStream is a custom class, which convert audio, like a gzip stage for file. .pipe(new OpusDecodingStream({}, encoder)) .pipe( // Writes wav file to disk, also can be replaces with FileRead, part of wav module new FileWriter(filename, { channels: 1, sampleRate: 16000, }), );

El problema es: necesito transferir (¡no transmitir!) el archivo de audio resultante en formato binario a través del método POST de axios . Así que supongo que es un poco incorrecto escribir un archivo en el disco en lugar de escribirlo en una variable, y después de que finalice la transmisión, enviarlo directamente a la URL requerida. Algo (por lógica) que me gustaría ver:

 // other code const fileStringBinary = await receiver .subscribe(userId, { end: { behavior: EndBehaviorType.AfterSilence, duration: 100, }, }) .pipe(new OpusDecodingStream({}, encoder)) .pipe( return new FileWriter(filename, { channels: 1, sampleRate: 16000, }), ); await axios.post('https://url.com', { data: fileStringBinary });

Desafortunadamente, no soy tan bueno con las transmisiones y especialmente con el audio, por lo que estoy buscando un poco de ayuda o cualquier consejo útil será bienvenido para mí.

Entiendo que podría escribir mi archivo en el directorio, encontrarlo allí, leerlo una vez más con node:steam createReadStream y luego PUBLICARLO en la URL requerida. Esto no es lo que necesito. Me gustaría saltarme estas etapas inútiles con la escritura y luego la lectura. Creo que hay una manera de transformar Steam a formato binario y escribirlo en la variable js.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Eso fue un poco complicado después de todo, pero supongo que lo descubrí:

 const stream = receiver .subscribe(userId, { end: { behavior: EndBehaviorType.AfterSilence, duration: 100, }, }) .pipe( new opus.OggLogicalBitstream({ opusHead: new opus.OpusHead({ channelCount: 2, sampleRate: 48000, }), pageSizeControl: { maxPackets: 10, }, crc: false, }), ); const data = []; stream.on('data', (chunk) => { data.push(chunk); }); stream.on('end', async () => { try { const response = await axios.post( `https://url.com${postParams}`, Buffer.concat(data), { headers: { Authorization: `Api-Key ${token}`, 'Content-Type': 'application/x-www-form-urlencoded', }, }, ); console.log(response); } catch (e) { console.log(e); } });

Desafortunadamente, no he encontrado una solución mejor que usar el modelo de events de la vieja escuela con data y al end . Mi caso de trabajo está conectado con la grabación de voz Discord.js sin archivo y usando la transmisión para el reconocimiento de voz.

Estaré encantado si alguien proporciona una mejor solución de sintaxis, y en ese caso aceptaré esta respuesta como solved .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda