VISTA、Win Server 2008、Win7 等系统音频系统底层API

【音视频】获取音频设备-mmdeviceapi(八) 获取音频设备,包括获取麦克风、扬声器设备。主要介绍获取设备列表以及默认设备。 技术简介 使用ffmpeg的相关技术以及mmdeviceapi 使用模块(库) 使用ffmpeg的avdevice-58.dll 主要流程和代码 获取默认设备 int AudioDevice::getDefaultDevice(bool isMic, std::string& id, std::string& name) { HELPER::ComUtil comUtil; int err = ERROR_C 阅读详情
VISTA、Win Server 2008、Win7 等系统音频系统底层API

Core Audio APIs的优势:

Windows Vista、Windows 7、Windows server 2008等系统音频系统相比之前的系统有很大的变化,产生了一套新的底层API即Core Audio APIs。该低层API为高层API( 如Media Foundation(将要取代DirectShow等高层API)等 )提供服务。相比之前版本的API有如下优势:

1. 具有低延时、故障恢复能力的音频流。

2. 提高可靠性 ( 将很多音频函数从核心态移到了用户态 )

3. 提高了安全性 (在安全的,低优先级别的线程处理被保护的音频内容)

4. 为单独的音频设备分配了特定的系统级别的规则 (console, multimedia, communications) 。

5. 用户可以直接操作相应音频终端设备(Audio Endpoint Devices 如:扬声器、耳机、麦克风、CD播放器)的软件抽象。

 

Core Audio APIs在系统中的位置:

        

Core Audio APIs的组成: 

1. Multimedia Device (MMDevice) API    该API用于枚举系统中的音频终端设备(Audio Endpoint Devices)。告诉音频客户端程序有哪些音频终端设备以及它们的性能,并且为这些设备创建驱动实例(driver instances)。是最基本的Core Audio API,为其他三个API提供服务。

主要接口:

        IMMDeviceEnumerator 用来列举音频终端设备。

IMMDevice                  代表一个音频设备(audio device)。

IMMEndpoint               代表一个音频终端设备(audio endpoint device),只有一个方法GetDataFlow,用来识别一个音频终端设备是一个输出设备(rendering device)还是一个输入设备(capture device)。

IMMDeviceCollection           代表一个音频终端设备的集合  

2. EndpointVolume API      使客户端程序能够操作音频终端设备。

主要接口:

IAudioEndpointVolume 用于控制音频终端设备的音量、静音。 

3. Windows Audio Session API (WASAPI)      使客户端程序能够管理介于程序和音频终端设备之间的音频数据。

                                                        如应用程序本身的音量。

主要接口:

ISimpleAudioVolume           代表控制来往音频终端设备的音频流的音量。

4. DeviceTopology API 客户端程序使用这个API可直接沿着音频适配器(audio adapters)的硬件设备里的数据通道进入布局特征。是最底层的音频API,可以通过适配器设备(adapter devices)的布局来查看和管理设备中的音频控制。下图为DeviceTopology API的作用范围

音频适配器设备(audio adapter device)内部是由很多Part组成。主要包括亚单位(Subunit)和连接头(Connector)。亚单位主要分为:音量控制(Vol)、静音控制(Mute)、多路器(MUX)等。连接头(Con)是一个连接的两端。

 

Core Audio APIs的使用:

<1> 音频终端设备(Audio Endpoint Device)音量、静音控制

比如控制“声音”对话框下“播放”选项卡中的“扬声器”等,“录制”选项卡中的“麦克风”、“立体声混音”等。

步骤:

1.        得到IMMDeviceEnumerator接口。

2.        遍历音频终端设备得到IMMDeviceCollection接口。

3.        根据IMMDeviceCollection得到每个设备的IPropertyStore接口,从而分辨并搜索到指定的设备IMMDevice接口。

4.        用IMMDevice接口激活音量、静音控制接口IAudioEndpointVolume。 

 

<2> 音频适配器设备亚单位(Subunit)的音量、静音控制

         比如控制“声音”对话框下“播放”选项卡中的“扬声器”下的“CD 音频”、“麦克风”、“Fornt Pink In”等的控制。

步骤:

1.        得到IMMDeviceEnumerator接口。

2.        遍历音频终端设备得到IMMDeviceCollection接口。

3.        根据IMMDeviceCollection得到每个设备的IPropertyStore接口,从而分辨并搜索到指定的设备IMMDevice接口。

4.        根据IMMDevice接口和连接器接口IConnector得到音频终端设备所对应的设备适配器(adapter device)的布局接口IDeviceTopology。

5.        根据IDeviceTopology接口得到指定的部分(Part)。

6.        最后用得到的部分(Part)接口IPart激活音量控制接口IAudioVolumeLevel和静音控制接口IAudioMute。

 

<3> 会话(Session)音量、静音控制

         比如“音量合成器”中应用程序的音量。

步骤:

1.        得到IMMDeviceEnumerator接口。

2.        根据IMMDeviceEnumerator得到默认设备的IMMDevice接口。

3.        得到音频会话接口IAudioSessionManager。

4.        由IAudioSessionManager接口得到IAudioSessionControl接口,该接口用来设置会话(Session)参数。

5.        设置好了参数之后,在由IAudioSessionManager接口得到音频会话的音量、静音控制接口ISimpleAudioVolume,从而可以控制程序的音量、静音。

 

 

转自:http://kanglovepei.spaces.live.com/blog/cns!861E0583566CFC59!266.entry

-----------------------------------------------------------------------------------------------------------------------------------------------------------

应用范围:Vista / win7, 不支持XP

1. 关于Windows Core Auido APIs

      在Windowss Vista及Windows 7操作系统下,微软为应用程序提供了一套新的音频组件来改进音频质量。Core Audio APIs提供了这些组件的使用方法,是更高级的APIs的实现基础。例如:DirectSound、DirectMuisc、waveXxx、mixerXxx等API都是在其之上构建。他们之间的关系如下图所示。
 

       


      Core Audio APIs由三大部分组成:MMDevice API、WASAPI、DeviceToplogyAPI。三者分别侧重不同方面。
      Mmdevice API:用于枚举系统的音频端节点设备。
      WASAPI(Windows Audio Stream API):用于创建、管理进出音频端节点设备的音频流。
      DeviceToplogyAPI:直接获取硬件设备的拓扑结构及其功能。
      本文主要介绍使用WASAPI对音频流管理的功能实现系统录音功能。
 

2. 音频流的管理

      枚举系统的音频设备并制定回放、录音设备后,下一步工作就是打开设备连接,管理该连接上的数据流。WASAPI可供应用程序创建并管理音频流。应用程序可使用WASAPI实现Rendering a Stream, Capturing a Stream以及Loopback Recording。我们可以利用Loopback Recording来实现系统录音功能,达到"Record what you hear"的目的。
在loopback模式下,WASAPI应用程序可以捕获播放设备当前正在播放的音频流。操作步骤为:

  • 获取播放设备端口的IMMDevice接口
  • 获取指定设备上的音频播放格式
  • 在播放设备端口上初始化loopback模式的音频捕获流
  • 调用IAudioClient::GetService方法获取IAudioCaptureClient接口
  • 开启捕获线程,捕获线程循环交替调用IAudioCaptureClient::GetBuffer和IAudioCaptureClient::ReleaseBuufer方法获取音频数据之后写入指定文件


3. 方案缺陷

      按照MSDN所说,loopback模式只能用于shared-mode音频流,而对exclusive-mode音频流无能为力,也就是说遇到exclusive-mode音频流该方案将失效,不过exclusive-mode很少见,在Demo测试的各用例中未遇到此种情况。此外,由于WASAPI仅由Windows Vista及以上系统提供,故XP下无法使用此方案,该方案对系统的依赖性高,可移植性小。

参考资料:
MSDN相关章节:
msdn.microsoft.com/en-us/library/dd370802(VS.85).aspx

PS:
Demo程序  RecordingDemo.exe (48.00 kb)


------------------------------------------------------------------------------------------------------------------------------------------------------------

本人在使用DTM 1.2测试Motherboard 的时候在Device Console的界面找不到AUDIO Fidelity的测试项目。不知是什么原因。服务器和客户端都有重新装过系统,且AUDIO的驱动也是过了WHQL的。但是就是看不到关于AUDIO Fidelity的测试项目。


是因为没有检测到audio设备才没有出现这些测试项吗?确保你的audio可以正常的工作。

如果您在测试时选择的是“Previously Logo’d Motherboard”,那么系统认证不再需要导入Audio Fidelity test。选择这个类别的合作伙伴要通过Basic或Premium认证必须分别符合所有台式机的Basic和Premium认证要求。不过主板测试应该不在此列。

音频采集-windows采集-----02-----wasapi主要函数介绍 wasapi是windows com组件的接口,所以需要进行com组件的初始化。 阅读详情

相关推荐

带回声消除功能的Windows Core Audio(MMDeviceApi)音频采集

采用windows vista之后最新的mm device api,进行基于core audio的音频采集,启用windows内部实现的回声消除, 系统会将正在输出的音频信号,从麦克风采集到的音频里面过滤掉,使其只包含来着计算机外部的声音。比如人的语音。 系统要求vista及以上,xp不可用,xp可移步至directsound全双工采集,启用AEC回声消除效果的参考代码。http://download.youkuaiyun.com/detail/xuwei17385/4060561

Windows音频管理--第一篇 初识Core Audio API

一、前言 最近由于公司项目需要实现PC端的音频采集功能,而本人先前的工作精力都是集中在linux上的;对于windows上如何发现自己实现录音和播放功能完全不懂,故硬着头皮开始调查研究。 二、路线 在linux上采用ALSA作为音频接口,实现录音和播放功能只需要打开对应的PCM设备即可,那在windows上如何实现呢。 根据MSDN上的文档介绍,目前自从windows vista开始基本都使用CORE AUDIO API接口。 https://doc...

coderma的博客 2562

计算机图形学入门30:动画与模拟介绍

计算机图形学入门,动画与模拟,物理模拟,质点弹簧系统,运动学,粒子系统,动作捕捉。

YanisWu的博客 1485

Windows下Core_Audio_APIs的使用简介

Windows Vista之后系统,音频系统相比之前的系统有很大的变化,产生了一套新的底层API即Core Audio APIs。该低层API为高层API(如Media Foundation(将要取代DirectShow等高层API)等)提供服务。该系统API具有低延迟、高可靠性、安全性等特点。 本文主要从实时音视频场景中,简单介绍该API的使用。 Core Audio APIs的组成:MMDevice、EndpointVolume、WASAPI等。对于实时音视频系统,...

netease_im的博客 1108

Netron显示自定义属性,按属性设置不同节点的颜色

本文介绍了一种让Netron显示自定义颜色的方法,可根据某些属性,调整节点的颜色 需求背景: 在分析AI模型精度误差时,用不同等级的红色,表示误差的大小.可以直观地看到误差的传递关系

Hi20240217的博客 1513

防火墙断网后Adobe软件还弹窗“THIS APP HAS BEEN DISABLED”?原来是科学上网导致的问题!用这个简单方法一键解决!

很多小伙伴在使用上网工具的时候时,突然遇到Adobe弹出“THIS APP HAS BEEN DISABLED”的烦人提示,这个非正版弹窗真的让人头疼!即使你之前尝试过,有时也不奏效,究其原因,原来是因为你使用了代理网络,这时Adobe的流量并不是走本地,而是走代理,导致防火墙的拦截无效。不用慌!今天我来教大家如何通过上网工具,轻松禁用Adobe验证的联网流量,彻底解决这个问题!

qq_34093397的博客 3万+

Windows Core Audio APIs(一)介绍

文章目录(一)Core Audio APIs介绍Core Audio 详细介绍Core Audio 架构一些常见的音频高级API,都是基于Core Audio APIs。Core Audio APIs由以下几类APIs组成共享模式和独占模式音频服务 (一)Core Audio APIs介绍 Core Audio APIs是Windows Vista(Windows NT 6.0)推出的一个通用音频架构(Universal Audio Architecture简称UAA)的API。这是一套全新的基于用户模式的

W343051232的专栏 5393

YOLOv8性能提升:引入华为GhostNetv1特征提取网络

本文提出一种轻量化改进方案,将GhostNetV1作为YOLOv8的主干网络,以提升移动端部署效率。通过Ghost模块的两步特征生成机制(初级卷积+廉价操作),显著降低了30%的计算量(FLOPs)和参数量,精度损失控制在1%以内。实验表明,改进后的模型在骁龙865芯片上推理速度提升25%。核心创新包括:1)用GhostBottleneck替换CSP模块;2)保留FPN+PAN结构确保多尺度检测能力;3)提供完整的PyTorch实现方案。该工作为资源受限场景的目标检测提供了实用解决方案,未来可结合注意力机制

shrgegrb的博客 1180

音频系统底层API

  Windows Vista、Windows 7、Windows server 2008等系统音频系统相比之前的系统有很大的变化,产生了一套新的底层API即Core Audio APIs。该低层API为高层API( 如Media Foundation(将要取代DirectShow等高层API)等 )提供服务。 微软参考文档 几个概念,参考自 Windows下Core Audio APIS ...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 7255

混响效果的编程实现:Schroeder混响模型与Moorer型混响

Schroeder混响模型是由Manfred R. Schroeder在1962年提出的,它基于一系列串联的反射器(Allpass Comb Filters)和并联的反射器(Feedback Comb Filters)构成。Schroeder混响模型是由Manfred R. Schroeder在1962年提出的,它基于一系列串联的反射器(Allpass Comb Filters)和并联的反射器(Feedback Comb Filters)构成。通过调整各个反射器和全通滤波器的参数,可以实现不同的混响效果。

2301_79326857的博客 1082

windows中搭建sonic云真机环境/云真机环境搭建-基于docker容器部署

基于Windows系统搭建Sonic远程云真机环境实现通过浏览器操作手机端系统

雾林小妖的博客 1016

Windows 7、Windows Server 2008等系统音频系统底层API

Core Audio APIs 的优势:   Windows Vista 、 Windows 7 、 Windows server 2008 等系统 音频系统相比之前的系统有很大的变化,产生了一套新的底层 API 即 Core Audio APIs 。该低层 API 为高层 API( 如 Media Foundation( 将要取代 DirectShow 等高层 API) 等 ) 提供

danming60520的专栏 1026

flowable工作流看这一篇就够了(基础篇)

接下来我们构建一个非常简单的请假流程,Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。在Flowable术语中,我们将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。

qq_38196449的博客 2万+

Windows系统常见API

Core Audio IMMDeviceEnumerator 枚举音频设备集(IMMDeviceCollection),获取默认设备,通过ID获取设备(IMMDevice),注册通知,取消通知(IMMNotificationClient) IMMDeviceCollection 音频设备集中数量,通过索引取出设备(IMMDevice) IMMNotificationClient IUnknow接口,继承实现IUnknow和设备状态改变、设备增加、设备删除、默认设备改变和设

师从小白 2294

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Win7音频系统底层API

 VISTA、Win Server 2008、Win7 等系统音频系统底层API Core Audio APIs的优势: Windows Vista、Windows 7、Windows server 2008等系统音频系统相比之前的系统有很大的变化,产生了一套新的底层API即Core Audio APIs。该低层API为高层API( 如Media Foundation(将要取代Dir

gaiazhang‘s blog 8497

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Windows下Core Audio APIs音频应用开发

   对于一个音频应用程序,最基本也是最重要的两点就是:音频数据的采集;音频数据的播放。首先我们来了解下面几个概念:    ·IMMDevice:创建音频设备终端,我们可以把它简单的理解为设备对象;    ·IAudioClient:创建一个用来管理音频数据流的对象,应用程序通过这个对象可以获取的音频设备里的数据,我们可以把它想象成一个大水池,里面都是一些数据。    ·IAudioCapt...

冷月醉雪的博客 1130

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Windows Core Audio 音频开发技术指南

音视频客户端一般会选用共享模式,采集和播放一般使用事件驱动的方式,音频数据格式可以使用 IAudioClient 的 GetMixFormat 接口去获取默认格式,但是实际上获取到的默认格式并不一定符合客户端所需要的设备格式参数,那么会遍历通道数、采样率,调用 IAudioClient 的 IsFormatSupported 接口查询出最适合的设备格式参数。这需要时间,通常是几毫秒。它有效地锁定了所有的应用程序,相比于共享模式,独占模式音频的一个明显优势是,随着音频引擎的退出,它所带来的延迟被完全消除了。

cgx1353891102的博客 1990

Core Audio(二)

用户模式音频组件 在windows vista中,core audio apis充当用户模式音频子系统的基础,core audio apis作为用户模式系统组件的一个thin layer,它用来将用户模型客户端和内核模式音频驱动以及音频硬件区分隔开;高级音频接口,像DirectSound和 windows 多媒体函数(waveOutXxx waveInXxx),都是通过core audio ap...

weixin_30764771的博客 319

【音视频】获取视频设备-MMDeviceAPI&MONITORINFOEX(2-3)

获取音频设备,包括获取摄像头、显示器设备。主要介绍获取设备列表以及默认设备。 技术简介 使用mmdeviceapi和MONITORINFOEX技术可以获取摄像头、显示器设备 使用模块(库) 使用windows的mmdeviceapi、MONITORINFOEX库 主要流程和代码 获取摄像头设备列表 int VideoDevice::getCameraDevices(std::list<VIDEO_DEVICE>& devices) { int err = ERROR_CODE_OK;

hcmonk的博客 727
上一篇: OC语言: Block底层实现原理
下一篇: speech codec (G.711, G.723, G.726, G.729, iLBC)
zdpyly21
博客等级 码龄12年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值