问题标签 [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 投票
1 回答
240 浏览

audio - 将音频代码升级到新的 WASAPI 标准

我们有一个应用程序,它使用waveXXX()mixerXXX()功能来处理与某些仪器之间的音频 I/O(想想:示波器或电子设备而不是乐器,这并不重要)。终于到了停止在 Windows XP 上部署它并将其移至 Windows 7 和/或 8 的时候了。

从阅读有关 WASAPI 的各种材料,听起来大部分应用程序(基于waveXXX()功能)可能实际上工作正常,但mixer()用于设置主输出音量、线路音量和麦克风静音的东西肯定必须改变,并改用IAudioEndPointVolume调用。

是否可以只更改mixerXXX()呼叫?这是可取的吗?

从逻辑上讲,此应用程序需要独占使用其音频端点(扬声器输出、线路输入)。如果我想通过软件确保独占访问,那会迫使我也重写所有waveXXX()代码吗?(另一种方法是警告用户其他音频应用程序可能会干扰此应用程序)。

0 投票
1 回答
153 浏览

audio - 音频延迟与可靠性

使用 WASAPI 在 Windows 上的音频流中的延迟和可靠性之间是否存在任何权衡?

也就是说,如果我正在编写 WASAPI 应用程序并且我想要最小延迟,那么与使用更高延迟相比,音频流会受到更多的爆裂声和咔嗒声以及音频干扰吗?使用尽可能低的延迟是“免费午餐”还是附带警告的东西?

0 投票
0 回答
168 浏览

c# - 从音频流中捕获细节

我的目标是从音频流中捕获两个变量,它们是每个频率的频率和分贝级别(需要几个频率范围,所以我最终会对它们进行分组,除非 WASAPI 可以从音频流中提取频率范围)。

我发现使用 WASAPI 可以捕获音频流,但它似乎基于 C++。是否可以使用 WASAPI 获取上述变量,我可以在 C# 中使用 WASAPI 吗?

0 投票
1 回答
1762 浏览

c++ - WASAPI Loopback:保存波形文件

我想使用 WASAPI 记录系统的音频输出,然后将其保存到 .wav 文件中。

到目前为止,我在 WASAPI 上遵循了这些指南:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd316551%28v=vs.85%29.aspx https://msdn.microsoft.com/en-us/library/windows/desktop /dd370800%28v=vs.85%29.aspx

我使用获取缓冲区数据

然后,我正在处理这些数据,只需将其写入 .wav 文件的末尾即可:

formatWAVEFORMATEXaudioClient->GetMixFormat(&format)

显然它的子类型WAVE_FORMAT_EXTENSIBLE是 Float:


在将所有捕获的数据写入文件之前,我填写了标题(在http://www.topherlee.com/software/pcm-tut-wavformat.html之后):

在完成 3 秒的数据写入后,我使用fwrite.


该文件不可读。我怀疑它与WAVE_FORMAT_EXTENSIBLE,但我无法弄清楚。

我尝试覆盖以下几个元素format

产生一个可读的 .wav 文件,但在其中播放一些点击作为静音(我尝试录制一首歌)。

正在产生所有随机噪声。

0 投票
0 回答
51 浏览

c++ - 是否有一种编程方式来确定哪个进程在 Windows XP 上播放声音?

我的问题与这个问题非常相似:Peak Meters for Individual Programs on Windows 7

我也在尝试编写一个程序来枚举当前正在播放声音的所有进程。但就我而言,我需要它在 Windows XP 上也能工作,而我在这里找到的答案对我不起作用,因为 WASAPI 直到 Windows Vista 才引入。

0 投票
0 回答
405 浏览

wasapi - Wasapi 录制和播放,相同的音频设备,音频倾斜

我正在为 Windows (7+) 开发一个应用程序,它使用 Wasapi 进行同时录制和播放(VOIP 风格)。我使用独占模式访问为同一设备设置了两个流(一个捕获,一个渲染)。缓冲区大小完全相同(10 ms 的数据,正确对齐)。

一切都很好,但我注意到捕获数据与渲染数据的速率“略有”不同,几乎就像我使用具有不同时钟的两个独立设备一样。捕获流以略快于渲染流消耗的速率提供数据。

当我的应用程序与另一个用户交谈时,我希望用户听到他们自己作为混音的一部分。如果这两个流没有完全同步,那么如果不偶尔“弹出”,这将是不可能的。

有没有人遇到过这种“不同步同一设备”的问题?我缺少一些基本概念吗?

0 投票
0 回答
1698 浏览

c# - 如何使用 WASAPI 在 C# 中设置麦克风增强

我正在尝试在 C# 中使用 WASAPI,但我什至无法在 Visual Studio 中找到要引用的 dll。我应该在 COM 程序集中引用一个 dll 还是从 Microsoft 网站下载一个并引用它?是否有任何文档如何在 C# 中使用 WASAPI?

我想用它来设置麦克风提升级别。为此,我一直在使用 NAudio,但在 Windows 8.1 中它无法正常运行,请参阅this。它通过 winmm 调用设置提升级别。我以为我可以直接使用 WASAPI。

编辑

我试过 CSCore,它有一个用于设置麦克风增强的 WASAPI 调用的包装器。它成功设置了该值,但是在设置该值后,程序每次都因访问冲突异常而崩溃。这是 CSCore 的代码:

我还发现了 AudioSwitcher 库,它似乎也有一个包装器,但是无法更改麦克风音量。它总是-1。这是 AudioSwitcher 的代码:

0 投票
1 回答
3370 浏览

portaudio - 如何在pyaudio中启用WASAPI独占模式

我正在使用带有 WASAPI 支持的 pyaudio 的这些预编译二进制文件。我想通过 WASAPI 播放一个 wav 文件。我找到了这个 api 的默认输出设备的索引:

然后我通过这个设备播放一个 wav 文件:

播放文件时,我仍然能够听到系统中的其他声音,但在独占 WASAPI 模式下,必须阻止所有其他声音。那么如何在pyaudio中开启WASAPI独占模式呢?

0 投票
1 回答
579 浏览

wasapi - 带有硬件加速的 Wasapi 独占模式似乎不起作用

我们有一个在事件驱动的独占模式下使用 Wasapi 的应用程序,它在大多数设备上都能正常工作。但是,当我们在为播放设备属性启用硬件加速的机器上运行时,我们会得到静默输出。没有错误报告,并且 Wasapi 系统在调试中似乎运行正常。然而,输出只是沉默。

如果我们使用控制面板中的声音属性关闭硬件加速,它就可以正常工作。

到目前为止,我们只能在使用英特尔 SST 音频设备 (WDM) 的低端设备上执行此操作。

还有其他人遇到这个吗?是否有一个特殊的 WASAPI 初始化过程我们必须在独占模式下使用硬件加速设备?

0 投票
1 回答
773 浏览

c# - 重采样环回捕获

我使用以下代码成功地从 Wasapi 捕获了声音:

我现在需要做的是,以pcm8000 的采样率和每个单声道采样 16 位重新采样内存中的数据。

我不能ACMStream用来重新采样示例,因为录制的音频是每秒 32 位。

我试过这段代码将字节从 32 位转换为 16 位,但我每次得到的只是空白音频。