我在收到麦克风输入后立即播放音频。我正在使用 OSStatus 来录制和播放音频。由于录制和播放工作正常。
我必须根据用户选择激活左侧耳机,右侧耳机或中置。当我研究 AudioBuffer 时,我们必须为左,右和中耳机设置 mNumberChannels 。这是我播放音频的代码。
AudioBuffer buffer;
// // 1 - Left
// // 2 - Right
// // 3 - Center
//
buffer.mNumberChannels = 0;
buffer.mDataByteSize = inNumberFrames * 2;
buffer.mData = malloc( inNumberFrames * 2 );
// Put buffer in a AudioBufferList
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0] = buffer;
// Obtain recorded samples
OSStatus status;
status = AudioUnitRender([iosAudio audioUnit],
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
checkStatus(status);
// Now, we have the samples we just read sitting in buffers in bufferList
// Process the new data
[audioProcess processAudio:&bufferList];
free(bufferList.mBuffers[0].mData);
return noErr;
但如果我更改 mNumberChannels ,我无法启用左,右或中心。任何人都可以帮忙指出我的错误吗?
答案 0 :(得分:0)
可以从mChannelsPerFrame和interleaved标志派生AudioBuffer的正确值 mNumberChannels 。对于非交错格式,mNumberChannels始终为1.对于交错格式, mNumberChannels 等于mChannelsPerFrame。
所以 mNumberChannels 用于指定处理缓冲区中的通道数,不用于平移或将音频路由到“left” - “center” - “right”。因此将其设置为左= 1,右= 2,中心= 3是错误的。
录制到音频缓冲区后,要进行平移(通过左/中/右选择音频播放),您应将当前处理单元连接到多声道混音器单元(子类型 kAudioUnitSubType_MultiChannelMixer < / em>)它可以接收任意数量的单声道或立体声流,并将它们组合成一个立体声输出,并支持每个输入的立体声平移。
使用此调音台装置,您可以使用kMultiChannelMixerParam_Pan等属性来控制左/中/右。