问题标签 [wasapi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
557 浏览

c - 如何使用 WASAPI 检测缓冲区下溢?

使用Windows 音频会话 API,如何检测缓冲区下溢,也称为缓冲区下溢?

0 投票
1 回答
784 浏览

python - 如何在 python 脚本中控制 Windows 主音频

放弃 abarnert 在Python 中的建议:更改 Windows 7 主卷

我正在尝试编写一个 python 脚本来控制 Windows 7 中的主音量

我知道在 C++ 中可以这样做:

我正在尝试使用pywin32在 python 中获得该功能,但我发现自己卡住了。我到目前为止的代码是:

CoCreateInstance 想要 MMDeviceEnumerator 的类 ID (CLSID),但似乎没有像 __uuidof() 这样的函数来获取类 ID。(反正我也找不到。)

有没有人有任何想法/建议?我是 COM/OLE 编程和 pywin32 的新手,感觉有点失落。

0 投票
1 回答
521 浏览

c++ - 设置 WMP 音量级别

我想要做的是设置 Windows Media Player 的音量级别。默认情况下,当单击向下或向上菜单项(播放 -> 音量 -> 向上)时,音量会降低 10%,但在我看来,这还不够好(尤其是在与某人进行 Skype 通话时听音乐)。

媒体播放器应该是一个独立的应用程序。
目前我正在使用一个小工具,通过 SendMessage 向播放器发送应用程序命令,其参数如 spy++ 中所示。

我想了三种方法来实现我的目标:

  • 使用 WASAPI 获取媒体播放器的音频会话并动态设置音量级别
  • 按点向媒体播放器主机控件的音量滑块发送鼠标向下/向上事件
  • 通过 IWMPPlayer4 获取媒体播放器控件的实例
  • 在 Windows 窗体主机中的 WPF 应用程序中包含媒体播放器控件(由于失去独立性而不是首选)

第 2 点看起来相当难看,因为媒体播放器控件是一个 COM 元素,并且到目前为止 spy++ 仅显示一个句柄,这意味着我必须确定音量滑块的确切位置并发送非常精确的鼠标事件。另外我不知道这是否可行。

第 3 点的前提是可以通过句柄获取 COM 元素的实例。由于我还没有使用 COM 元素,我不知道这是否可能。
更新:IWMPPlayer4可以使用该界面获取远程媒体播放器的实例。虽然我必须看看是否可以更改设置。

第 1 点给我的印象是不费吹灰之力就可以实现。虽然我将面临下一个问题:识别媒体播放器音频会话。使用枚举它们并使用IAudioSessionManager2显示名称

大多数时候打印一个空字符串,除了 Mozilla Firefox 和系统声音(其他进程可能没有自己设置会话名称 => 选择默认名称并GetDisplayName返回一个空字符串)。

更新 2: 正如 Simon Mourier 指出的那样,人们可以比较进程 id 以获得正确的ISimpleAudioVolume实例,并且只要 WMP 采用这些更改,它就可以工作。所述实例通过以下方式获取:

ISimpleAudioVolume通过一个实例获取一个实例时,IAudioClient必须提供一个会话 id 才能将音量变化报告给事件订阅者。这可能使用这种方法吗?

虽然我知道向我的应用程序添加媒体播放器控件是最简单的方法,但如果可能,我不想使用此选项。

0 投票
1 回答
863 浏览

windows - 如何从 MMDevice 获取通道数?

我正在开发一个 Windows 音频应用程序,并且正在使用 MMDeviceEnumerator 来浏览所有可用的音频接口。这最终得到了一个 MMDevice,它给了我一些关于设备本身的信息。

我想获得设备提供的频道总数。目前,我正在使用属性存储来返回当前的 WAV 格式,但这会返回 Windows 为“共享”模式指定的格式。使用 Focusrite 18i8,Windows 指示此设备有 2 个通道,这正是设备高级设置的“默认格式”中指定的内容。Windows 本身不会让我在默认格式中指定 2 个输入通道以外的任何内容。

问题是,这个设备有 18 个输入通道,我想使用 Wasapi 以独占模式打开它并访问所有通道。我不确定如何找出音频设备实际有多少“真实”通道。

这可以从 MMDevice 中找到吗?

0 投票
1 回答
246 浏览

windows-8.1 - 使用指向已释放缓冲区的指针的 Windows Store 的 WASAPI 示例

我正在使用适用于 Windows 8.1 商店的 Windows 音频会话 (WASAPI) 示例的音频捕获部分,上次更新时间为 2015 年 3 月 24 日。我之所以写,是因为我可以看到一些看似错误或过于复杂的代码示例。我猜那是因为我不完全了解 WASAPI 接口和 Windows 运行时工作队列,所以我希望 Stack Overflow 社区能告诉我为什么这不是错误。

所有这些都在 WASAPICapture.cpp 中。现在,我将用最简单(也是最严肃的)示例来测试水域:使用指向已释放缓冲区的指针。

下面是一些伪代码,用于突出显示有问题的特定行。行号是相对于更完整的代码提取进一步向下。

PS - 我的互联网访问是零星的,而且我是一个新手 - 所以请耐心等待我的回复。

...这是更完整的代码摘录:

0 投票
1 回答
586 浏览

c++ - 记录渲染和记录设备

我正在 Windows 上用 C++ 编写程序。我需要支持 Windows Vista+。

我想同时录制麦克风和扬声器。

我正在使用 WASAPI 并且可以分别录制麦克风和扬声器,但我希望只有一个流向我提供来自两个流的输入(例如,用于录制客户弹奏吉他以及他听到的音乐耳机),而不是以某种方式将两个缓冲区合并在一起(我想这会导致我出现时间问题)。

有没有办法做到这一点?

0 投票
1 回答
1248 浏览

c# - Windows 10 上的 UWP 实时音频

我想问你:在我公司我应该开发通讯应用程序。像 Skype 等。我们有我们的自定义 SIP 实现。数据由 RSA 或类似的东西加密。现在,我正在寻找一些解决方案,如何在 Windows 10(桌面、手机)上实现捕获音频我发现了一些关于 WASAPI、XAudio2 的内容。我认为,最好的选择是 WASAPI。但它会在 Windows 10 Mobile 上运行吗?或者你会向我推荐任何第三方库,如 SharpDX、NAudio 吗?我需要回声消除,我不确定 WASAPI 是否支持回声消除。所有建议将不胜感激。

0 投票
1 回答
542 浏览

c++ - 何时将 AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM 支持添加到 WASAPI?

有谁知道对 AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM 流标志的支持何时添加到 WASAPI 中?MSDN 简要提到了这个标志,但没有详细说明它的使用以及哪些版本的 Windows 支持它。

我正在使用 Visual Studio 2015 附带的平台 SDK,甚至没有定义 AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM。

0 投票
0 回答
464 浏览

windows - 通过物理 USB 端口连接识别 Windows USB 声音设备

当我使用默认驱动程序连接多个 USB 音频设备时,我通常会得到某种友好的设备描述,例如“nn-USB 音频编解码器”或其他内容,因此我目前没有引用特定硬件的唯一属性,例如制造商ID。我想确保在重新枚举或将硬件重新插入到不同端口的情况下,我的软件将自动识别映射到该硬件的已更改 Windows 音频设备。我有可能收集可用于确定物理硬件的更多 Windows 音频设备信息吗?

也许需要一点澄清:

我有两个或多个 USB 音频设备,不一定是同一产品或制造商。音频连接有不同的用途,所以我想确保我的软件始终使用相同的物理音频设备来完成不同的任务。当重新枚举发生时,这有时会失败(有时不改变物理 USB 端口连接,这是 Windows 的事情......)

理想情况下,我会通过单独的序列号来区分它们,这通常仅适用于存储设备。但是当我使用 Nir ​​Sofer 的 USBDeview 等工具查看设备时,我可以检索到“物理”USB 拓扑。我有一个像“Hub 3, Port1”这样的属性。如果我可以将它映射到一个声音设备,我会从声音控制面板中看到的“nn-USB 音频编解码器”之类的音频音频 api 获得,我会非常高兴。

编辑2:

可能这个 [1] 帖子在这里有所帮助,但我仍然需要弄清楚如何获取 USB 端口 <-> Windwos Sounddevice 映射。

[1]:可以在 Windows 中以编程方式识别设备的物理 USB 端口吗?"

0 投票
0 回答
1890 浏览

c# - 将麦克风输入定向到扬声器并使用 CSCore 库编写自定义 DSP 函数

CSCore ( https://github.com/filoe/cscore ) 似乎是一个非常好的 C# 音频库,但它缺乏文档和好的示例。

我玩 Bass.Net 很长时间了,CSCore 的架构不像 Bass 库,所以很难找到正确的方法来完成一些常见的任务。

我正在尝试从 WasapiCapture 设备捕获麦克风输入并将记录的数据输出到 WasapiOut 设备,但我无法成功。

以下是我在谷歌搜索后可以找到的代码,但它不起作用。

我想做的是写一个像这样的应用程序: http ://www.pitchtech.ch/PitchBox/

我有自己的 DSP 功能,我想将其应用于记录的数据。

有没有人有将 WasapiCapture 引导到 WasapiOut 并编写自定义 DSP 的示例?

编辑:

我在 CSCore 库创建者 Florian Rosmann (filoe) 的帮助下找到了解决方案。

这是一个放大提供的音频数据的示例 DSP 类。

您可以使用此类,如下例所示: