+
71
-

Pyaudio如何录制windows扬声器输出的声音?

Pyaudio如何录制windows扬声器输出的声音?


网友回复

+
16
-

录制系统内部音频(扬声器输出)是 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%

我知道答案,我要回答