AudioQueue音量太低

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

对于那些仍然有这个问题,甚至SpeakHere示例代码。 这个解决scheme对我来说是非常有效的:

//ViewController.m

 #import "ViewController.h" @interface ViewController () { AVAudioSession *session; } - (void)viewDidLoad { [super viewDidLoad]; //This ensures it plays properly on speaker output [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]; } 

如果您已经看到关于kAudioQueueParam_Volume的文档,您会注意到它控制了播放增益,并且不会更改系统audio音量。 它的默认值是1.0,所以你不需要设置它。

kAudioQueueParam_Volumeaudio队列的播放音量,范围从0.0到1.0,以线性比例表示。 值为0.0表示无声; 值为1.0(默认值)表示audio队列实例的完整音量。

使用此属性可以控制相对于其他audio输出的audio队列的音量。

要在iOS中提供用于调整系统audio播放音量的UI,请使用MPVolumeView类,该类提供iOS用户期望的媒体播放控件,并且可以自定义其外观。

您可以使用float vol = [[AVAudioSession sharedInstance] outputVolume];检查系统音量float vol = [[AVAudioSession sharedInstance] outputVolume]; ( 参考 ),如果它是低的(例如小于0.2,你应该有一个testing来确定的价值),给用户一个小贴士“请把你的音量”。