CoreAudio, iOS:在RemoteIO中使用单声道输入和立体声输出失败



我试图将音频输入设置为单声道,并使用两个AudioStreamBasicDescription s为一个RemoteIO AudioUnit输出立体声,这是那里唯一的AudioUnit。

然后我为输入(kAudioOutputUnitProperty_SetInputCallback)和输出(kAudioUnitProperty_SetRenderCallback)注册了两个单独的回调,并期望在我的输出回调中,AudioBufferList *ioData, ioData->mNumberBuffers应该是2。

但是,令我惊讶的是,它仍然是1。

是RemoteIO不支持输入和输出有不同的通道号吗?

我似乎明白了:我用的是带符号整数样本格式,在这种格式下,RenderCallback的输入参数AudioBufferList *ioData只有一个AudioBuffer,其中包含交错的音频样本(两个输出通道缓冲区连接成一个),即AudioBufferList::mNumberBuffers是一个。它唯一的AudioBuffer成员有一个属性mNumberChannels,对应于真实的通道计数。在我的例子中,这个字段是2。

一个额外的发现来支持上述:有符号整数格式不能交错(在OSX Mountain Lion上使用Xcode4.6测试),即,当设置ASBD的格式标志时,kAudioFormatFlagIsNonInterleaved属性不能与kAudioFormatFlagIsSignedInteger组合。

如果使用float加非交错的样本格式,RenderCallback的AudioBufferList *ioData在缓冲区列表中有两个AudioBuffer,每个mNumberChannels字段作为一个。

最新更新