小编Nie*_*les的帖子

如何从node.js设置虚拟麦克风和管道音频

我想要实现的总结:

我正在做一些关于Discord机器人的工作.我正在尝试加入语音通道,这是一个简单的部分,然后使用该语音通道中扬声器的组合音频作为Web浏览器中网页的输入.只要它可以通过Selenium控制,它对哪个浏览器来说并不重要.


到目前为止我尝试/研究过的内容

到目前为止,我的机器人使用discord.py API包装器在Python中编写.不幸的是,听取而不是放入音频并没有完全实现 - 更不用说记录 - 与discord.py.这让我决定切换到node.js(即discord.js)以获取我的机器人的语音通道内容.

切换到discord.js之后,很容易确定谁在说话并为该用户创建音频流(PCM流).对于下一部分,我只是将音频流传输到虚拟麦克风并选择它作为浏览器上的音频输入.您甚至可以在node.js 1中使用FFMPEG ,以获得如下所示的内容:

const Discord = require("discord.js");
const client = new Discord.Client();

client.on('ready', () => {
  voiceChannel = client.channels.get('SOME_CHANNEL_ID');
  voiceChannel.join()
    .then(conn => {
      console.log('Connected')

      const receiver = conn.createReceiver();

      conn.on('speaking', (user, speaking) => {
        if (speaking) {
          const audioStream = receiver.createPCMStream(user);

          ffmpeg(stream)
              .inputFormat('s32le')
              .audioFrequency(16000)
              .audioChannels(1)
              .audioCodec('pcm_s16le')
              .format('s16le')
              .pipe(someVirtualMic);          
        }
      });
    })
    .catch(console.log);
  }); 

client.login('SOME_TOKEN');
Run Code Online (Sandbox Code Playgroud)

最后一部分,创建和流式传输到虚拟麦克风,已被证明是相当复杂的.我已经阅读了关于高级Linux声音架构(ALSA)和JACK音频连接套件的大量SO帖子和文档,但我根本无法弄清楚如何设置将显示为麦克风的虚拟麦克风我的浏览器,或如何管道音频到它.

任何帮助或指向解决方案的指针将不胜感激!


附录

在过去的几天里,我一直在研究这个问题.我现在已经了解了ALSA环回设备,并认为解决方案必须存在.

我已经差不多跟着谈到有关环回设备,旨在实现以下目标:

简单地假设您在同一设备的一个OUT和一个IN之间有物理链接. …

ffmpeg alsa node.js jack discord.js

9
推荐指数
1
解决办法
1701
查看次数

Python3 中的 http.client.IncompleteRead 错误

我正在尝试使用 beautifulsoup4 和 python3 抓取一个非常长的网页。由于网站的大小,http.client当我尝试在网站中搜索某些内容时,会出现错误:

文件“/anaconda3/lib/python3.6/http/client.py”,第 456 行,在读取返回 self._readall_chunked() 文件“/anaconda3/lib/python3.6/http/client.py”,第 570 行,在 _readall_chunked 中引发 IncompleteRead(b''.join(value)) http.client.IncompleteRead: IncompleteRead(16109 字节读取)

有什么办法可以解决这个错误吗?

python beautifulsoup python-3.x http.client

5
推荐指数
1
解决办法
1万
查看次数