用户模式音频组件

在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(二)的更多相关文章

  1. 使用Core Audio实现VoIP通用音频模块

    最近一直在做iOS音频技术相关的项目,由于单项直播SDK,互动直播SDK(iOS/Mac),短视频SDK,都会用到音频技术,因此在这里收集三个SDK的音频技术需求,开发一个通用的音频模块用于三个SDK ...

  2. Core Audio(一)

    Core Audio APIs core audio apis是vista之后引入的,不使用与之前的windows版本:core audio apis提供访问endpoint devices,比如耳机 ...

  3. Core Audio 在Vista/Win7上实现

    应用范围:Vista / win7, 不支持XP 1. 关于Windows Core Auido APIs 在Windowss Vista及Windows 7操作系统下,微软为应用程序提供了一套新的音 ...

  4. 小白开学Asp.Net Core《二》(补)

    小白开学Asp.Net Core<二>(补) ——数据仓储层(Repositroy).服务层(Service) -------------------------------------- ...

  5. 小白开学Asp.Net Core《二》

    小白开学Asp.Net Core<二> ——数据仓储层(Repositroy) 一.历史现象 在后端开发中,数据库操作是最频繁的,每一个开发人员都会接触,甚至不少开发人员每天的工作就是与数 ...

  6. 使用 Windows Core Audio APs 进行 Loopback Recording 并生成 WAV 文件

    参考文档 COM Coding Practices Audio File Format Specifications Core Audio APIs Loopback Recording #inclu ...

  7. .net core 生成二维码

    其实生成二维码的组件有很多种,如:QrcodeNet,ZKWeb.Fork.QRCoder,QRCoder等 我选QRCoder,是因为小而易用.支持大并发生成请求.不依赖任何库和网络服务. 既然是. ...

  8. spark core (二)

    一.Spark-Shell交互式工具 1.Spark-Shell交互式工具 Spark-Shell提供了一种学习API的简单方式, 以及一个能够交互式分析数据的强大工具. 在Scala语言环境下或Py ...

  9. Asp.Net Core 生成二维码(NuGet使用QRCoder)

    前言 功能:调用web api 接口 1.获取 jpeg 格式的二维码 2.获取中间带有logo 的二维码 3. 下载 jpeg,svg 格式的二维码 需要的NuGet 包: > QRCoder ...

随机推荐

  1. JSP开发模式2(计算器)

    CalculatorBean———————————————————————————————————————————— public class CalculatorBean {    private ...

  2. linux下编译bib、tex生成pdf文件

    实验: 在linux环境下,编译(英文)*.bib和*.tex文件,生成pdf文件. 环境: fedora 20(uname -a : Linux localhost.localdomain 3.19 ...

  3. nginx下开启pathinfo模式

    第一种方式是通过重写url来实现pathinfo模式: location / { if (!-e $request_filename){ rewrite ^/(.*)$ /index.php?s=/$ ...

  4. android:digits属性

    android:digits属性限定输入的字符 可以用于密码输入等输入框 ex: 个人意见: 但是这样的话不符合要求的字符直接输入不上去,可能会给用户造成困惑,最好给出提示或用其他工具. 本文欢迎转载 ...

  5. jQuery系列之操作select标签

    每次看完东西基本就忘了,现在决定写一下博客来记录,不知道效果咋样. 一.jQuery操作选择器 1.基本选择器 关于基本选择器,我就不用太多说了,包括了ID.类.标签等选择器. 2.层次选择器 我觉得 ...

  6. python smtplib发送邮件遇到的认证问题

    python的smtplib模块主要是用来发送邮件的,使用起来比较方便. 使用程序发送邮件只需要写以下几行代码就OK了: #!/usr/bin/env python import smtplib s ...

  7. whoami与who am i

    whoami显示的是当前“操作用户”的用户名,而who am i显示的是“登录用户”的用户名. 若你使用root用户登录,中间su abc切换,whoami的结果是abc,who am i 的结果是r ...

  8. ASP.NET MVC3 Model验证总结

    ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的. 我们要做的只是给Model类的各属性加 ...

  9. 操作系统win2003 x64的,安装OFFICE2003后,DCOM服务找不到 WORD应用程序服务

    打开注册表,找到以下健值 HKEY_CLASSES_ROOT\AppID\{00020906-0000-0000-C000-000000000046} HKEY_CLASSES_ROOT\CLSID\ ...

  10. C1000k 新思路:用户态 TCP/IP 协议栈

    现在的服务器支撑上百万个并发 TCP 连接已经不是新闻(余锋2010年的演讲,ideawu 的 iComet 开源项目,WhatsApp 做到了 2.5M).实现 C1000k 的常规做法是调整内核参 ...