使用 Python 实时回放麦克风输入到 PC
Using Python to playback mic input to PC in real-time
我正在尝试使用 Python 到 'mic-monitor',即除了来自 PC 的任何其他输出信号之外,还通过耳机实时播放麦克风信号。
我可以通过修改我的 PC 的播放设置来完成此操作,但我想用 Python 来完成,这样我就可以编程一个 Raspberry Pi 来麦克风监控我的廉价耳机 PS4.
我可以几乎 使用 PyAudio 或 sounddevice 完成此操作,但有一个小但显着的延迟。所以:
- 有没有办法通过 Python 消除这种延迟,例如通过某种方式更直接地访问我的 PC 的输入?
- 不然为什么用Python不行呢?
- 我能否以某种方式将 Raspberry Pi 配置为麦克风监听器,就像我的 PC 一样?
声音设备代码如下,供参考:
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.Stream
的 documentation,看起来即使您指定更小的 blocksize
,由于实现的原因,它也可能使延迟更糟。
然而,有一个选项可以指定确切的延迟(如果需要特定的延迟)或通过指定 latency = "low"
来“尽快”实现最佳效果。这会尝试考虑特定的您正在使用的硬件,并尽快运行。
我正在尝试使用 Python 到 'mic-monitor',即除了来自 PC 的任何其他输出信号之外,还通过耳机实时播放麦克风信号。
我可以通过修改我的 PC 的播放设置来完成此操作,但我想用 Python 来完成,这样我就可以编程一个 Raspberry Pi 来麦克风监控我的廉价耳机 PS4.
我可以几乎 使用 PyAudio 或 sounddevice 完成此操作,但有一个小但显着的延迟。所以:
- 有没有办法通过 Python 消除这种延迟,例如通过某种方式更直接地访问我的 PC 的输入?
- 不然为什么用Python不行呢?
- 我能否以某种方式将 Raspberry Pi 配置为麦克风监听器,就像我的 PC 一样?
声音设备代码如下,供参考:
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.Stream
的 documentation,看起来即使您指定更小的 blocksize
,由于实现的原因,它也可能使延迟更糟。
然而,有一个选项可以指定确切的延迟(如果需要特定的延迟)或通过指定 latency = "low"
来“尽快”实现最佳效果。这会尝试考虑特定的您正在使用的硬件,并尽快运行。