Core Audio(二)
用户模式音频组件
在windows vista中,core audio apis充当用户模式音频子系统的基础,core audio apis作为用户模式系统组件的一个thin layer,它用来将用户模型客户端和内核模式音频驱动以及音频硬件区分隔开;高级音频接口,像DirectSound和 windows 多媒体函数(waveOutXxx waveInXxx),都是通过core audio apis进入音频设备,见下图:
core audio apis使用户对音频终端设备(audio endpoint device)保持友好,它用抽象概念用来代表一个用户可以直接操纵的物理设备,比如扬声器,头戴耳机和麦克风等;

核心音频api包含mmdeviceapi,wasapi,devicetopology api 和 endpointvolume api,它在Audiosed.dll和 Mmdevapi.dll 用户模型系统模块,是如下高级api的基础:
a.Media Foundation
b.Windows multimedia waveXxx and mixerXxx functions
c.DirectSound
d.DirectMusic
WAS API客户端通过endpoint buffer来传递数据给终端设备,System software and hardware components管理着数据从终端缓存到终端设备,这在一定程度上是有很大的透明度的。
(1)共享模式(shared mode):
有两种类型的endpoint buffer,第一种为共享模式,WASAPI的客户端打开了一个共享模式的音频流,然后客户端向endpoint buffer写入音频数据,window audio engine从这个buffer中读取数据;在这种模式下,客户端与其他进程中的程序共享着audio hardware,audio engine混合这些程序的流并且通过硬件播放这个混合后的流;audio engine是一个用户模型的系统组件(audiodg.dll);
(2)独占模式(exclusive mode):
于此相反,一个客户端采用独占模式打开一个音频流;
注意:
a.虽然这个图表示了共享和独占模式两个流,但同一时间只有一个流(同时一个与之相关的endpoint buffer)存在,究竟哪个存在,取决于客户端打开这个流的方式;
b.在独占模式中,客户端可以选择任何的endpoint device支持的的音频格式开打开流,而在共享模式下,客户端必须用目前audio engine使用的mix format;
c.win7中,加入的新的共享模式叫low-latence mode,低延时,适用于通信程序;
d.core audio api同时支持 pcm和非pcm流格式;然而,audio engine只可以配置PCM流,独占模式流可以采用非pcm格式;
音频引擎(audio engine)
audio engine运行在它自己的保护线程,它与程序运行的线程相分离;为了支持共享模式流,Windows audio service分配一个跨进程的endpoint buffer,应用程序和音频引擎都可以使用的;作为独占模式,endpoint buffer 住在可以被程序和音频硬件访问的内存块;
音频服务(audio service)
windows audio service是用于实现windows音频策略的模块,音频策略是用于在多个共享和竞争并存(使用相同的audio hardware)的程序中分配策略;windows audio service通过设置引擎的控制参数实现音频策略,其使命包括:
a.保持音频设备的音轨,这个音轨用户从系统中增加或移除
b.监控在系统中分配给音频设备的任务
c.管理各种缠上相似音频内容层级的任务组的音频流。(控制台,多媒体和通信)
d.为了许多种类中的每个音频内容控制混合输出流的音量等级
e.为音频流通知音频引擎处理在数据通道里的元素。
上图中,终端设备是一个插入音频适配器的扬声器,客户端程序向endpoint buffer写入音频数据,audio engine处理从buffer到endpoint device的传输细节;该图只展示了渲染流, 同样也支持捕获流,在共享模式下,多个客户端可以从音频硬件设备共享捕获流,在独占模式下,一个程序拥有设备捕获流的独占权限;
本文参考文档:http://msdn.microsoft.com/en-us/library/dd370802(v=vs.85).aspx
Core Audio(二)的更多相关文章
- 使用Core Audio实现VoIP通用音频模块
最近一直在做iOS音频技术相关的项目,由于单项直播SDK,互动直播SDK(iOS/Mac),短视频SDK,都会用到音频技术,因此在这里收集三个SDK的音频技术需求,开发一个通用的音频模块用于三个SDK ...
- Core Audio(一)
Core Audio APIs core audio apis是vista之后引入的,不使用与之前的windows版本:core audio apis提供访问endpoint devices,比如耳机 ...
- Core Audio 在Vista/Win7上实现
应用范围:Vista / win7, 不支持XP 1. 关于Windows Core Auido APIs 在Windowss Vista及Windows 7操作系统下,微软为应用程序提供了一套新的音 ...
- 小白开学Asp.Net Core《二》(补)
小白开学Asp.Net Core<二>(补) ——数据仓储层(Repositroy).服务层(Service) -------------------------------------- ...
- 小白开学Asp.Net Core《二》
小白开学Asp.Net Core<二> ——数据仓储层(Repositroy) 一.历史现象 在后端开发中,数据库操作是最频繁的,每一个开发人员都会接触,甚至不少开发人员每天的工作就是与数 ...
- 使用 Windows Core Audio APs 进行 Loopback Recording 并生成 WAV 文件
参考文档 COM Coding Practices Audio File Format Specifications Core Audio APIs Loopback Recording #inclu ...
- .net core 生成二维码
其实生成二维码的组件有很多种,如:QrcodeNet,ZKWeb.Fork.QRCoder,QRCoder等 我选QRCoder,是因为小而易用.支持大并发生成请求.不依赖任何库和网络服务. 既然是. ...
- spark core (二)
一.Spark-Shell交互式工具 1.Spark-Shell交互式工具 Spark-Shell提供了一种学习API的简单方式, 以及一个能够交互式分析数据的强大工具. 在Scala语言环境下或Py ...
- Asp.Net Core 生成二维码(NuGet使用QRCoder)
前言 功能:调用web api 接口 1.获取 jpeg 格式的二维码 2.获取中间带有logo 的二维码 3. 下载 jpeg,svg 格式的二维码 需要的NuGet 包: > QRCoder ...
随机推荐
- mvc 项目下 webservice 程序无法运行
错误描述: 可以出现调用HelloWorld的界面 点击调用按钮报无法找到该资源 错误分析: 把webservice当成controller了. 解决: global中 添加 routes.Igno ...
- SeekBar 圆角问题
用图片做背景色,最后处理成.9.png的.用普通png图片做背景,则两边会有圆角出现,原因是图片不适合SeekBar尺寸,因而被拉伸或压缩,从而产生圆角. <?xml version=" ...
- Java 内存区域和GC机制分析
目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...
- 3个div 宽度移入移出时变化
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- laravel之缓存配置文件
清除之前配置文件缓存,并生成新的配置文件缓存, get bash: php artisan config:cache 如下图,以上命令会将config文件夹下所有的文件内容缓存到bootstrap/c ...
- webpack 的简单使用
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Helvetica Neue"; color: #323333 } p. ...
- .NET使用Com组件的一点点教训笔记~
中控IFACE系列的产品,二次开发包 zkemkeeper.dll 在system32 ,SySWoW64都注册了,就是他妈的用不了. 最后,在 system32 ,SySWoW64 注册了,然后把需 ...
- colorbox 自适应 高度
$(".example3").colorbox({ inline: true, scrolling: false , onComplete: ...
- 如何去掉Eclipse里面自动追加的一些注释!!!内详
比如我创建一个类,勾选了自动生成main函数.他就来一个// TODO Auto-generated method stub比如我输入"try"然后自动补完try catch bl ...
- Logstash 安装与配置
一.Logstash 描述 简单而又强大的数据抽取与处理工具,相比于flums一整本书的描述强大而又好用. 还记得我13年用python写了一个数据抽取.校验工具,设计思路也同样是拆解处理过程模板,然 ...