设置音频队列的输入音量

发布于 2024-10-08 03:11:12 字数 412 浏览 5 评论 0原文

因此,我在网上找不到任何说明我不能执行此操作的内容,但每当我尝试在 iPhone 上执行此操作时,AudioQueueSetParameter 都会返回错误。具体来说,如果我尝试此代码:

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

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

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

谢谢

So I can't find anything online that says I can't do this, but whenever I try to do it on the iPhone, errors are returned from AudioQueueSetParameter. Specifically, if I try this code:

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

Then I get the following error: kAudioQueueErr_InvalidParameter. Which Apple's documentation says it means: "The specified parameter ID is invalid".

But if I try the same exact code on an output queue, it works just fine. Does anyone have any idea why I can change the volume on output, but not input?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

始终不够 2024-10-15 03:11:12

根据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);
}

According to Apple's Audio Queue Services Reference
AudioQueue Parameters apply only to playback audio queues.

To retrieve information about your input stream try to use AudioQueue Properties.

// 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);
}
×眷恋的温暖 2024-10-15 03:11:12

我想您可以自己将 AudioQueueBuffer 的 PCM 值乘以某个音量系数来产生音量调整。

I presume you could just multiply the PCM values of the AudioQueueBuffers by some volume factor yourself to produce a volume adjustment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文