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

audio - WASAPI - CoCreateInstance 方法的问题

我正在尝试使用 Windows 核心音频 API 从麦克风捕获音频

相关的代码行是

hr 返回以下值-

0x800401f0:尚未调用 CoInitialize。

我已经改编了 msdn 页面中的示例程序 -捕获音频流

有什么问题?此外,我不明白错误的含义 - 从我从谷歌搜索得到的描述和所有。

我在 Win7 Home Pro x64 上使用 Visual Studio 2012 Express。

0 投票
1 回答
3328 浏览

windows - 是否可以从另一个进程捕获渲染音频会话?

我正在第一次潜入 Windows 的 WASAPI 系统,我不知道我想要的东西是否可以通过 Windows API 实现。

我正在尝试编写程序,该程序将记录来自各种程序的声音并将每个程序分成单独的录制曲目/音频文件。从我所做的研究中,我知道我需要记录的单元是渲染到端点的各种音频会话,而正常的记录方式是采用渲染端点并执行环回。但是,从我目前在 MSDN 中阅读的内容来看,我可以做的唯一与会话的交互是通过IAudioSessionControl,这并没有为我提供获取会话流副本的方法。

我是否遗漏了一些允许我使用 WASAPI(或其他一些 Windows API)执行此操作并在它们混合在一起形成端点之前获取单个会话(或单个流)的东西,或者这是一个不可能实现的目标?

0 投票
1 回答
680 浏览

naudio - 重采样例外

当我使用ResamplerDmoStream并选择除WaveOutput之外的任何内容(例如WASAPIDirectSound)时,我遇到以下异常:无法将 COM 对象NAudio.DMO.ResamplerMediaComObject转换为接口类型Naudio.Dmo.IMediaObject...

异常调用堆栈:

0 投票
2 回答
295 浏览

c++ - 每个应用程序实例多于一个音频会话

WASAPI 或 Media Foundation 是否允许为单个进程创建多个音频会话?

0 投票
1 回答
981 浏览

windows - 为什么我们需要 IAudioRenderClient 接口

这个问题是关于 Windows 音频会话 API 的。看了微软的示例代码,发现得到一个IAudioClient后,在其上调用“GetService”方法,得到一个IAudioRenderClient。然后调用IAudioRenderClient的GetBuffer和ReleaseBuffer方法添加要播放的缓冲区。

我的问题:

  1. 为什么需要IAudioRenderClient,为什么不直接把GetBuffer和ReleaseBuffer方法放在IAudioClient中呢?即在什么情况下我们需要多个 IAudioRenderClient 用于单个 IAudioClient?

  2. 因为当我们播放音频时,总是需要一个 IAudioClient,而在这个 IAudioClient 上我们调用 GetService 来获得一个 IAudioRenderClient,我们没有任何机会调用 CoCreateInstance() 来创建 IAudioRenderClient 是吗?那么为什么我们需要一个 IID 用于 IAudioRenderClient 呢?

==================================================== ==============================

经过更多阅读,我认为 IAudioClient 可以是 IAudioRenderClient 或 IAudioCaptureClient。但是另一个问题来了,为什么我们调用GetService来获取IAudioRenderClient而不是QueryInterface呢?

0 投票
2 回答
827 浏览

windows - 无法从原始流生成正确的 wav 文件

我捕获了原始音频数据流及其WAVEFORMATEXTENSIBLE结构。 WAVEFORMATEXTENSIBLE如下图所示:

WAVEFORMATEXTENSIBLE 结构

按照 wav 文件的标准,我尝试将原始位写入 wav 文件。我要做的是:

  1. 写“RIFF”。

  2. 写一个 DWORD。(文件大小 - sizeof("RIFF") - sizeof(DWORD))。

=== WaveFormat 块 ===

  1. 写“WAVEfmt”

  2. 写一个 DWORD。(WAVEFORMATEXTENSIBLE 结构的大小)

  3. 编写 WAVEFORMATEXTENSIBLE 结构。

===事实块===

  1. 写“事实”

  2. 写一个 DWORD。( 4 )

  3. 写一个 DWORD。(流中的样本数,应该是 sizeof(rawdata)*8/wBitsPerSample )。

=== 数据块 ===

  1. 写“数据”

  2. 写一个 DWORD(原始数据的大小)

  3. 写入原始数据。

从以上步骤得到wav文件后,我用媒体播放器播放了wav文件,没有声音,用大胆播放会给我一个失真的声音,我可以听到这是我想要的正确音频,但声音是被噪音扭曲。

原始数据可以在这里找到

我生成的wav文件在这里

这让我很困惑,因为当我使用相同的方法将 IEEE-float 数据转换为 wav 文件时,它工作得很好。

0 投票
3 回答
3644 浏览

windows - Windows 7 上各个程序的峰值表

是否可以在 Windows 7 上获取单个程序的峰值仪表读数,如果可以,如何获取?

使用 WASAPI 可以通过环回设备捕获整个系统音频,但这并不能区分来自不同程序的输出。这个问题涉及为单个指定应用程序捕获音频,但在处理捕获所有单独播放音频的程序时,答案似乎令人望而却步。这一定是可能的,因为 SndVol 可以做到,如下图所示。问题是它是如何实现的?它是通过未公开的 API 调用来完成的,还是实际上也可以通过 WASAPI 来实现这样的事情?

在此处输入图像描述

谢谢。

0 投票
4 回答
1816 浏览

windows-phone-8 - 捕获的音频缓冲区在 Windows Phone 8 上都是无声的

我正在尝试使用 WASAPI 捕获音频。我的代码主要基于ChatterBox VoIP 示例应用程序。我正在获取音频缓冲区,但它们都是无声的(标记为 AUDCLNT_BUFFERFLAGS_SILENT)。

我正在为 Windows Phone 使用 Visual Studio Express 2012。在模拟器上运行。

0 投票
1 回答
3121 浏览

c# - WasapiCapture NAudio

我们正在使用用 c# 编写的 NAudio 堆栈,并尝试以 PCM 8kHZ 和每个样本 16 位的独占模式捕获音频。

在以下函数中:

我们在调用此函数之前将 WaveFormat 配置为 (8000,1) 以及 100 ms 的周期。我们预计系统会根据要求为缓冲区分配 1600 字节,间隔为 100 毫秒。

但我们注意到发生了以下情况: 1. 系统分配 audioClient.BufferSize 为 4800 和“this.recordBuffer” 9600 字节数组(这意味着 600 毫秒而不是 100 毫秒的缓冲区)。2. 线程将要休眠,然后获得 2400 个样本(4800 字节),而不是预期的 1600 字节帧

知道那里发生了什么吗?

0 投票
1 回答
2600 浏览

portaudio - 在 Win7 上将 WASAPI 与 PortAudio 一起使用时出错

我正在尝试使用 PortAudio 和 libsndfile 在我的 Windows 7 机器上以独占模式播放 .wav 文件,但我得到了

错误号 -9984 “不兼容的主机 API 特定流信息”。

我填写了 PaWasapiStreamInfo 结构如下:

然后分配 hostApiSpecificStreamInfo 参数并通过 Pa_OpenStream 打开流,如下所示:

我错过了一步吗?

谢谢,泰勒