如何使用Python实现macOS系统扬声器内部输出音频的采集
macOS录制系统内部音频解决方案
macOS的Core Audio默认不开放系统扬声器输出的内部采集接口,你原有Windows脚本依赖的声卡环路回录能力在macOS上没有原生支持,必须先配置虚拟音频设备才能实现对应功能,以下是完整实现方案:
前置配置:安装虚拟音频设备
- 安装开源虚拟音频工具BlackHole,可直接在App Store搜索下载,选择2通道版本即可满足普通录制需求
- 打开「音频MIDI设置」,点击左下角+号创建「多输出设备」,同时勾选你的物理扬声器和BlackHole两个设备
- 将系统默认输出设备设置为刚创建的多输出设备,此时系统播放的音频会同时流向扬声器和BlackHole,后续只要采集BlackHole的输入流即可得到系统内部音频
适配后的SoundDevice运行脚本
原有逻辑基本可以复用,只需要修改采集设备为BlackHole即可:
import sounddevice as REC import scipy.io.wavfile # 录音参数配置 SAMPLE_RATE = 48000 SECONDS = 10 MONO = 1 STEREO = 2 # 打印所有音频设备,查询BlackHole对应的名称或ID print(REC.query_devices()) # 终端也可直接执行命令查询:python3 -m sounddevice # 填写你查询到的BlackHole设备名称或数字ID REC.default.device = "BlackHole 2ch" print(f'开始录制,时长{SECONDS}秒') recording = REC.rec(int(SECONDS * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=STEREO) REC.wait() print("录制完成") scipy.io.wavfile.write("test.wav", SAMPLE_RATE, recording)
依赖安装说明:
- 先执行
brew install portaudio安装PortAudio依赖 - 再执行
pip install sounddevice scipy安装Python库
其他适配macOS的可选库
- PyAudio:逻辑和SoundDevice完全一致,同样依赖前置的BlackHole配置,适合已经习惯PyAudio接口的开发场景
- ffmpeg-python:封装FFmpeg的采集能力,无需手动处理音频流逻辑,适合简单录制场景,也可以直接用subprocess调用FFmpeg命令完成录制
- pycoreaudio:原生对接Core Audio接口的Python库,无需依赖PortAudio,延迟更低,但开发复杂度更高,适合需要自定义音频处理的专业场景
注意事项
- 多输出设备模式下不要直接调节系统主音量,需要分别调整物理扬声器和BlackHole的增益,避免录制的音频音量异常
- 如果不需要录制时同步听到声音,可以直接将系统默认输出设置为BlackHole,无需创建多输出设备,录音稳定性更高
- 目前没有可以绕开虚拟音频设备配置的纯代码方案,所有macOS系统内部音频采集方案都依赖虚拟音频设备的支持
内容的提问来源于stack exchange,提问作者JohannesKrabbe
相关产品推荐
相关产品推荐

