2015-09-17 153 views
0

使用AudioQueue播放PCM数据时出现问题。使用iPhone扬声器时音量较低;我甚至将系统音量调到最大。但是,当我使用耳机时,音量很好。使用AudioQueue播放PCM音频流的音量很低

我插入的数据到队列是这样的:

memcpy(mBuffers[mIndex]->mAudioData, pcmData, mBufferByteSize); 
mBuffers[mIndex]->mAudioDataByteSize = mBufferByteSize; 
mBuffers[mIndex]->mPacketDescriptionCount = mBufferByteSize/2; 
OSStatus status = AudioQueueEnqueueBuffer(mQueue, mBuffers[mIndex], 0, NULL); 
NSLog(@"fill audio queue buffer[%d]",mIndex); 
if(mIndex == kNumberBuffers - 1) { 
    isStartPlay = YES; 
    mIndex = 0; 
    AudioQueueSetParameter(mQueue, kAudioQueueParam_Volume, 1.0); 
    status = AudioQueueStart(mQueue, NULL); 
}else { 
    mIndex++; 
} 

我已经这样设置音量:

AudioQueueSetParameter(mQueue, kAudioQueueParam_Volume, 1.0); 

回答

1

是否使用了AVAudioSessionCategoryPlayAndRecord音频会话类别?如果是这样,那么你可能通过接收器回放,这非常安静。

这种奇怪的默认行为让人回想起播放和记录类别主要用于VOIP应用程序的日子,更加奇怪的是,这些应用程序被禁止在AppStore中使用。

要通过正常的扬声器覆盖播放,尝试添加AVAudioSessionCategoryOptionDefaultToSpeaker到您的类别选项:

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];

+0

谢谢你的建议。但我没有使用任何音频会话类别,只是使用音频队列录制和播放PCM音频流。所以我很困惑,为什么当我使用扬声器播放时音量很低,在使用耳机时不会发生这种情况。您有什么想法吗? – jojoT

+0

也许你正在得到一个默认的记录/播放和记录类别?你可以尝试上面的代码或使用'AVAudioSessionCategoryPlayback'进行播放吗? –

+1

是的,我尝试'[会议setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker错误:无];'和它的工作。谢谢。 – jojoT