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 ...
随机推荐
- Postgresql死锁处理
今天遇到Postgresql的一个问题,部分表记录的update一直无效报错,初步判断为锁表,赶紧进行解决. 1. 查询死锁进程列表 select * from pg_stat_activity wh ...
- centos7安装apue.3e时出错处理
错误代码如下: /tmp/ccb9gvom.o: In function `thr_fn': barrier.c:(.text+0x6e): undefined reference to `heaps ...
- Light OJ 1032 - Fast Bit Calculations(数学)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1032 题目大意:一个十进制数变化为二进制,那么对于这个数,如果连着两个二进制位 ...
- ios 按钮点击无反应
今天项目遇到有个UIButton无法点击,弄了半天,总结出以下几个结论 1.如果一个UIButton的frame超出父视图的frame,UIButton还是可以显现的,但响应不了点击事件了,当开发中, ...
- Noip2016提高组 组合数问题problem
Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...
- 【私人定制jackson】定制jackson的自定义序列化(null值的处理)
最近用springMVC做服务端的http+json的接口,出现一个不是特别容易解决的问题: 在对List类型的值进行处理时,有一部分服务是有做一些逻辑判断的,在逻辑判断不通过的时候会返回一个null ...
- js替换选中的文字
替换html中选中的文字 function replaceSelection() { if (window.getSelection) { var selecter = window.getSelec ...
- swoole 使用 1
在很长的一段时间里,我不太看好swoole,发现它的文档太少,社区也不够活跃等,但是最近在学习 Hprose时,发现swoole在rpc方面做得更加完善,于是决定看看. 在简单的使用swoole扩展后 ...
- MySQL-Front 建表引发的一点小思考(数据表格模版)
我们建表的时候,有一些字段总是会常用到的.也就是每一张表都会有这些字段. 我用mysql有一点时间了,今天(2016-02-27 21:53:38)在用mysql-front建表的时候,感觉有点点不太 ...
- PHP-redis中文文档介绍(转自http://www.jb51.net/article/33887.htm)
Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号t ...