使用 Python 实时回放麦克风输入到 PC

Using Python to playback mic input to PC in real-time

我正在尝试使用 Python 到 'mic-monitor',即除了来自 PC 的任何其他输出信号之外,还通过耳机实时播放麦克风信号。

我可以通过修改我的 PC 的播放设置来完成此操作,但我想用 Python 来完成,这样我就可以编程一个 Raspberry Pi 来麦克风监控我的廉价耳机 PS4.

我可以几乎 使用 PyAudio 或 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))

中间的计算机总是会有延迟。专业音频设备通常是为最小延迟定制的(或者只是模拟的)。为了减少延迟,您需要在将它们发送到输出之前一次记录较小的块,这确实会引入更多的处理开销。使用较小的块有时还会在信号中引入更多抖动,因为帧间延迟可能跟不上采样率。 PortAudio 可能可以配置为具有更少的延迟,但您可能也会从 OS 和音频驱动程序中获得很多延迟。 Here's a page discussing how you can optimize the OS and audio drivers for minimal latency on a Raspberry Pi. PortAudio (the driver behind most python audio libraries), also has a discussion 基于您的操作系统的音频驱动程序延迟。

查看 sd.Streamdocumentation,看起来即使您指定更小的 blocksize,由于实现的原因,它也可能使延迟更糟。

然而,有一个选项可以指定确切的延迟(如果需要特定的延迟)或通过指定 latency = "low" 来“尽快”实现最佳效果。这会尝试考虑特定的您正在使用的硬件,并尽快运行。