使用 AudioQueue 播放 PCM 音频流音量小

Using AudioQueue to play PCM audio stream have low volume

我在使用 AudioQueue 播放 PCM 数据时遇到问题。使用iPhone的喇叭时音量偏低;我什至将系统音量调到最大。不过我用耳机的时候音量还可以。

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

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);

您使用的是 AVAudioSessionCategoryPlayAndRecord 音频会话类别吗?如果是这样,那么您可能正在通过非常安静的接收器播放。

这种奇怪的默认行为可以追溯到人们认为播放和录音类别主要对 VOIP 应用程序有用的日子,更奇怪的是,这些应用程序被 AppStore 禁止。

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

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