问题标签 [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.
audio - 将音频代码升级到新的 WASAPI 标准
我们有一个应用程序,它使用waveXXX()
和mixerXXX()
功能来处理与某些仪器之间的音频 I/O(想想:示波器或电子设备而不是乐器,这并不重要)。终于到了停止在 Windows XP 上部署它并将其移至 Windows 7 和/或 8 的时候了。
从阅读有关 WASAPI 的各种材料,听起来大部分应用程序(基于waveXXX()
功能)可能实际上工作正常,但mixer()
用于设置主输出音量、线路音量和麦克风静音的东西肯定必须改变,并改用IAudioEndPointVolume调用。
是否可以只更改mixerXXX()
呼叫?这是可取的吗?
从逻辑上讲,此应用程序需要独占使用其音频端点(扬声器输出、线路输入)。如果我想通过软件确保独占访问,那会迫使我也重写所有waveXXX()
代码吗?(另一种方法是警告用户其他音频应用程序可能会干扰此应用程序)。
audio - 音频延迟与可靠性
使用 WASAPI 在 Windows 上的音频流中的延迟和可靠性之间是否存在任何权衡?
也就是说,如果我正在编写 WASAPI 应用程序并且我想要最小延迟,那么与使用更高延迟相比,音频流会受到更多的爆裂声和咔嗒声以及音频干扰吗?使用尽可能低的延迟是“免费午餐”还是附带警告的东西?
c# - 从音频流中捕获细节
我的目标是从音频流中捕获两个变量,它们是每个频率的频率和分贝级别(需要几个频率范围,所以我最终会对它们进行分组,除非 WASAPI 可以从音频流中提取频率范围)。
我发现使用 WASAPI 可以捕获音频流,但它似乎基于 C++。是否可以使用 WASAPI 获取上述变量,我可以在 C# 中使用 WASAPI 吗?
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 文件的末尾即可:
format
是WAVEFORMATEX
从audioClient->GetMixFormat(&format)
:
显然它的子类型WAVE_FORMAT_EXTENSIBLE
是 Float:
在将所有捕获的数据写入文件之前,我填写了标题(在http://www.topherlee.com/software/pcm-tut-wavformat.html之后):
在完成 3 秒的数据写入后,我使用fwrite
.
该文件不可读。我怀疑它与WAVE_FORMAT_EXTENSIBLE
,但我无法弄清楚。
我尝试覆盖以下几个元素format
:
产生一个可读的 .wav 文件,但在其中播放一些点击作为静音(我尝试录制一首歌)。
正在产生所有随机噪声。
c++ - 是否有一种编程方式来确定哪个进程在 Windows XP 上播放声音?
我的问题与这个问题非常相似:Peak Meters for Individual Programs on Windows 7
我也在尝试编写一个程序来枚举当前正在播放声音的所有进程。但就我而言,我需要它在 Windows XP 上也能工作,而我在这里找到的答案对我不起作用,因为 WASAPI 直到 Windows Vista 才引入。
wasapi - Wasapi 录制和播放,相同的音频设备,音频倾斜
我正在为 Windows (7+) 开发一个应用程序,它使用 Wasapi 进行同时录制和播放(VOIP 风格)。我使用独占模式访问为同一设备设置了两个流(一个捕获,一个渲染)。缓冲区大小完全相同(10 ms 的数据,正确对齐)。
一切都很好,但我注意到捕获数据与渲染数据的速率“略有”不同,几乎就像我使用具有不同时钟的两个独立设备一样。捕获流以略快于渲染流消耗的速率提供数据。
当我的应用程序与另一个用户交谈时,我希望用户听到他们自己作为混音的一部分。如果这两个流没有完全同步,那么如果不偶尔“弹出”,这将是不可能的。
有没有人遇到过这种“不同步同一设备”的问题?我缺少一些基本概念吗?
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 的代码:
portaudio - 如何在pyaudio中启用WASAPI独占模式
我正在使用带有 WASAPI 支持的 pyaudio 的这些预编译二进制文件。我想通过 WASAPI 播放一个 wav 文件。我找到了这个 api 的默认输出设备的索引:
然后我通过这个设备播放一个 wav 文件:
播放文件时,我仍然能够听到系统中的其他声音,但在独占 WASAPI 模式下,必须阻止所有其他声音。那么如何在pyaudio中开启WASAPI独占模式呢?
wasapi - 带有硬件加速的 Wasapi 独占模式似乎不起作用
我们有一个在事件驱动的独占模式下使用 Wasapi 的应用程序,它在大多数设备上都能正常工作。但是,当我们在为播放设备属性启用硬件加速的机器上运行时,我们会得到静默输出。没有错误报告,并且 Wasapi 系统在调试中似乎运行正常。然而,输出只是沉默。
如果我们使用控制面板中的声音属性关闭硬件加速,它就可以正常工作。
到目前为止,我们只能在使用英特尔 SST 音频设备 (WDM) 的低端设备上执行此操作。
还有其他人遇到这个吗?是否有一个特殊的 WASAPI 初始化过程我们必须在独占模式下使用硬件加速设备?
c# - 重采样环回捕获
我使用以下代码成功地从 Wasapi 捕获了声音:
我现在需要做的是,以pcm
8000 的采样率和每个单声道采样 16 位重新采样内存中的数据。
我不能ACMStream
用来重新采样示例,因为录制的音频是每秒 32 位。
我试过这段代码将字节从 32 位转换为 16 位,但我每次得到的只是空白音频。