我正在開發一款音頻處理應用程序,使用可通過耳機麥克風錄製聲音並通過耳機播放的核心音頻。即使使用立體聲耳機,立體聲播放也會轉換爲單聲道(僅限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只有一個揚聲器並因此通常會混合成單聲道這一事實有關......但即使在連接立體聲耳機時,爲什麼會這樣呢?
任何幫助,非常感謝!
FYI不同的事情:這是AudioStreamBasicDescription:2 ch,22050 Hz,'lpcm'(0x0000000C)16位小尾數有符號整數 –