Creé un bot de discord con discord.js v13, tengo problemas para convertir el paquete opus a otros tipos de archivos, incluso los ejemplos oficiales de discord.js no se han actualizado para discord.js v13, no tengo idea de cómo lidiar con eso, aquí está parte de mi código
async function record(interaction, opts = {}) { //get voice connection, if there isn't one, create one let connection = getVoiceConnection(interaction.guildId); if (!connection) { if (!interaction.member.voice.channel) return false; connection = joinVoice(interaction.member.voice.channel, interaction) } const memberId = interaction.member.id; //create the stream const stream = connection.receiver.subscribe(memberId, { end: { behavior: EndBehaviorType.Manual } }); //create the file stream const writableStream = fs.createWriteStream(`${opts.filename || interaction.guild.name}.${opts.format || 'opus'}`); console.log('Created the streams, started recording'); //todo: set the stream into client and stop it in another function return setTimeout(() => { console.log('Creating the decoder') let decoder = new prism.opus.Decoder(); console.log('Created'); stream.destroy(); console.log('Stopped recording and saving the stream'); stream .pipe(writableStream) stream.on('close', () => { console.log('Data Stream closed') }); stream.on('error', (e) => { console.error(e) }); }, 5000); }Intente configurar frameSize , channels y rate para el Decoder :
const opusDecoder = new prism.opus.Decoder({ frameSize: 960, channels: 2, rate: 48000, }) Tampoco estoy seguro de si está destinado, pero parece que destruye la stream justo antes de canalizarla en una transmisión grabable.
Aquí está mi ejemplo que proporciona una transmisión PCM de 16 bits con señal estéreo de 48 kHz:
const writeStream = fs.createWriteStream('samples/output.pcm') const listenStream = connection.receiver.subscribe(userId) const opusDecoder = new prism.opus.Decoder({ frameSize: 960, channels: 2, rate: 48000, }) listenStream.pipe(opusDecoder).pipe(writeStream)Luego puede usar Audacity para reproducir el archivo PCM. Use Archivo -> Importar -> Datos sin procesar...