2011-08-12 119 views
1

我正在開發一款音頻處理應用程序,使用可通過耳機麥克風錄製聲音並通過耳機播放的核心音頻。即使使用立體聲耳機,立體聲播放也會轉換爲單聲道(僅限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將audiosignal混合到單聲道,然後在兩個耳機上播放。我認爲這可能與iPad只有一個揚聲器並因此通常會混合成單聲道這一事實有關......但即使在連接立體聲耳機時,爲什麼會這樣呢?

任何幫助,非常感謝!

+0

FYI不同的事情:這是AudioStreamBasicDescription:2 ch,22050 Hz,'lpcm'(0x0000000C)16位小尾數有符號整數 –

回答

2

找到罪魁禍首:

我在混頻器輸出的StreamFormat描述符稱爲

desc.SetAUCanonical(1, true); 

。現在,我只是設置值,每個屬性,它工作在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

+0

+1用於記錄您的解決方案 –

相關問題