CoreAudio,iOS:无法使用RemoteIO的单声道输入和立体声输出

时间:2013-06-05 22:53:14

标签: ios core-audio remoteio

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

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

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

RemoteIO不支持为输入和输出设置不同的通道号吗?

1 个答案:

答案 0 :(得分:1)

我好像已经弄清楚了: 我使用的是带符号的整数样本格式,并使用该格式 RenderCallback的输入参数AudioBufferList *ioData中只有一个带有交错音频样本的AudioBuffer(两个输出通道缓冲连接成一个),即AudioBufferList::mNumberBuffers是一个。它唯一的AudioBuffer成员又有一个属性mNumberChannels,它对应于真正的通道数。就我而言,那个领域是两个。

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

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