Windows Core Audio APIs(一)介绍
文章目录
- Windows Core Audio APIs(一)介绍
- Core Audio 架构介绍
- Core Audio 架构图
- 音频高级API
- Core Audio APIs
- 共享模式和独占模式
- 音频服务(Audio Service)
- 终结点缓冲区
- 音频引擎(Audio Engine)
- 音频驱动(Audio Driver)
- 音频适配器(Audio Adapter)
- 终结点设备(Endpoint Device)
Windows Core Audio APIs(一)介绍
Core Audio APIs是Windows Vista(Windows NT 6.0)推出的一个通用音频架构(Universal Audio Architecture简称UAA)的API。这是一套全新的基于用户模式的音频组件。他具备以下优势:
- 低延迟、具备故障恢复的音频流
- 提高可靠性(许多音频函数已从内核模式移到了用户模式)
- 提高安全性(受保护的音频内容的处理在安全、低权限的进程中进行)
- 将特定的系统范围角色(控制台、多媒体和通信)分配给单独的音频设备。
- 对用户直接操作的音频终结点设备(例如扬声器、耳机和麦克风)进行了软件抽象
Core Audio 架构介绍
大多数的Windows采集播放的API都是基于Core Audio APIs。很多流行的Windows音视频客户端都是基于Core Audio APIs,例如 obs-studio。
Core Audio 架构图
UUA 架构如下图所示
音频高级API
一些常见的音频高级API,都是基于Core Audio APIs。
使用这些高级API的好处是API会自动在应用程序使用的流格式和音频设备使用的格式之间进行转换。这些API包括:
- Direct Audio(Direct Music 和Direct Sound),Direct Music间接通过Direct Sound访问Core Audio APIs。
- Windows MultiMedia (WaveXxx Functions 和MixerXxx Funtions)
- Media Foundation
Core Audio APIs
Core Audio Api 要求应用程序流使用与设备使用的格式相同的格式,或与设备使用的格式密切相关。因此,使用Core Audio Api 播放或采集音频流的应用程序可能需要在流格式之间进行部分或全部转换。
Core Audio Api 由以下几类APIs组成:
- Multimedia Device(MMDevice)API。客户端使用此 API 枚举系统中的音频终结点设备
- Windows Audio Session API(WASAPI)。客户端使用此 API 创建和管理从音频终结点设备来的(以及要送到音频终结点设备的)音频流。
- DeviceTopology API。客户端使用此 API 直接访问拓扑功能 (例如,音量控制和多路复用 (multiplexers) ),这些功能位于音频适配器内硬件设备内的数据通道中。
- EndpointVolume API。客户端使用此 API 直接访问音频终结点设备上的音量控制。 此 API 主要由管理独占模式音频流的应用程序使用。
共享模式和独占模式
UAA 提供了两种模式来访问音频终结点设备,共享模式和独占模式,
共享模式(Share Mode)
- 该模式下多个应用程序共享音频设备。
- 该模式下只能混合PCM流格式
- 音频引擎可以在应用程序使用的标准PCM样本大小与引擎用于内部处理的浮点示例之间进行转换
- 应用程序流的格式通常必须与设备使用的流格式具有相同数量的通道和相同的采样率。
- 播放时客户端程序将数据写入音频终结点设备缓冲区(共享模式下由windows 音频服务分配可同时由应用程序和音频引擎跨进程访问的缓冲区),音频引擎从该缓冲区读取数据。音频引擎混合了从多个应用程序而来的音频流,并通过硬件播放混合后的音频流。
- 采集时,音频引擎将数据写入音频终结点缓冲区,客户端程序从缓冲区读取数据。音频引擎将输入设备的音频流
独占模式(Exclusive Mode)
- 该模式下单个应用程序独占音频设备
- 该模式可以传输非PCM格式的流
- 在独占模式下仅支持具有固定数据速率的非 PCM 格式
- 应用程序必须使用音频硬件显式支持的流格式
- 播放时该模式不经过音频引擎,直接将数据写入终结点设备缓冲区(独占模式下缓冲区驻留在应用程序和音频硬件都可以访问的内存中)。
- 采集时,该模式不经过音频引擎,引用程序直接从音频终结点设备缓冲区读取数据
- 一般对延迟有极端要求的应用程序采用该模式,例如RTC通信程序。
音频服务(Audio Service)
共享模式时,音频服务分配可同时访问应用程序和音频引擎的跨进程终结点缓冲区。音频服务是实现 Windows 音频策略的模块。 “音频策略” 是一组内部规则,适用于来自共享和竞争同一音频硬件的多个应用程序之间的音频流之间的交互。 Windows 音频服务通过设置音频引擎的控制参数来实现音频策略。 音频服务的职责包括:
- 跟踪用户在系统中添加或删除的音频设备。
- 监视在系统中分配给音频设备的角色。
- 管理来自产生相似类型音频内容的各组角色的音频流(控制台、多媒体和通信)
- 为每种不同类型的音频内容的混合流 (或者子流) 提供音量等级的控制。
- 为音频流通知音频引擎处理在数据通道里中的元素。
终结点缓冲区
- 客户端通过终结点缓冲区将数据传递到终结点设备。
- 系统软件和硬件组件很大程度上是以对客户端透明的方式来管理从终结点缓冲区到终结点设备的数据移动
- 对于插入到带有插孔状态检测的音频适配器的终结点设备,客户端只能为实际存在的终结点设备创建终结点缓冲区
音频引擎(Audio Engine)
音频引擎是一种用户模式的组件(Audiodg.dll),它在软件中执行所有流的处理。
- 音频引擎内置了很多APO(Audio Process Object 音频处理对象)。
- 音频引擎负责混合多个应用程序的音频流。
音频驱动(Audio Driver)
音频驱动可能是系统提供的和供应商提供的驱动程序组件的组合。
UAA 规定的音频驱动分成3种类型:
- USB Audio
- IEEE 1394 AV/C
- HD Audio
音频适配器(Audio Adapter)
- 播放时,把音频数字信息转换为模拟信号,并负责输出音频的音量控制以及静音。
- 采集时,把音频模拟信号转换为数字信号,并负责输入音频的音量控制以及静音。
终结点设备(Endpoint Device)
是对音频设备的抽象,由音频终结点生成器(audioendpointbuilder.exe),发现新的音频设备,并创建对应的软件音频终结点。音频终结点设备包括:扬声器、耳机和麦克风等。
https://docs.microsoft.com/en-us/windows/win32/coreaudio/user-mode-audio-components
Windows Core Audio APIs(一)介绍相关推荐
- Windows下Core Audio APIs的使用简介
文|网易云信资深PC端开发工程师 Windows Vista 之后的系统中,音频系统相比之前的系统有很大的变化,产生了一套新的底层 API 即 Core Audio APIs . 该低层 API 为高 ...
- Windows下Core Audio APIS 音频应用开发(二)
对于一个音频应用程序,最基本也是最重要的两个点就是:音频数据的采集:音频数据的播放.下面我们来看下如何用Core Audio APIS进行音频数据的采集. 最权威的学习资料无疑是微软的MSDN官方资料 ...
- Windows Core Audio 音频开发技术指南
在音视频通信处理流程中,音频方面最基本的无外乎就是音频的采集和播放.windows 平台下,有很多音频采集播放的方法.作为一个 windows 端音频应用程序开发人员,经常会被各种可用的API淹没,比 ...
- Windows下Core Audio APIS 音频应用开发(五)
之前做开发是一直有个疑问(博主qq,1204802552,欢迎交流) 按照Core Audio上面的文档,音频设备本身会有个设备周期,这个周期决定了音频设备所能缓存的最大数据量:而另外一方面,我们在初 ...
- Core Audio API
http://msdn.microsoft.com/en-us/library/dd370784(v=vs.85).aspx文章翻译 译文转载自http://www.cppblog.com/shenh ...
- Windows平台音频采集技术介绍
音频处理的相关技术: 采集麦克风输入 采集声卡输出 将音频数据送入声卡进行播放 对多路音频输入进行混音处理 在Windows操作系统上,音频处理技术主要是采用微软提供的相关API:Wave系列API函 ...
- 使用Core Audio实现VoIP通用音频模块
最近一直在做iOS音频技术相关的项目,由于单项直播SDK,互动直播SDK(iOS/Mac),短视频SDK,都会用到音频技术,因此在这里收集三个SDK的音频技术需求,开发一个通用的音频模块用于三个SDK ...
- 【实战分享】使用Core Audio实现VoIP通用音频模块
最近一直在做iOS音频技术相关的项目,由于单项直播SDK,互动直播SDK(iOS/Mac),短视频SDK,都会用到音频技术,因此在这里收集三个SDK的音频技术需求,开发一个通用的音频模块用于三个SDK ...
- .Net Core应用框架Util介绍(三)
上篇.Net Core应用框架Util介绍(二)介绍了Util的开发环境,并让你把Demo运行起来.本文将介绍该Demo的前端Angular运行机制以及目录结构. 目录结构 在VS上打开Util De ...
最新文章
- node.js——麻将算法(一)基本判胡
- c#中string字符串转为json与json转对象
- 商品尺码规格和颜色需要支持双引号
- python中什么叫合法的标识_python合法标识符要求是什么
- js和css实现手机横竖屏预览思路整理
- python打开快捷方式_Python创建启动目录的快捷方式,python,到
- apachemod_wsgidjango部署多个项目
- Java Integer 常量池
- pytorch1.7.0 安装亲测有效
- java实现 mysql导入_怎么用java实现mysql数据库的导入导出
- Windows 8实用窍门系列:1.使用Xaml+C#开发第一个Metro Style应用程序
- 面试常问:BIO,NIO,AIO
- 使用C#与三菱PLC通讯
- 单片机各种通信协议详解
- android 设置ios 字体大小设置,iPhone11字体大小怎么调?苹果手机调节字体大小的三种方法...
- ORA-28547 连接服务器失败
- Win10 OpenGL安装及配置
- 面试官:请讲一讲IO流核心模块与基本原理是什么?
- ORacle空间数据
- poi设置word表格单元格宽度_java poi 设置word 格式如表格一类的
热门文章
- 认证系统之 devise 简单入门教程 (三)
- 大象知道“故事怎么讲”
- css实现背景动态效果图
- Linux命令退格键变成^H的解决办法
- 小数阶乘怎么用c语言计算器,自编科学计算器 支持多次方 多次开放 阶乘 部分数学函数...
- mat1 and mat2 shapes cannot be multiplied ( )的解决
- 京东云 linux无法远程,问题解读 | Linux系统SSH无法远程登录时该怎么办?这里有篇小攻...
- 「MySQL」- 基础增删改查
- Centos7部署kubernetes集群CA证书创建和分发(二)
- 毛刺的危害及常见去毛刺方法技巧整理