You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对计算机播放的音频进行实时处理?

系统音频实时处理实现方案

一、核心问题:捕获系统播放的音频

PyAudio默认只能读取麦克风输入,要处理Spotify、YouTube这类系统播放的音频,首先得把系统输出的音频路由到一个虚拟输入设备,让音频库能捕获到它。

各平台设置方法

  • Windows:启用系统自带的「立体声混音(Stereo Mix)」设备。打开「声音设置」→「更多声音设置」→「录制」标签,右键启用它(找不到的话更新声卡驱动试试)。之后PyAudio就能选这个设备作为输入源。
  • macOS:用「音频MIDI设置」创建虚拟输入设备:添加多输出设备,把系统输出和虚拟输入绑定;或者用Soundflower这类工具直接创建虚拟音频回路。
  • Linux:用PulseAudio命令创建虚拟回路:
    pactl load-module module-null-sink sink_name=VirtualSink
    pactl load-module module-loopback source=VirtualSink.monitor
    
    之后在音频设置里把系统输出切换到VirtualSink,就能从VirtualSink.monitor捕获音频。

二、用PyAudio实现实时处理

搞定设备后,用PyAudio的回调模式就能实现低延迟实时处理,示例代码如下:

import pyaudio
import numpy as np

# 音频参数
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100

def process_audio(in_data, frame_count, time_info, status):
    # 把字节数据转成可处理的numpy数组
    audio_array = np.frombuffer(in_data, dtype=np.int16)
    # 这里写你的实时处理逻辑,比如降噪、EQ、特效等
    processed = audio_array * 0.6  # 示例:降低音量
    # 转回字节返回给系统播放
    return (processed.tobytes(), pyaudio.paContinue)

p = pyaudio.PyAudio()

# 遍历设备找到虚拟输入设备(以Windows的Stereo Mix为例)
input_dev_idx = None
for i in range(p.get_device_count()):
    dev = p.get_device_info_by_index(i)
    if "Stereo Mix" in dev["name"]:
        input_dev_idx = i
        break

# 打开音频流
stream = p.open(
    format=FORMAT,
    channels=CHANNELS,
    rate=RATE,
    input=True,
    input_device_index=input_dev_idx,
    frames_per_buffer=CHUNK,
    stream_callback=process_audio
)

stream.start_stream()
print("处理中,按回车停止...")
input()

stream.stop_stream()
stream.close()
p.terminate()

三、更简便的替代库

如果觉得PyAudio的设备配置麻烦,试试这些库:

  • sounddevice:跨平台,支持直接枚举系统音频设备,API更简洁,同样支持回调式实时处理。
  • pyffmpeg:可以通过FFmpeg命令捕获系统音频,再将输出管道到Python处理,适合复杂音频路由场景。

关键注意点

  • 实时处理必须控制延迟:每个chunk的处理时间要小于该chunk的播放时长(比如1024帧/44100采样率≈23ms,处理耗时不能超过这个值),否则会出现卡顿。
  • 不同平台的虚拟设备名称不一样,代码里的设备匹配逻辑要根据实际情况调整。

内容的提问来源于stack exchange,提问作者foshes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:25:21