所以我在网上找不到任何说不能做的事,但每当我尝试在iPhone上做这件事时,都会从AudioQueueSetParameter返回错误。具体来说,如果我尝试这段代码:
AudioQueueParameterValue val = f;
XThrowIfError(AudioQueueSetParameter(mQueue, kAudioQueueParam_Volume, val), "set queue volume");
然后我收到以下错误:kAudioQueueErr_InvalidParameter。 Apple的文档说明这意味着:“指定的参数ID无效”。
但是如果我在输出队列上尝试相同的确切代码,它就可以正常工作。有没有人知道为什么我可以改变输出音量但不输入?
由于
答案 0 :(得分:2)
根据 Apple的音频队列服务参考 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);
}
答案 1 :(得分:0)
我认为你可以自己将AudioQueueBuffer
s的PCM值乘以某个体积因子来产生音量调整。