如何为sounddevice录音选择正确设备?录音异常问题求助
解决sounddevice录制系统音频的问题
问题原因分析
- 选择输出设备(如ID4、8、15)报错:这类设备仅具备输出通道,没有音频捕获能力,
rec()函数需要指定输入设备,用输出设备作为输入源必然会提示“输入通道数不正确”。 - 用Stereo Mix(ID1、6、12)录制声音空洞:多由通道匹配错误、系统设备设置异常或音频格式不兼容导致。
解决方案
1. 正确选择输入设备
录制系统音频必须选择带“Stereo Mix”标识的输入设备(即ID1、6、12这类),这类设备是专门用于捕获系统输出音频的。default.device格式为[输入设备ID, 输出设备ID],录制时输出设备可设为常用播放设备,或直接忽略不影响录制。
2. 修复声音空洞问题
(1)检查系统设备设置
- 右键Windows音量图标 → 声音 → 录制选项卡
- 找到正在使用的Stereo Mix设备(比如对应ID12的“Stereo Mix (Conexant ISST Audio)”),右键选择属性
- 在级别选项卡,将音量拉至合适位置,避免过低
- 在增强选项卡,勾选“禁用所有声音效果”,点击确定
(2)调整代码参数匹配设备
修改代码,直接指定输入设备,确保通道数、采样率与设备兼容:
from sounddevice import rec, query_devices from soundfile import write # 指定输入设备为WASAPI的Stereo Mix(ID12,可根据你的设备列表调整) input_device_id = 12 # 打印设备信息,确认支持的通道数和采样率 print(query_devices(input_device_id)) fs = 48000 # 若设备不支持48000Hz,改为设备支持的采样率(比如44100) duration = 10 # 录制时指定设备,通道数建议用设备实际支持的(比如设备12支持4通道,可设为4或2) myrecording = rec(int(duration * fs), samplerate=fs, blocking=True, device=input_device_id, channels=2) # 优先保存为WAV格式,避免MP3格式的兼容性问题 write("output.wav", myrecording, fs)
(3)关于MP3格式的说明
soundfile.write()默认对MP3的支持需要额外依赖(libsndfile的MP3编码库),未安装时直接写MP3可能导致音频异常。建议先保存为WAV格式,再用ffmpeg等工具转换为MP3。
内容的提问来源于stack exchange,提问作者INGIE
相关产品推荐
相关产品推荐

