HAL 虚拟设备:如何“代理”麦克风

IPv*_*Pv6 7 macos hal driver core-audio

我正在尝试创建“虚拟麦克风”,它应该在默认输入设备/麦克风的“前面”工作。因此,当用户选择“虚拟麦克风”作为输入(例如在 Audacity 中)并开始录制声音时 - Audacity 将从虚拟设备驱动程序接收样本,这些样本是由驱动程序从真实/默认麦克风中获取的。所以“虚拟麦克风”是一种真实(默认/内置/等)的代理设备。这是稍后即时处理麦克风输入所必需的。

到目前为止,我创建了虚拟 HAL 设备(基于 Apple 的 NullAudio.c 驱动程序示例),我可以为 Audacity 生成程序声音,但我仍然无法弄清楚从内部驱动程序读取真实麦克风数据的方法(使用其 deviceID) .

是否可以像通常的应用程序一样使用普通录音(通过 AudioUnits/AURemoteIO/AUHAL)等?或者应该使用 IOServices 之类的东西?

文件指出

AudioServerPlugIn 在有限的环境中运行。首先,AudioServerPlugIn 可能不会对 CoreAudio.framework 中的客户端 HAL API 进行任何调用。这将导致未定义(但通常是不好的)行为。

但在读取麦克风数据方面,尚不清楚哪些 API 是“客户端”API,哪些不是。

虚拟设备驱动程序可以/应该使用什么样的 API 来实时访问真实的麦克风数据?