【问题标题】:CoreAudio, iOS: Failed to use mono Input and stereo output with RemoteIOCoreAudio,iOS:无法通过 RemoteIO 使用单声道输入和立体声输出
【发布时间】:2013-06-05 22:53:13
【问题描述】:
我试图将音频输入设置为单声道并使用两个AudioStreamBasicDescriptions 为一个 RemoteIO AudioUnit 输出立体声,这是那里唯一的 AudioUnit。
然后我为输入 (kAudioOutputUnitProperty_SetInputCallback) 和输出 (kAudioUnitProperty_SetRenderCallback) 注册了两个单独的回调,并期望在我的输出回调中,AudioBufferList *ioData,ioData->mNumberBuffers 应该是 2。
但是,令我惊讶的是,它仍然是 1。
是不是RemoteIO不支持输入输出不同的通道号?
【问题讨论】:
标签:
ios
core-audio
remoteio
【解决方案1】:
我似乎已经想通了:
我使用的是有符号整数示例格式,并且使用该格式,
RenderCallback 的输入参数AudioBufferList *ioData 中只有一个带有交错音频样本的AudioBuffer(两个输出通道缓冲区连接为一个),即AudioBufferList::mNumberBuffers 是一个。它唯一的AudioBuffer 成员又具有mNumberChannels 属性,该属性对应于真实的通道数。就我而言,该字段是两个。
另一个支持上述情况的发现:Signed-integer format cannot be interleaved (tested with Xcode4.6 on OSX Mountain Lion),即属性kAudioFormatFlagIsNonInterleaved在设置格式标志时不能与kAudioFormatFlagIsSignedInteger结合ASBD。
如果使用浮点加非交错采样格式,RenderCallback 的AudioBufferList *ioData 在缓冲区列表中有两个AudioBuffer,每个都有mNumberChannels 字段作为一个。