2015-02-18 1 views
2

Я использую воспроизведение звука, как только мы получили вход от микрофона. Я использую OSStatus для записи и воспроизведения звука. Поскольку запись и воспроизведение работают нормально.Как установить AudioChannel как левый наушник и правый наушник?

У меня есть активные левые боковые наушники, правые боковые наушники или центр в соответствии с выбором пользователя. Когда я исследую 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

Правильное значение mNumberChannels для AudioBuffer можно получить из mChannelsPerFrame и чередующегося флага. Для неперемещенных форматов mNumberChannels всегда 1. Для чередующихся форматов mNumberChannels равен mChannelsPerFrame.

Так mNumberChannels является для указания количества каналов в буфере обработки, а не для панорамирование или маршрутизации аудио «влево» - «центр» - «вправо». Таким образом, установка left = 1, right = 2, center = 3 - неверно.

После записи в AudioBuffer, чтобы сделать панорамирование (выбор воспроизведения звука через левый центральный/правый /), вы должны подключить текущего блока обработки к блоку Многоканальный Mixer (подтипа kAudioUnitSubType_MultiChannelMixer), который принимает любое количество моно или стерео потоков и объединяет их в один стерео выход и поддерживает стерео панорамирование для каждого входа.

С помощью этого миксера вы можете использовать свойство, как kMultiChannelMixerParam_Pan, для управления влево/вправо/вправо.