0

我正在尝试使用 Python 来“麦克风监控”,即除了来自 PC 的任何其他输出信号外,还可以通过耳机实时播放麦克风信号。

我可以通过修改我的 PC 的播放设置来实现这一点,但我想用 Python 来完成,这样我就可以编写一个 Raspberry Pi 来为我的 PS4 廉价耳机进行麦克风监控。

几乎可以使用 PyAudio 或 sounddevice 完成此操作,但有一个小而显着的延迟。所以:

  • 有没有办法用 Python 消除这种延迟,例如以某种方式更直接地访问我的 PC 的输入?
  • 否则,为什么用 Python 不可能呢?
  • 我可以以与我的 PC 相同的方式将 Raspberry Pi 配置为麦克风监视器吗?

Sounddevice 代码如下所示,供参考:

import sounddevice as sd
duration = 5.5  # seconds

def callback(indata, outdata, frames, time, status):
    if status:
        print(status)
    outdata[:] = indata

with sd.Stream(channels=2, callback=callback):
    sd.sleep(int(duration * 1000))
4

1 回答 1

2

中间有一台计算机总会有延迟。专业音频设备通常是为最小延迟而定制的(或者只是模拟的)。为了减少延迟,您需要在将它们发送到输出之前一次记录较小的块,这确实会带来更多的处理开销。使用更小的块有时也会在信号中引入更多的抖动,因为帧间延迟可能跟不上采样率。PortAudio 可能可以配置为具有更少的延迟,但您可能也会从操作系统和音频驱动程序中获得很多延迟。这是一个讨论如何优化操作系统和音频驱动程序以在 Raspberry Pi 上实现最小延迟的页面。PortAudio(大多数python音频库背后的驱动程序),也有讨论基于您的操作系统的音频驱动程序延迟。

查看 的文档sd.Stream看起来即使您指定更小的blocksize,由于实施,它可能会使延迟变得更糟。

但是,有一个选项可以指定确切的延迟(如果需要特定的延迟)或通过指定“尽可能快”实现最大努力,latency = "low"这会尝试考虑您正在使用的特定硬件,并尽可能快尽可能。

于 2020-11-22T20:27:07.990 回答