问题标签 [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 回答
192 浏览

winapi - IPropertyStore_Commit 方法 - 是否需要,为什么不实施?

我正在尝试更改 IPropertyStore 中标志的值。但是,无论标志的值如何,我的代码的行为似乎都是相同的。

IPropertyStore_Commit这是因为我的代码在更改标志后 没有调用吗?

我确实尝试调用该方法,但是我得到了一个错误代码0x80004001,意思是“未实现”。因此,我的问题的第二部分:为什么不实施?


更详细地说,我正在开发一个 Java 软电话,它使用 WASAPI(通过 JNI)进行一些音频处理。本机代码是用 C 编写的。

最近启用了 AES(声学回声抑制),我发现 AGC(自动增益控制)也启用了。我试图通过在 IPropertyStore 对象上设置 MFPKEY_WMAAECMA_FEATR_AGC 键来禁用 AGC。但是,无论我将值设置为什么都没有区别。

相关代码片段如下:

0 投票
1 回答
294 浏览

visual-c++ - 使用串行设备控制应用程序卷

我已经构建了一个外部设备来控制 Windows7 应用程序的级别。串行通信有效,但我正在努力使用内置的 Windows 音频会话 API (WASAPI)。

特别是,我有两个问题:

  1. WASAPI 是否适合我的问题?对我来说,它似乎太大了
  2. 如何访问每个正在运行的程序的级别?

Windows 7 音频混合器

如果你能帮我解决这个问题,我会很高兴!

0 投票
1 回答
1093 浏览

c++ - 如何处理来自 WASAPI 流的声音数据块而不将它们写入文件?

我对 WASAPI 很陌生,我正在尝试用 C++ 编写一个程序,该程序查看主播放设备上的音频流并通过 fftw3 对每个块执行 FFT,对结果进行处理,然后丢弃块. 到目前为止,我在 WASAPI 和 fftw3 上找到的每个示例都涉及写入文件然后打开该文件。是否可以直接处理 WAVE 块?

0 投票
1 回答
248 浏览

windows-phone-8 - Wp8 SetAudioEndpoint 弄乱了音频硬件时钟?

我正在使用 WASAPI 为 Windows Phone 8 上的 VoIP 应用程序捕获和渲染音频。该应用程序在使用听筒时运行良好,但一旦我切换到免提电话,远端就会出现明显的咔嗒声。查看我系统的计时,我发现在我将端点切换到免提电话后,麦克风硬件计时器开始表现得很奇怪。

我的音频循环以 WaitForMultipleObjectsEx 开始,每 10 毫秒被麦克风捕获事件唤醒一次。切换音频端点后,我发现此事件在 1 秒内触发了 101 次,而不是 100 次。每秒,最后一次捕获的 480 帧被分成 2 次捕获,其时间加起来为 10 毫秒。这让我很困惑,并导致我的音频系统出现问题。有谁知道发生了什么,或者有人可以指出我正确的方向吗?

0 投票
2 回答
3495 浏览

audio - WASAPI 捕获缓冲区大小

我在 wp8 中使用 WASAPI。因为我Getbuffer每次在共享模式下使用方法返回不同大小的缓冲区。我以 8000Hz/16 位捕获,有时Getbuffer返回 80 个样本的缓冲区,有时返回 400 个样本。这是正常的行为吗?发送不同的 hnsBufferDuration 对IAudioClient::Initialize缓冲区大小没有任何影响?

0 投票
1 回答
225 浏览

windows-phone-8 - 对 WASAPI 的 SetAudioEndpoint() 的调用导致 WP8 上出现奇怪的麦克风行为

我一直在为 Wp8 开发基于 Chatterbox 示例应用程序的 VoIP 应用程序。事情进展顺利,直到我开始处理不断变化的音频端点。我发布了这个(http://social.msdn.microsoft.com/Forums/wpapps/en-US/30b14ab2-1985-4ab0-858b-459757d8b220/setaudioendpoint-to-speakerphone-causes-timing-problem-with-microphone- capture?forum=wpdcapp ) 不久前,当我第一次遇到切换端点后引入的计时问题时。我看到捕获计时器在奇怪的时间触发,这在远端引入了一种咔哒声。我决定在切换端点后重置和刷新设备(Stop()、Reset()、Start())——这似乎摆脱了点击问题。

然而,现在又出现了一个新问题。偶尔(即每 20-30 次切换)在切换端点设备时,远端的声音会变得“模糊”或失真。再次切换端点(并重新启动设备)似乎可以解决问题,但我仍然不知道这里的根本问题。我还注意到,当远端音频失真时,近端播放是完美的,这让我相信时间不是问题。

人们在切换音频端点时是否遇到过类似的问题,或者还有其他事情发生?

0 投票
1 回答
463 浏览

windows-runtime - 重采样 PCM 音频 windows 商店应用程序

在以下示例代码的帮助下,我成功编写了一个应用程序来捕获 PCM 格式的麦克风音频。以下是采集到的 PCM 音频的波形格式:

我想将 PCM 音频重新采样为以下波形:

论坛说我们只能从 Windows 商店应用程序中捕获 CD 质量的音频,这是真的吗?是否可以在 windows 商店应用程序中转换 PCM 音频的波形类型?

0 投票
1 回答
203 浏览

windows-phone-8 - XNA 音频和 WASAPI 冲突?

我最近一直致力于为 VoIP 应用程序集成一些代码。一方面,UI(主要是拨号器)使用 XNA Audio 框架在按钮按下时播放声音字节 (DTMF)。另一方面,实际调用模块使用 WASAPI 来捕获/渲染音频。集成这些部件后,我在通话期间看到一个 AUDCLIENT_BUFFER_SILENT 标志,并且没有音频通过。我禁用了 XNA 的所有痕迹并再次尝试,只是看到调用工作正常(不存在静默缓冲区标志)。

XNA 和 WASAPI 不是很好玩吗?有没有办法继续使用 XNA 来处理声音字节和 WASAPI 来调用?

0 投票
1 回答
544 浏览

audio - 将音频效果(混响等)添加到 BackgroundAudioPlayer 驱动的流式音频应用程序

我有一个 windows phone 8 应用程序,它使用 BackgroundAudioPlayer 从远程位置或本地文件播放音频流。我现在希望能够添加音频效果,例如混响或回声等...

请你能告诉我如何做到这一点吗?即使我已经阅读了很多关于 WASAPI、XAudio2 的内容并查看了许多代码示例,我仍然无法找到将额外的音频处理代码连接到音频处理管道中的方法。

请注意,该应用程序是用 C# 编写的,但是根据我之前编写音频处理代码的经验,我知道我应该使用本机 C++ 编写音频代码。粗略地说,我需要找到一个包含原始 PCM 数据的音频缓冲区的点,我可以将其用作我的音频处理代码的输入,然后将其写回同一个缓冲区或另一个由音频处理的下一阶段。需要有办法将我的代码中发生的事情与手机的其他音频处理机制同步,当然,这个过程需要非常快,以免造成音频故障。或类似的东西; 我已经习惯了 VST 的工作方式,而不是这些事情在 Windows Phone 世界中的工作方式。

期待看到你的建议...

亲切的问候,

马特·戴利

0 投票
1 回答
1888 浏览

volume - 控制特定应用程序的音量级别

NAudio 可以用于设置特定应用程序的音量吗? { 在 Windows 7 上 }

我找到了这个线程,指的是问题,建议通过 WASAPI 自行实现所需的解决方案,但我更喜欢更简单的解决方案,最好是使用 NAudio 包装器,如果有的话。

我还发现了这个基于 WASAPI 的解决方案,它(对我来说,超过 32 位 Windows 7 专业版)没有枚举所有音频播放应用程序,因此 - 不适用。

我实际上想要完成的是:我正在使用一个商业应用程序播放一长串的音频文件,各种质量和音频级别。我想对该应用程序应用 AGC(自动增益控制,即音量级别标准化),以至少“模糊”(如果不能完全消除)播放曲目之间音量级别的差异。

作为第一阶段,我可以假设这个应用程序是唯一在系统上产生音频的应用程序,并且只处理 Windows 的主要音频路径样本,但我也不知道如何实现这一点。NAudio 可以干扰音频路径,在音频样本到达扬声器插孔之前修改音频样本(即放大它们)吗?

请注意,简单地更改 Windows 主音量表并不能解决问题,因为它不会反映在 NAudio/WASAPI Loopback 捕获的样本幅度中。

NAudio 将是首选方法,但不是必须的。