gpt4 book ai didi

windows - 如何选择 "line in"音频输入并设置输入 "volume"电平

转载 作者:行者123 更新时间:2023-12-02 23:48:00 27 4
gpt4 key购买 nike

我真的很想看到一个独占模式音频应用程序的明确示例,该应用程序在一定的输入电平(音量)下从线路输入(不是麦克风)获取输入,并尽最大努力实现这一目标。 (首选 C++,但有总比没有好)

这听起来应该很简单,但找出其中的原因却非常困难。

例如,Device Topologies来自 Microsoft 的文档听起来好像您拥有简单的通用音频硬件(如在大多数台式 PC 上)并且只想设置音量、静音或选择 channel ,那么您无需担心设备拓扑,因为设备拓扑API 适用于更复杂的设备。

这将是了不起的,但它没有说明如何,并提出了其他问题:是否有一个常见的桌面 PC 音频标准,似乎总是提供扬声器输出、线路输入和麦克风输入?由于这样的标准,线路输入和麦克风是否总是混合或多路复用?本 Device Topologies 中的图表文档表明多路复用;我有旧的mixerXXX()我正在尝试升级的代码表明混合。

此外,进一步阅读 Endpoint Volume Controls建议使用 IAudioEndpointVolume接口(interface),但是Win 7.1 SDK中的音频示例没有给出IAudioEndpointVolume的示例带输入设备。个人文档 IAudioEndpointVolume函数表示支持输入和输出(“进入或离开音频端点设备的音频流”),但这些函数似乎都不支持多路复用,并且再次表示线路输入和麦克风信号的混合。

最佳答案

与旧的 waveXXX() 相比和 mixerXXX() API 很复杂,令人困惑,有时甚至在事情发生变化时甚至无法工作,新的 Core Audio API(通常简称为 WASAPI)仍然复杂且令人困惑,但旨在预测一个不断变化的网络世界。所以在那个层面上,这是一个重大的进步。但是仍然存在一个庞大的多样化音频世界,为所有人创建所有示例是不切实际的。

如果您想要一个最小的示例,请从下载 Windows SDK 开始,查看音频示例(可能是 CaptureSharedEventDrivenCaptureSharedTimerDriven )并开始删除一些在您的上下文中无关紧要的内容。重构剩下的部分将是一个很好的练习,以确保您了解正在发生的事情以及您有哪些选择。例如,如果您真的需要独占捕获(是吗?)您将需要更改 IAudioClient::Initialize()相应的参数。

要设置输入音量级别,请查看 EndpointVolume例子。你会发现这个例子和提到的其他例子都是从选择一个端点设备开始的。之后,您激活 IAudioEndpointVolume界面,并使用它设置所需的音量,以便代码易于识别并复制到重构的示例中。

然而,出于神秘的原因,在某些硬件(至少是我的)上,线路输入不会被 IMMDeviceEnumerator 枚举为音频端点。例如,除非有东西物理地插入线路输入插孔......而无论是否插入麦克风,都会找到麦克风输入。这突出了 Windows 音频的复杂性和令人困惑的性质,并导致 questions like this .

关于windows - 如何选择 "line in"音频输入并设置输入 "volume"电平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com