Discord.js 录制语音通道的 MP3?

问题描述

我正在尝试在我的 discord.js 机器人中创建一个记录命令。到目前为止,我的代码是:

const channel = message.member.voice.channel;
  if(!channel) return message.channel.send('Join a VC first!');

  const connection = await channel.join();
  const receiver = connection.receiver.createStream(message.member,{
    mode: "pcm",end: "silence"
  });

  const writer = receiver.pipe(fs.createWriteStream('./recording.pcm'));
  writer.on('finish',() => {
    channel.leave();
    message.channel.send('It went quiet,so I left...');
  });

这会将 recording.pcm 保存到我的 PC 上。如果我尝试在 windows 媒体播放器或任何东西中打开文件,它无法识别文件类型。我使用了 Audacity 导入原始音频功能,我可以听到我的录音,所以我知道它有效。然而,给用户这种类型的文件是非常不方便的。如何在 node.js 中将此 .pcm 文件转换.wav.mp3?谢谢!

解决方法

您可以使用 ffmpeg - npm i ffmpeg

const ffmpeg = require('ffmpeg');

try {
  var process = new ffmpeg('path/to/pcm/file');
  process.then(function (audio) {
    audio.fnExtractSoundToMP3('path/to/new/file.mp3',function (error,file) {
      if (!error) console.log('Audio File: ' + file);
    });
  },function (err) {
    console.log('Error: ' + err);      
  });
} catch (e) {
  console.log(e);
}

这应该会将新的 mp3 文件保存到指定位置。