我试图将音频输入设置为单声道并使用两个AudioStreamBasicDescription
输出到立体声,用于一个RemoteIO AudioUnit,这是唯一的AudioUnit。
然后我为输入(kAudioOutputUnitProperty_SetInputCallback
)和输出(kAudioUnitProperty_SetRenderCallback
)注册了两个单独的回调,并期望在我的输出回调中,AudioBufferList *ioData
,ioData->mNumberBuffers
应该是2。
但令我惊讶的是,它仍然是1。
RemoteIO不支持为输入和输出设置不同的通道号吗?
答案 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。