如何将AudioChannel设置为左耳机和右耳机?

时间:2015-02-18 05:04:37

标签: ios core-audio audio-recording audiobuffer

我在收到麦克风输入后立即播放音频。我正在使用 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 ,我无法启用左,右或中心。任何人都可以帮忙指出我的错误吗?

1 个答案:

答案 0 :(得分:0)

可以从mChannelsPerFrame和interleaved标志派生AudioBuffer的正确值 mNumberChannels 。对于非交错格式,mNumberChannels始终为1.对于交错格式, mNumberChannels 等于mChannelsPerFrame。

所以 mNumberChannels 用于指定处理缓冲区中的通道数,不用于平移或将音频路由到“left” - “center” - “right”。因此将其设置为左= 1,右= 2,中心= 3是错误的。

录制到音频缓冲区后,要进行平移(通过左/中/右选择音频播放),您应将当前处理单元连接到多声道混音器单元(子类型 kAudioUnitSubType_MultiChannelMixer < / em>)它可以接收任意数量的单声道或立体声流,并将它们组合成一个立体声输出,并支持每个输入的立体声平移

使用此调音台装置,您可以使用kMultiChannelMixerParam_Pan等属性来控制左/中/右。