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 ...
随机推荐
- 深受C/C 程序员欢迎的11款IDE
几十年过去了,C和C++作为主要的高级的程序设计语言,在全球范围内仍然广受欢迎,并牢牢占据着TIOBE编程语言排行榜前5名,应用程序和系统的开发离不开这两门语言,现在我们来总结一下近些年来,深受C/C ...
- spring web.xml 难点配置总结
web.xml web.xml是所有web项目的根源,没有它,任何web项目都启动不了,所以有必要了解相关的配置. ContextLoderListener,ContextLoaderServlet, ...
- Git学习(三)——暂存区、远程仓库、增删改管理
一.工作区和暂存区 工作区(Working Directory) 就是在你的电脑里能看到的目录 版本库(Repository) 工作区中的一个隐藏目录.git,这个不算工作区,而是Git版本库.Git ...
- SQLSERVER进程CPU使用率100%
解决SQLSERVER2008 CPU使用率99%: 1.dbcc checkdb 重建索引 2.檢查有沒有死鎖 -- sp_lock SELECT request_session_id spid , ...
- 获取本机内存使用信息、DataTable占用内存空间
相当于windows系统中的任务管理器,功能是通过系统的API实现的本机的监视,代码如下 using System;using System.Collections.Generic;using Sys ...
- NSArray转json字符串
func arrayToJson(arr:NSArray) -> String { let jsonData: NSData = try! NSJSONSerialization.dataWit ...
- java.lang.OutOfMemoryError: Java heap space的解决方法
windows->preferences->Java->Installed JRES->edit->Default VM Arguments添加-Xms256m -Xmx ...
- [转] Oracle sql 查询突然变慢 -- 案例分析
转自:http://jingyan.baidu.com/article/8275fc868ce57946a03cf692.html 一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下 ...
- lua闭合函数
function count( ... ) return function( ... ) i = i+ return i end end local func = count(...) print(f ...
- sublime插件 cssComb实现css自动排序及格式化
cssComb是一个实现css代码自动排序,当然顺便也实现了代码的格式化 安装: 首先需要打开sublime搜索安装csscomb插件(前提是已经安装了sublime的package control) ...