1

我正在尝试连接我的混音器 -> remoteio -> 动态处理器

这是我的 AudioFormat // 描述格式

memset( &audioFormat, 0, sizeof(AudioStreamBasicDescription) );
audioFormat.mSampleRate         = 44100.00;
audioFormat.mFormatID           = kAudioFormatLinearPCM;
audioFormat.mFormatFlags        = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket    = 1;
audioFormat.mChannelsPerFrame   = 1;
audioFormat.mBitsPerChannel     = 16;
audioFormat.mBytesPerPacket     = 2;
audioFormat.mBytesPerFrame      = 2;

当我使用 CAShow 时,它给了我以下信息。

AudioUnitGraph 0x4725000:
  Member Nodes:
node 1: 'auou' 'rioc' 'appl', instance 0x1c5ab3a0 O I
node 2: 'aumx' 'mcmx' 'appl', instance 0x1d07a6d0 O I
node 3: 'aufx' 'dcmp' 'appl', instance 0x1d085330 O I
 Connections:
    node   2 bus   0 => node   1 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
node   1 bus   0 => node   3 bus   0  [ 2 ch,      0 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]

尝试结果 = AudioUnitSetProperty ( _dynamicsUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &audioFormat, sizeof (audioFormat) );

将audioFormat设置为所需的格式会给我一个错误代码-10868。

我还意识到从 audynamicsprocessor 获取 ASBD 会产生这种情况。

effectASBD  AudioStreamBasicDescription 
mSampleRate Float64 44100
mFormatID   UInt32  1819304813
mFormatFlags    UInt32  41
mBytesPerPacket UInt32  4
mFramesPerPacket    UInt32  1
mBytesPerFrame  UInt32  4
mChannelsPerFrame   UInt32  2
mBitsPerChannel UInt32  32
mReserved           UInt32  0

我尝试了各种方法,比如让音频格式 ABSD 符合 AUdynamicsprocessor,但我得到了同样的错误。

出于延迟考虑,我想尽可能使用我原来的音频格式 ASBD。此外,我的回调算法已经为该音频格式编写。这可能吗?

提前致谢。

码头。

4

1 回答 1

1

因为没有答案,为了完整起见,我会自己回答这个问题。最终,在来自 Core Audio 邮件列表的 Chris Adamson 的一些建议之后,我做到了。

我发现 dynamicsProcessor 需要 8.24 格式。所以我在 dynamicsProcessor 之前和之后放置了一个转换器,将我想要的格式转换为 8.24(dynamicsProcessor 想要的),反之亦然。

混合器->转换器->动态处理器->转换器->远程IO

于 2012-12-05T07:23:15.783 回答