You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现音频文件模拟麦克风输入?音效板开发技术咨询

实现音频文件模拟麦克风输入的音效板方案

核心思路是通过虚拟音频设备将音频文件的输出伪装成麦克风输入,同时可保留真实麦克风的正常使用。以下分平台给出具体实现方案:

Windows 平台

快速工具方案

  1. 安装 VB-Cable:生成一对虚拟输入输出设备
    • 将音频播放器的输出设置为「CABLE Output」
    • 在语音通话软件中,把麦克风输入选择为「CABLE Input」
  2. 若需同时保留真实麦克风输入,使用 Voicemeeter:
    • 配置真实麦克风和VB-Cable作为输入源
    • 将混合后的音频输出到虚拟设备,供通话软件识别为麦克风输入

开发实现(C# + NAudio)

using NAudio.Wave;

// 读取音频文件
var audioReader = new AudioFileReader("target-sound.mp3");
// 初始化输出设备
var waveOut = new WaveOutEvent();
waveOut.Init(audioReader);

// 设置输出设备为VB-Cable(需替换为实际设备ID,可通过WaveOut.DeviceCount遍历获取)
waveOut.DeviceNumber = 1;
waveOut.Play();

// 播放完成后释放资源
audioReader.Dispose();
waveOut.Dispose();

macOS 平台

快速工具方案

  1. 安装 BlackHole(替代老旧的Soundflower):
    • 打开「音频MIDI设置」,创建「多输出设备」,添加内置扬声器/耳机和「BlackHole 2ch」
    • 将音频播放器的输出设为这个多输出设备,通话软件选择「BlackHole 2ch」作为麦克风输入
  2. 需混合真实麦克风时,使用付费工具 Loopback:
    • 拖拽真实麦克风和BlackHole到输入源,合并后输出给通话软件

开发实现(Python + PyAudio)

import pyaudio
import wave

# 加载音频文件
wf = wave.open("target-sound.wav", 'rb')
p = pyaudio.PyAudio()

# 查找BlackHole设备ID
virtual_device_id = None
for idx in range(p.get_device_count()):
    dev_info = p.get_device_info_by_index(idx)
    if "BlackHole" in dev_info["name"] and dev_info["maxInputChannels"] > 0:
        virtual_device_id = idx
        break

# 打开输出流到虚拟设备
stream = p.open(
    format=p.get_format_from_width(wf.getsampwidth()),
    channels=wf.getnchannels(),
    rate=wf.getframerate(),
    output=True,
    output_device_index=virtual_device_id
)

# 播放音频
data = wf.readframes(1024)
while data != b'':
    stream.write(data)
    data = wf.readframes(1024)

# 清理资源
stream.stop_stream()
stream.close()
p.terminate()
wf.close()

Linux 平台

快速工具方案

通过PulseAudio创建虚拟设备:

  1. 加载虚拟声卡模块:
pactl load-module module-null-sink sink_name=VirtualMic sink_properties=device.description=Virtual_Microphone
pactl load-module module-remap-source master=VirtualMic.monitor source_name=VirtualMicSource source_properties=device.description=Virtual_Microphone_Source
  1. 将音频播放器的输出设置为「VirtualMic」,通话软件选择「VirtualMicSource」作为麦克风输入
  2. 混合真实麦克风输入:
# 替换下方真实麦克风设备名(通过pactl list sources查看)
pactl load-module module-combine-sink sink_name=CombinedSink slaves=VirtualMic,alsa_input.usb-Realtek_USB_Audio-00.analog-stereo

开发实现(FFmpeg 命令行)

直接将音频文件推送到虚拟设备:

ffmpeg -i target-sound.mp3 -f pulse -ac 2 -ar 44100 VirtualMic

注意事项

  • 确保通话软件已授予虚拟麦克风的访问权限(如macOS隐私设置、Windows麦克风权限)
  • 虚拟设备需正确识别,若出现无声音情况,检查音频设备的默认输入输出配置

内容的提问来源于stack exchange,提问作者Blaze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:16:02