2011-08-12 83 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用于记录您的解决方案 –

相关问题