2010-12-16 52 views
2

因此,我无法在网上找到任何说我无法做到的事情,但每当我尝试在iPhone上进行操作时,都会从AudioQueueSetParameter返回错误。具体来说,如果我尝试下面的代码:在音频队列上设置输入音量

AudioQueueParameterValue val = f; 
XThrowIfError(AudioQueueSetParameter(mQueue, kAudioQueueParam_Volume, val), "set queue volume"); 

然后我得到以下错误:kAudioQueueErr_InvalidParameter。 Apple的文档说这意味着:“指定的参数ID无效”。

但是,如果我在输出队列上尝试相同的确切代码,它工作得很好。有没有人有任何想法,为什么我可以改变输出音量,但不输入?

感谢

回答

1

根据苹果的音频队列服务参考 AudioQueue参数仅适用于播放音频序列。

要检索有关输入流的信息,请尝试使用AudioQueue属性。

// streamDescription here means your AudioStreamBasicDescription 
UInt32 levelSize = sizeof(AudioQueueLevelMeterState) * streamDescription.mChannelsPerFrame; 
AudioQueueLevelMeterState *level = (AudioQueueLevelMeterState*)malloc(levelSize); 
if (AudioQueueGetProperty(inQueue, 
          kAudioQueueProperty_CurrentLevelMeter, 
          &levelSize, 
          &level) == noErr) { 
    printf("Current peak: %f", level[0].mPeakPower); 
} 
0

我想你可能只是一些体积系数乘以自己的AudioQueueBuffer S的PCM值以产生一个音量调节。