问题描述
我正在做一个不和谐的项目,在那个项目中我需要录制用户的声音,我正在关注 this 文档.
I'm working on a discord project and in that project i need to record a user voice, i'm following this document.
到目前为止,这是我写的:
so far this is what i wrote:
const fs = require('fs'); const Discord = require('discord.js'); const client = new Discord.Client(); client.once('ready', () => { console.log('Ready!'); }); client.on('message', async message => { if (message.content === 'a' && message.member.voice.channel) { const connection = await message.member.voice.channel.join(); const audio = connection.receiver.createStream('user_id?', { mode: 'pcm' }); audio.pipe(fs.createWriteStream('user_audio')); } }); client.login('token');
但问题是 user_audio 文件总是空的!
but the problem is that always the user_audio file is empty!
推荐答案
这是discord.js中的一个bug,要解决这个问题我们需要播放音频...
This is a bug in discord.js, to solve this problem we need to play an audio...
const fs = require('fs'); const Discord = require('discord.js'); const client = new Discord.Client(); const { Readable } = require('stream'); const SILENCE_FRAME = Buffer.from([0xF8, 0xFF, 0xFE]); class Silence extends Readable { _read() { this.push(SILENCE_FRAME); this.destroy(); } } client.once('ready', () => { console.log('Ready!'); }); client.on('message', async message => { if (message.content === 's' && message.member.voice.channel) { const connection = await message.member.voice.channel.join(); const audio = connection.receiver.createStream(message, { mode: 'pcm', end: 'manual' }); audio.pipe(fs.createWriteStream('user_audio')); connection.play(new Silence(), { type: 'opus' }); console.log(message.member.user.id); } }); client.login('token');