2015-09-16 216 views
-1

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

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

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

你是否检查'AudioQueueSetParameter'的结果呢?确保它成功。 – KudoCC

+0

我打印出'AudioQueueSetParameter(mQueue,kAudioQueueParam_Volume,1.0)',其结果为0.是否意味着它未能设置参数? @KudoCC – jojoT

+0

不,0表示'noErr'。 – KudoCC

回答

0

如果你已经看到了文件约kAudioQueueParam_Volume,你会发现,它控制播放增益并且不会改变系统音频音量。它的默认值是1.0,所以你不需要设置它。

kAudioQueueParam_Volume音频队列的回放音量, 范围从0.0到1.0,以线性比例表示。值为0. 表示沉默;对于音频队列实例,值1.0(默认值)表示音量为 。

使用这个属性来控制音频队列的音量相对于其他 音频输出。

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

您可以检查系统体积float vol = [[AVAudioSession sharedInstance] outputVolume];Reference),如果是低(例如小于0.2,你应该有一个测试,以确定的价值),给用户提示“请把你的音量”。

+0

我已经将系统音量调到最大,并且我已经检查过系统音量是1.0。 '当前输出音量:1.000000'。所以我不认为这个问题是关于系统音量的。但毕竟,感谢您的建议。 – jojoT

+0

@jojoT我认为这是因为原始音量太低。 – KudoCC

1

对于那些仍然有这个问题是即使在SpeakHere示例代码。该解决方案的工作很适合我的所有其他的人的:

//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]; 

}