【问题标题】:Do I Need to Set the ASBD of a Core Audio File Player Audio Unit?我需要设置 Core Audio File Player Audio Unit 的 ASBD 吗?
【发布时间】:2012-12-24 20:50:35
【问题描述】:

我已经指定并实例化了两个音频单元:一个多声道混音器单元和一个 AudioFilePlayer 子类型的生成器。

我原以为我需要设置 filePlayer 输出的 ASBD 以匹配我为混音器输入设置的 ASBD。但是,当我尝试设置 filePlayer 的输出时,出现 kAudioUnitErr_FormatNotSupported (-10868) 错误。

这是我在混音器输入上设置的流格式(成功),我也在尝试在 filePlayer 上设置(它是从 Apple 的混音器主机示例项目复制的单流格式):

Sample Rate:              44100
Format ID:                 lpcm
Format Flags:                 C
Bytes per Packet:             2
Frames per Packet:            1
Bytes per Frame:              2
Channels per Frame:           1
Bits per Channel:            16

在解决此问题的过程中,我查询了 filePlayer AU 的“本机”设置格式。这是返回的内容:

Sample Rate:              44100
Format ID:                 lpcm
Format Flags:                29
Bytes per Packet:             4
Frames per Packet:            1
Bytes per Frame:              4
Channels per Frame:           2
Bits per Channel:            32

我找到的所有示例代码都将 filePlayer 单元的输出发送到效果单元,并设置 filePlayer 的输出以匹配为效果单元设置的 ASBD。鉴于我没有效果单元,似乎将 filePlayer 的输出设置为混音器输入的 ASBD 是正确且必需的。

【问题讨论】:

    标签: ios core-audio


    【解决方案1】:

    您是如何配置 AUGraph 的?我可能需要查看一些代码来帮助您。

    只设置一次 AUMultiChannelMixer ASBD 的输出范围(如在 MixerHost 中)有效。但是,如果您有任何类型的效果,您将需要考虑它们的 ASBD 是在哪里定义的以及如何安排您的代码,这样 CoreAudio 就不会跳入并弄乱您的效果 AudioUnits ASBD。搞乱我的意思是将您的 ASBD 覆盖为默认的 kAudioFormatFlagIsFloat、kAudioFormatFlagIsPacked、2 个通道、非交错。起初这对我来说是一个很大的痛苦。

    我会将效果 AudioUnits 设置为它们的默认 ASBD。假设您已经连接了 AUFilePlayer 节点,那么您可以稍后在程序中像这样将其拉出

    result =  AUGraphNodeInfo (processingGraph,
                               filePlayerNode,
                               NULL,
                               &filePlayerUnit);
    

    然后进行设置

    AudioUnitSetProperty(filePlayerUnit, 
                         kAudioUnitProperty_StreamFormat, 
                         kAudioUnitScope_Output,
                         0,    
                         &monoStreamFormat, 
                         sizeof(monoStreamFormat));
    

    希望这会有所帮助。

    【讨论】:

    • 我一直想回答这个问题,因为我在 SO 之外获得了帮助。基本上我没有费心设置filePlayer ASBD,而是检索了它设置的“本机”ASBD,只更新了采样率和通道数。同样,我没有在混音器上设置输入并让混音器确定它的格式。
    【解决方案2】:

    基本上,我没有费心设置 filePlayer ASBD,而是检索了它设置为的“本机”ASBD,并仅更新了采样率和通道数。

    同样,我没有在混音器上设置输入并让混音器确定它的格式。

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2016-08-15
      • 2012-02-14
      • 1970-01-01
      • 2011-11-10
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多