Pyaudio如何录制windows扬声器输出的声音?
网友回复
录制系统内部音频(扬声器输出)是 Windows 音频编程中的常见需求,但 PyAudio 本身主要面向麦克风输入设计。以下是几种经过验证的实现方案,从简到繁依次介绍。
方案一:启用"立体声混音"设备(最简便)
Windows 系统内置了一个名为 "立体声混音"(Stereo Mix) 的录制设备,它能捕获扬声器播放的所有声音 (citation:7)。
1. 启用立体声混音设备
默认情况下该设备是禁用的,需手动开启 (citation:7):
右键点击任务栏音量图标 → 打开 声音设置
选择右侧的 "声音控制面板"
切换到 "录制" 选项卡
在列表空白处 右键 → 勾选 "显示禁用的设备"
找到 "立体声混音",右键 → 启用
可选:右键 → "设置为默认设备"
注意:部分声卡驱动(尤其是笔记本电脑)可能不提供此选项 (citation:7)。
2. PyAudio 代码实现
import pyaudio
import wave
def record_system_audio(filename, duration=10, sample_rate=48000, channels=2, chunk=1024):
"""录制系统输出音频(通过立体声混音设备)"""
p = pyaudio.PyAudio()
# 查找立体声混音设备
device_index = None
for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
print(f" 设备 {i}: {dev['name']} (输入通道: {dev['maxInputChannels']})")
if "立体声混音" in dev["name"] or "Stereo Mix" in dev["name"]:
device_index = dev["index"]
print(f" --> 找到目标设备: {dev['name']}")
break
if device_index is None:
raise Exception(
"未找到立体声混音设备。请在 Windows 声音设置中启用该设备:\n"
"声音控制面板 → 录制选项卡 → 右键显示禁用设备 → 启用立体声混音"
)
stream = p.open(
format=pyaudio.paInt16,
channels=channels,
rate=sample_rate,
input=True,
input_device_index=device_index, # 关键:指定立体声混音设备
frames_per_buffer=chunk
)
print("● 开始录制系统音频...")
frames = []
for _ in range(0, int(sample_rate / chunk * duration)):
frames.append(stream.read(chunk))
print("■ 录制完成")
stream.stop_stream()
stream.close()
p.terminate()
# 保存为 WAV 文件
with wave.open(filename, 'wb') as wf:
wf.setnchannels(channels)
wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))
wf.setframerate(sample_rate)
wf.writeframes(b''.join(frames))
print(f"✓ 文件已保存: {filename}")
record_system_audio("system_audio.wav", du...点击查看剩余70%


