2

所以我在网上找不到任何说我不能这样做的东西,但是每当我尝试在 iPhone 上这样做时,就会从 AudioQueueSetParameter 返回错误。具体来说,如果我尝试这段代码:

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

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

但是,如果我在输出队列上尝试相同的确切代码,它就可以正常工作。有谁知道为什么我可以改变输出音量,但不能改变输入?

谢谢

4

2 回答 2

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);
}
于 2011-06-09T09:58:22.970 回答
0

我认为您可以AudioQueueBuffer自己将 s 的 PCM 值乘以某个音量因子来进行音量调整。

于 2017-02-09T10:01:18.630 回答