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

c# - NAudio WasapiLoopbackCapture ComException (0x88890003)

我正在尝试使用 WasapiLoopbackCapture 类(NAudio 1.7.1.17)并以 COMException(0x88890003)结束。录音格式为WaveFormat(44100, 16, 2)。我的系统上有多个播放设备,并尝试将每个设备都设置为默认设备,结果相同。我还验证了这些设备中的每一个都已(44100, 16, 2)列为受支持的格式。

控制台输出:

代码:

任何提示将不胜感激。

0 投票
1 回答
1033 浏览

c++ - WASAPI 在 Windows 上捕获的缓冲区大小

我使用 WASAPI 在 Windows 7 上以共享模式捕获音频缓冲区。我使用只能具有 48 kHz 采样率、96 kHz、192 kHz 或 44.1 kHz 采样率的扬声器。我的声卡是 Realtek 高清声卡。

如果我在 Windows Vista 或 Windows 8 等其他操作系统上执行我的程序,我需要知道 WASAPI 的行为是否会有所不同。此外,我需要知道 getBuffer 是否会为使用不同硬件(不同声卡)的捕获缓冲区检索相同大小。

我无法自己测试它,我在互联网上找不到太多细节。但是我的程序必须在具有不同 Windows 版本和不同硬件的不同计算机上运行。如果捕获的缓冲区大小不同,我的程序将无法在另一台计算机上正常运行。

如果有人对此有所了解,请告诉我。谢谢你。

0 投票
1 回答
935 浏览

c++ - IAudioClient::Initialize 方法的未解析外部符号。WASAPI API

我正在尝试通过 WASAPI 工具启动并运行输入音频流记录样本。这是我的意思的链接:http: //msdn.microsoft.com/en-us/library/windows/desktop/dd370800 (v=vs.85).aspx

以下是相关代码:

完整的错误信息:

任何建议都非常感谢,因为我现在正在阅读一本好的 C++ 实践书。这个错误是怎么回事?

0 投票
1 回答
173 浏览

windows-phone-8 - 如何提高 Windows Phone 8 中录音应用程序的电池效率?

我已经为 Windows Phone 8 开发了一个使用 WasApi 的录音应用程序。但是用户经常面临电池问题,而且在录音时屏幕没有超时。如果用户按下后台录制的锁定按钮,则会暂停。谁能告诉我如何解决这些问题?

0 投票
2 回答
3812 浏览

c++ - Windows 音频端点 API。获取我的音频设备的名称

我目前的主要目标是获取有关本地机器的所有音频端点设备的详细信息。那是代表音频外围设备的对象。我希望能够根据某些逻辑(或最终允许用户手动操作)选择要从哪个设备进行录制。

这是我到目前为止所得到的。我对 c++ 很陌生,所以处理所有这些抽象类变得有点棘手,所以也可以随意评论代码质量。

我目前更多的技术目标是获取实现此接口的对象:http: //msdn.microsoft.com/en-us/library/windows/desktop/dd371414 (v=vs.85).aspx 这是一种类型应该代表单个音频端点设备,而IMMDevice似乎包含设备集合。但是IMMEndpoint只包含一个名为的方法GetDataFlow,所以我不确定这是否对我有帮助。同样,目标是轻松选择要从哪个端点设备录制和流式传输音频。

有什么建议么?我是否使用了错误的 API?这个 API 对音频的实际流式传输和采样肯定有很好的命令,但我对如何确保我正在使用所需的设备有点迷茫。

0 投票
2 回答
856 浏览

c++ - 0x00000010 读取字符串字符时出错。PROPVARIANT 结构

以下是我PROPVARIANT使用 WASAPI API 相关函数获取结构的方法:

全部HRESULT返回 S_OK。

PROPVARIANT乍一看,生成的结构正确呈现。但是,当使用 VS 的属性 watch 进一步检查时,所有字符串类型属性都会返回此问题标题中反映的错误。因此,当我尝试检索包含我的结构pwszVal属性的音频端点设备的名称时,如下所示:PROPVARIANT

我无法检索所需的数据。我尝试使用各种转换器方法复制字符串无济于事。我知道这个错误有很多问题,但我似乎无法破解这个错误。

这是文档PROPVARIANT及其相应的属性:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa380072(v=vs.85).aspx

在本文档中,它声明“PROPVARIANT成员vt设置为VT_LPWSTRVT_LPWSTR是一种枚举类型,对应于值 31。而 VT_BLOB 对应于值 65。我的vt成员被设置为VT_BLOBor 65 而不是 31 or VT_LPWSTR。为什么会这样?这与本文档中所述的值相矛盾:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd370812(v=vs.85).aspx

手动设置vt成员也不会更改/修复字符串读取错误:

PKEY_Device_FriendlyName就是我所追求的。非常感谢任何帮助/提示。

0 投票
0 回答
1262 浏览

c# - 在 C# 中通过进程 ID 控制应用程序音频流平移

我希望通过 C# 中的进程 ID 控制应用程序的平移(左/右声道的音量级别)。

我发现了类似的问题,但它们都控制流音量并且不能“平移”立体声流的两个通道。

控制音量混合器
控制应用程序的音量:通过进程 ID
获取单个 Windows 应用程序当前音量输出级别,如在音频混合器中可视化
尝试构建一个简单的 c# 应用程序来控制我的音量混合器

我在 Windows 7 上使用 Microsoft Visual Studio 2013 C#。

最终目标是拥有一个应用程序,该应用程序将根据我的三重监视器设置的窗口位置从应用程序中平移音频。

请协助。

编辑:看来我只需要使用 IChannelAudioVolume 而不是 ISimpleAudioVolume 但我不知道如何使用/找到这些神奇的 GUID 或用我对 C# 的基本理解重写代码

IChannelAudioVolume http://msdn.microsoft.com/en-us/library/dd371023%28v=vs.85%29.aspx ISimpleAudioVolume http://msdn.microsoft.com/en-us/library/dd316531%28v=vs .85%29.aspx

0 投票
0 回答
164 浏览

c++ - Wasapi 流捕获会话中的空字节向量

我的主要目标是捕获 2 个音频流并将它们存储为vector<BYTE>然后提出一个全等算法来检查是否相等。现在我只捕获一个流,但是流的值为 0'/0'。为什么我的 BYTE 向量中的所有元素都得到空终止值?

当音频会话开始时,我确保发出一些噪音。使用矢量值的方式,我没有什么可比较的。我还假设使用该字节向量并使用 IAudioRenderClient 渲染它不会产生任何结果,但这是我的下一个行动计划。有任何想法吗??

0 投票
2 回答
882 浏览

c++ - WASAPI GetDisplayName 返回空白

我正在尝试编写一个与 Windows Core Audio 和 WASAPI 交互的程序。我对以下几行有困难。

输出:

这是有 3 个程序都处于活动状态并发出噪音。看来我可以看到系统声音程序,但没有别的。

谢谢您的帮助。

0 投票
0 回答
162 浏览

windows - Windows 音频 API - 会话已删除通知

我目前正在处理音频会话。假设我有一个音频会话,它是通过使用 GetSessionEnumerator 和 GetSession 枚举所有会话而获得的。可以使用 RegisterAudioSessionNotification 注册通知以了解会话何时更改音量、更改状态……。

但是,我没有找到如何知道会话何时被删除。根据文档,API 没有提供会话过期机制。

考虑到这些信息,我不明白两种行为:

  1. 在 Windows 的音量混合器 (sndvol) 中,当您终止产生声音的应用程序时,与其关联的图标和音量滑块将从列表中消失。由于没有过期机制,sndvol 是如何知道这一点的?

  2. 这是一个场景:

一个。您有 n 个音频会话处于活动状态

湾。你枚举这些会话并听取新的会话

C。您启动一个应用程序产生声音,会话创建通知启动,您的列表中现在有 n+1 个会话

d。您终止应用程序。由于没有过期机制,您仍然有 n+1 个通知

e. 我不明白的是:如果您重新枚举音频会话,您将获得 n 个会话。如果重新枚举时列表中没有事件,终止的应用程序的额外会话为什么仍然有效?而且,它为什么会从列表中消失?

有没有人有任何信息?我一直在寻找几个星期,没有结果!

非常感谢!

编辑:所以我研究了 sndvol,发现了一个有趣的接口:{604e2ae7-c4c5-4032-93ff-88b26cdd75b8},它 sndvol 从 IAudioSessionControl 查询每个会话。显然这是一个没有文档的私有接口。有趣的是:如果该查询失败,则会话不会显示在 sndvol 中! 这似乎在这里得到证实

我在该界面上找不到更多信息。