虚拟麦克风使用的场景:
- Android 或 IOS 端录制音频数据, 发送给 Windows 服务端, Windows 服务端把数据传递给到 Winodws 驱动端
- 第三方的软件, 例如: 录音机, 聊天软件, 游戏等, 就可以收到声音
- 音频数据流动可以参考下图
虚拟麦克风相关的技术概念:
- 能否不开发 Winodws 驱动, 直接把Mic数据, 通过Winodws语音服务程序发送给通用的第三方软件 -- 不行
- Windows 程序能否通过 API 调用的方式, 把音频数据发送到虚拟Mic设备上 -- 不行, Windows 不允许往输出设备写入数据
- Windows 官方提供的 虚拟音频驱动 Sysvad 提供了很好的参考方案, 但是音频数据的流转通道没有实现, Speaker 设备支持写入到文件, Mic 设备模拟 Tone 音(当一直响)
- Github 也有一些开源方案参考: 开源 AudioMirror 方案, 方案主要有两个问题: 代码基于老的 Sysvad 方案开发, 音频数据无法直接发送给虚拟Mic, 需要发送给虚拟 Speaker 然后通过 虚拟Speaker 在驱动层 通过 RingBuffer 的形式把数据转给虚拟 Mic。 如果是商用方案, 显得数据流不够优雅。
- 市面上的闭源方案 MicStream , 如果仅演示使用, 这是个很好的实现方案, 如果需要进行一些定制, 例如数据通过 BT 发送, 音频的通道, 采样率, 深度进行一些定制, 这个是无法满足的。
虚拟麦克风实现方案:
- 基于 Windows 官方虚拟音频驱动, 已经实现好了虚拟Mic
- 基于此驱动, 再搭建一个应用层和驱动层的通讯通道就可以实现虚拟Mic功能
- 通道可以使用 DeviceIoControl 进行音频数据流转