标签: wasapi

用于支持Windows Vista/7中的回声消除的API

2007年,在Windows Vista中包含DRM发烧期间,创建了一个Windows Vista团队博客,以回应许多问题.其中一个问题回应了VoIP软件在Windows Vista上运行时执行回声消除的能力.

这就是Nick White通过常见问题解答所说的话:

回声消除对优质内容的影响是否会降低?

我们相信Windows Vista为应用程序提供了足够的信息,可以成功构建高质量的回声消除功能.

Windows Vista提供哪些信息以允许应用程序构建高质量的回声消除功能?

注意:阅读该声明,我得到的印象是Windows Vista提供了足够的信息,使应用程序能够成功构建高质量的回声消除功能.据推测,Windows提供此信息的方式是通过API.

回声消除的工作原理是对播放输出进行采样,并从录制的麦克风输入中" 减去 ".

不幸的是,正如MSDN所说,人们不能总是对播放输出进行采样:

Windows Vista提供数字版权管理(DRM).内容提供商依靠DRM来保护其专有音乐或其他内容免受未经授权的复制和其他非法使用.WASAPI不允许环回记录包含受DRM保护的内容的数字流.类似地,可信音频驱动程序不允许环回设备捕获包含受保护内容的数字流.Windows Vista仅允许受信任的驱动程序播放受保护的内容.有关受信任驱动程序和DRM的详细信息,请参阅Windows DDK文档.

据推测,这意味着使用WASAPI的环回模式不是提供回声消除服务的预期方法.

什么允许实现高质量回声消除的API?

注意:这与我提出的另一个问题有关,但是是分开的:如何对输出音频混合进行采样?.这个问题专门针对Window Vista团队的响应扩展,即在Windows中可以进行回声消除.这个问题正在寻求的API; 它可以是一个如何使用它的单独问题.

谷歌搜索答案,我得到的印象是(在执行回声消除时)允许应用程序对受DRM保护的内容进行采样,但内容将降级(即"足够的信息").这将使任何回声消除更糟,但仍然可能.

或者Windows团队暗示" 足以满足大多数情况,但不是在用户正在收听歌曲或播放电影时 " - 并且事实上不可能成功构建高质量的回声消除功能?


更新:应该注意我不是在寻找回声消除API,我正在寻找一个API来对播放输出进行采样 - 这是实现回声消除所需要的.除非Windows Vista提供回声消除API(这是他们继续保护高级内容的方式).但我也没见过回声消除API.

windows audio windows-7 wasapi

5
推荐指数
1
解决办法
2096
查看次数

将单个Windows应用程序当前音量输出级别视为在音频混音器中可视化

我正在尝试编写一个C#代码,用于从访问声音输出的每个窗口应用程序输出当前音频输出级别(如Volume混音器中不断变化的绿色条所示).

该程序将每10毫秒检查一次,并输出如下:Windows Media Player:30,Mozilla Firefox:0,Adobe Flash Player:35(根据图)

我正在使用Windows 7,并在C#中尝试它(因为Java无法实现这一点).

我已经找到了为正在运行的应用程序获取和设置主音量(对于Windows Media Player显示65%的句柄栏)的方法,有没有办法获得绿色波动的水平数据?

谢谢!

音频混音器

c# audio mixer wasapi cscore

5
推荐指数
1
解决办法
9944
查看次数

什么时候向 WASAPI 添加了对 AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM 的支持?

有谁知道对 AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM 流标志的支持是何时添加到 WASAPI 的?MSDN 简要提到了这个标志,但没有详细介绍它的使用以及哪些版本的 Windows 支持它。

我正在使用 Visual Studio 2015 附带的平台 SDK,甚至没有定义 AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM。

c++ windows audio wasapi

5
推荐指数
1
解决办法
496
查看次数

当c#中的扬声器没有声音时,如何使用WasapiLoopbackCapture录制音频?

以下是我录制来自演讲者的音频的示例代码.它工作正常.但是只有当某些音频从扬声器发出时才录制音频.如果没有音频则不记录.实际上我正在用系统的声音进行屏幕录制.由wasapiloop录制的音频长度与屏幕录制长度不匹配,因为wasapiloop仅在有来自扬声器的声音时才录制音频.

WasapiCapture waveLoop = new WasapiLoopbackCapture();
waveLoop.Initialize();
waveLoop.DataAvailable += waveLoop_DataAvailable;
waveLoop.Stopped += waveLoop_Stopped;
waveLoop.Start();
Run Code Online (Sandbox Code Playgroud)

我已经看到一个类似的堆栈流量问题,但我完全不理解它.

静音时CSCore环回录制

任何帮助是极大的赞赏.

c# audio naudio wasapi

5
推荐指数
1
解决办法
595
查看次数

如何从 IMMDevice 获取信息?

对于 IMMDevice,我是一个完全的初学者,我需要问一下,从某些设备中获取信息的好、简单的方法是什么。在我的程序中,我已经使用 GetDefaultAudioEndpoint() 成功设置了指向其中之一的指针。现在我只需要能够从中获取一些基本信息,例如一些演讲者信息或演讲者的 ID 或类似的信息。有什么好方法可以让初学者能够掌握呢?谢谢!

windows audio device visual-c++ wasapi

3
推荐指数
1
解决办法
3923
查看次数

WASAPI:为独占输出选择波形格式

我正在尝试使用WASAPI打开带有输出设备的独占流.我在选择可接受的格式时遇到问题,因为似乎没有关于给定设备接受哪种格式的提示.

就我而言,IAudioClient::GetMixFormat(),否则会返回一个类型的默认格式为设备,返回不能以独占模式(使用的格式IAudioClient::IsFormatSupported()返回AUDCLNT_E_UNSUPPORTED_FORMAT).我不知道从哪里去.有一些荒谬的波形参数组合 - 我真的必须迭代它们中的每一个直到有效吗?

c++ audio wasapi

3
推荐指数
1
解决办法
1735
查看次数

从IAudioClient :: GetMixFormat解释WAVEFORMATEXTENSIBLE

我正在学习Windows Core Audio API.使用这个Rendering a Stream示例,我发现IAudioClient :: GetMixFormat返回一个模糊的WAVEFORMATEXTENSIBLE,如下所示:

Format
  wFormatTag          = WAVE_FORMAT_EXTENSIBLE (65534)
  nChannels           = 2
  nSamplesPerSec      = 48000
  nAvgBytesPerSec     = 384000
  nBlockAlign         = 8
  wBitsPerSample      = 32
  cbSize              = 22
Samples  // this is a union
  wValidBitsPerSample = 32
  wSamplesPerBlock    = 32
  wReserved           = 32
Run Code Online (Sandbox Code Playgroud)

Format.cbSize22岁起,这就是整个结构; 没有SubFormatGUID可以提供有关样本的更多信息.这看起来很奇怪,因为格式标签是WAVE_FORMAT_EXTENSIBLE- 我认为 - 意味着您必须依靠SubformatGUID来确定实际格式.

我可以看到有两个32位采样通道.如何确定这些样本是整数还是浮点值?

[ 标签显然是用于Apple API.Windows Core Audio是否有不同的标签?]

c++ audio winapi wasapi

3
推荐指数
1
解决办法
985
查看次数

如何使非提升进程可以访问命名管道?

问题:我创建了一个服务,该服务应该在提升的权限下运行。现在我有了一个可供用户访问的应用程序。应用程序希望通过命名管道与服务通信。命名管道由服务创建。

但是我无法打开管道,因为 ERROR_ACCESS_DENIED。问题:如何在服务中设置管道,以便应用程序能够写入/打开它?

我读过这篇文章,但它根本没有帮助。我很高兴看到提示或代码示例。

背景:我需要更改音频设备的设置,这可以通过通过 IMMDevice::OpenPropertyStore 调用获取的 IPropertyStore 接口来完成。然而,文档清楚地表明,如果我没有管理权限,我就无法执行此操作。显然,我不想每次用户旋转旋钮时都会使用 UAC 来惹恼用户。为此,我创建了上述服务。但再次没有运气。

winapi uac named-pipes wasapi

3
推荐指数
1
解决办法
893
查看次数

使用 WASAPI 录制音频流

我正在阅读诸如“捕获流”“环回录音”之类的文档,但我找不到关于如何从环回音频设备(有时称为“什么使用 Windows WASAPI 聆听”、“立体声混音”)。

您是否有一个简单的可重现示例,展示如何使用 C++ 从 WASAPI 设备循环录制音频块?

这是 Python 中的一个类似(有效)示例:

import soundcard as sc  # installed with: pip install soundcard
lb = sc.all_microphones(include_loopback=True)[0]
with lb.recorder(samplerate=44100) as mic:
    while True:
        data = mic.record(numframes=None)
        print(data)    # chunks of audio data (448 samples x 2 channels as an array by default)
Run Code Online (Sandbox Code Playgroud)

c++ windows audio winapi wasapi

3
推荐指数
1
解决办法
6348
查看次数

在 VS 2010 中链接 WASAPI

我正在使用 Visual Studio 2010 并包含以下标头:

#include <Audioclient.h>
#include <mmdeviceapi.h>
Run Code Online (Sandbox Code Playgroud)

除其他外,参考这些功能:

CoCreateInstance
IMMDeviceEnumerator::GetDefaultAudioEndpoint
IMMDevice::Activate
Run Code Online (Sandbox Code Playgroud)

我已经链接了 winmm.lib,但我收到了这样的错误:

Error   8   error LNK2001: unresolved external symbol _IID_IMMDeviceEnumerator  C:\XXXX\XXXX\XXXX.obj   XXXX
Run Code Online (Sandbox Code Playgroud)

我需要链接什么 .lib 文件才能使用这些函数?是否有关于如何在 VS 2010 中找到与 .h 文件关联的 .lib 的任何指导?

我正在查看来自 MSDN 的一些示例代码,但找不到需要链接的库。

c++ audio visual-studio-2010 wasapi

2
推荐指数
1
解决办法
3071
查看次数