【问题标题】:macOS: paring down NullAudio example to not have outputmacOS:将 NullAudio 示例缩减为没有输出
【发布时间】:2020-11-21 13:27:32
【问题描述】:

我正在开发基于 Apple 的 NullAudio 示例 (https://developer.apple.com/library/archive/samplecode/AudioDriverExamples/Introduction/Intro.html) 的 CoreAudio 插件。

我目前需要禁用音频输出功能。我需要的最低限度是使插件不显示为可用的音频输出设备。从代码中如何做到这一点对我来说并不明显。其他人有什么建议吗?

【问题讨论】:

  • 你能解决这个问题吗?

标签: 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。也许只需要其中一项更改。也许需要更多的改变。

您可能应该将它作为一个起点而不是一个解决方案,因为我认为为了使其完全正确地发挥作用,您需要在整个代码中进行更多这样的更改。查找引用输出范围/流的位置(如果它处于活动状态,设备拥有多少个拥有的对象等)并尝试进行逻辑更改以禁用输出流。至少这就是我试图通过这个代码库找到方法的方式。

祝你好运,让我知道它是否有效,或者你是否找到了另一种/更好(或正确)的方法!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2020-10-13
    • 2022-09-30
    相关资源
    最近更新 更多