Стереофоническое воспроизведение преобразуется в моно (только на iPad) даже при использовании стереонаушников - PullRequest
1 голос
/ 12 августа 2011

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

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

Это прекрасно работает на 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 есть только один динамик, и поэтому он обычно микшируется в моно ... но почему это происходит, даже если подключены стереонаушники?

Любая помощь очень ценится!

1 Ответ

2 голосов
/ 13 августа 2011

Обнаружил виновника:

Я позвонил

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

...