0

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

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

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

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

4

1 回答 1

1

我似乎已经弄清楚了:我使用的是有符号整数样本格式,并且使用这种格式,RenderCallback 的输入参数AudioBufferList *ioData中只有一个 AudioBuffer 和交错的音频样本(两个输出通道缓冲区连接成一个),即这AudioBufferList::mNumberBuffers是一个。它的唯一AudioBuffer成员又具有mNumberChannels对应于真实通道数的属性。就我而言,该字段是两个。

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

如果使用浮点加非交错采样格式,AudioBufferList *ioDataRenderCallbackAudioBuffer的缓冲区列表中有两个,每个mNumberChannels字段为一个。

于 2013-06-06T15:54:05.227 回答