0

我已经指定并实例化了两个音频单元:一个多声道混音器单元和一个 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 将是正确且必需的事情。

4

2 回答 2

0

你是如何配置 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));

希望这会有所帮助。

于 2012-12-27T23:22:13.183 回答
0

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

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

于 2013-05-22T14:16:12.577 回答