Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

352
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!