Воспроизведение стерео преобразуется в моно (только на iPad) даже при использовании стереонаушников

Я разрабатываю приложение для обработки звука с использованием основного звука, которое записывает звуки через микрофон гарнитуры и воспроизводит их через наушники.

Я добавил функцию баланса, то есть перенести воспроизведение только на одно ухо.

Это отлично работает на iPod и iPhone, на которых я его тестировал. Но не на iPad. На iPad расположение звука вообще не меняется.

Это код, используемый для рендеринга аудиовыхода:

static OSStatus renderInput(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData)
{
    // Get a pointer to the dataBuffer of the AudioBufferList
    AudioBuffer firstBuffer = ioData->mBuffers[0];
    AudioSampleType *outA = (AudioSampleType *)firstBuffer.mData;
    int numChannels = firstBuffer.mNumberChannels;
    NSLog(@"numChannels = %d, left = %d, right = %d", numChannels, leftBalVolume, rightBalVolume);
    // Loop through the callback buffer, generating samples
    for (UInt32 i = 0; i < inNumberFrames * numChannels; i += numChannels) {        
        int outSignal = getFilteredSampleData(sampleDataTail);
        outA[i] = (outSignal * leftBalVolume) / 32768;
        if (numChannels > 1) {
            outA[i + 1] = (outSignal * rightBalVolume) / 32768;    
        }
        sampleDataTail = (sampleDataTail + 1) % sampleDataLen;
    }
    return noErr;
}

Вывод NSLog выглядит следующим образом:

numChannels = 2, left = 16557, right = 32767

... говоря мне, что он в основном работает в стереорежиме, я должен слышать звук чуть правее. Но даже если я поставлю его на 100% вправо, я все равно слышу звук посередине, одинаковая громкость в обоих наушниках.

Очевидно, iPad 2 преобразует аудиосигнал в моно, а затем воспроизводит его на обоих наушниках. Я подумал, что это может быть связано с тем фактом, что у iPad только один динамик, и поэтому он обычно микшируется в моно ... но почему он это делает, даже когда подключены стереонаушники?

Любая помощь приветствуется!


person flo von der uni    schedule 12.08.2011    source источник
comment
К вашему сведению: это AudioStreamBasicDescription: 2 канала, 22050 Гц, 'lpcm' (0x0000000C) 16-битное целое число со знаком прямого порядка байтов.   -  person flo von der uni    schedule 13.08.2011


Ответы (1)


Нашли виновника:

Я звонил

desc.SetAUCanonical(1, true);

в дескрипторе StreamFormat вывода микшера. Теперь я просто устанавливаю значения для каждого свойства, и это работает и на iPad ...

desc.mSampleRate         = kGraphSampleRate;
desc.mFormatID           = kAudioFormatLinearPCM;
desc.mFormatFlags        = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
desc.mFramesPerPacket    = 1;
desc.mChannelsPerFrame   = 2;
desc.mBitsPerChannel     = 16;
desc.mBytesPerPacket     = 4;
desc.mBytesPerFrame      = 4;

Похоже, что SetAUCanonical делает разные вещи на iPad по сравнению с iPod Touch и iPhone.

person flo von der uni    schedule 13.08.2011