如何使用Python实现音频文件通过虚拟麦克风播放
虚拟麦克风播放音频实现方案
Sounddevice并不只支持普通输出设备,只要正确配置虚拟麦克风设备参数,即可实现将本地音频注入到虚拟麦克风的效果,完整实现步骤如下:
前置准备
- 安装对应系统的虚拟麦克风驱动:
- Windows:安装VB-Cable
- macOS:安装BlackHole
- Linux:加载PulseAudio虚拟音频设备模块
- 安装依赖库:
pip install sounddevice soundfile numpy
实现步骤
- 首先查询系统音频设备ID,确认虚拟麦克风的编号
import sounddevice as sd # 输出所有音频设备信息,找到虚拟麦克风对应的id print(sd.query_devices())
- 运行上述代码后,记录虚拟麦克风对应的设备ID,将对应参数填入如下代码即可实现音频注入
import sounddevice as sd import soundfile as sf import numpy as np # 替换为查询到的虚拟麦克风设备ID VIRTUAL_MIC_ID = 36 # 替换为你的本地音频文件路径 AUDIO_PATH = "test.wav" # 读取音频文件 data, sample_rate = sf.read(AUDIO_PATH, dtype="float32") # 可选:多声道音频转单声道,提升兼容性 if len(data.shape) > 1: data = np.mean(data, axis=1) # 将音频写入虚拟麦克风 sd.play(data, sample_rate, device=VIRTUAL_MIC_ID) sd.wait()
常见问题排查
- 无输出效果时,先确认目标应用已选择对应虚拟麦克风作为输入源
- 出现设备不支持报错时,可通过
sd.query_devices(VIRTUAL_MIC_ID)查看设备支持的采样率、声道数,调整音频参数适配即可 - 如需循环播放音频,可在外层加循环逻辑,每次播放结束后重新写入音频流即可
替代方案
如果Sounddevice方案适配有问题,可以选择PyAudio实现:
- 安装依赖:
pip install pyaudio soundfile - 示例代码如下:
import pyaudio import soundfile as sf CHUNK = 1024 VIRTUAL_MIC_ID = 36 AUDIO_PATH = "test.wav" data, sample_rate = sf.read(AUDIO_PATH, dtype="int16") p = pyaudio.PyAudio() stream = p.open( format=p.get_format_from_width(2), channels=1 if len(data.shape)==1 else data.shape[1], rate=sample_rate, output=True, output_device_index=VIRTUAL_MIC_ID ) for i in range(0, len(data), CHUNK): stream.write(data[i:i+CHUNK].tobytes()) stream.stop_stream() stream.close() p.terminate()
内容的提问来源于stack exchange,提问作者user16838936
相关产品推荐
相关产品推荐

