【问题标题】:macOS: paring down NullAudio example to not have outputmacOS:将 NullAudio 示例缩减为没有输出
【发布时间】:2020-11-21 13:27:32
【问题描述】:
【问题讨论】:
标签:
macos
audio
core-audio
hal
【解决方案1】:
前段时间我还想禁用 NullAudio 设备的输出,我设法做到这一点的唯一方法是在 NullAudio.c 中进行以下更改:
-
在NullAudio_HasDeviceProperty() 函数中禁用首选通道布局情况下的输出范围,如下所示:
case kAudioDevicePropertyPreferredChannelLayout:
theAnswer = inAddress->mScope == kAudioObjectPropertyScopeInput;
-
在NullAudio_GetDevicePropertyDataSize() 函数中,对于流属性情况,全局范围返回 1 个对象大小,对于输出范围返回零大小,并保持输入范围情况不变:
case kAudioDevicePropertyStreams:
switch(inAddress->mScope)
{
case kAudioObjectPropertyScopeGlobal:
*outDataSize = 1 * sizeof(AudioObjectID);
break;
case kAudioObjectPropertyScopeOutput:
*outDataSize = 0 * sizeof(AudioObjectID);
break;
};
break;
不过,我还没有完全测试过。我认为它有效,因为我可以看到 NullAudio 设备在音频 MIDI 设置应用程序中的格式为 2ins/0outs。也许只需要其中一项更改。也许需要更多的改变。
您可能应该将它作为一个起点而不是一个解决方案,因为我认为为了使其完全正确地发挥作用,您需要在整个代码中进行更多这样的更改。查找引用输出范围/流的位置(如果它处于活动状态,设备拥有多少个拥有的对象等)并尝试进行逻辑更改以禁用输出流。至少这就是我试图通过这个代码库找到方法的方式。
祝你好运,让我知道它是否有效,或者你是否找到了另一种/更好(或正确)的方法!