http://msdn.microsoft.com/en-us/library/dd370784(v=vs.85).aspx文章翻译

译文转载自http://www.cppblog.com/shenhuafeng/archive/2006/12/12/16323.html

Core Audio APIS :

Vista 里面,一组新的用户态的音频组件提供给应用程序来改善应用程序操作音频的能力,

包括以下的一些方面:

低延时,几乎无故障的音频流。

提高可靠性 ( 很多音频函数从核心态移到了用户态 )

提高了安全性 (在安全的,低优先级别的线程处理被保护的音频内容)

分配了特定的系统级别的规则 (console, multimedia, communications) 给单独的音频设备。

用户可以直接操作,相应 endpoint 设备的软件抽象 ( 如:扩音器,耳麦及麦克风 ) 以下的高层 API 是以 Core Audio APIs 来工作的。

DirectSound

DirectMusic

Windows multimedia waveXxx and mixerXxx functions

Media Foundation

Streaming Audio Renderer (SAR)

绝大多数的音频应用程序与以上的高层次的 API 交互而不是直接操作底层的 Core Audio API 。例如以下一些应用可能用到高等级的 API :

媒体播放器

DVD 播放器

游戏

商用软件

通常这些应用用到 DirectSound 和媒体的底层函数。

通常的应用不需要直接用到 Core Audio API ,例如 Core Audio API 中的 Audio streams 需要使用一个音频设备的原始数据格式。然而,一些第三方的软件开发人员开发以下的产品时,需要用到这些核心的 API :

专业的音频应用程序 (PRO AUDIO)

实时通信 (RTC) 应用程序

第三方音频 API

一个 PRO AUDIO 和 RTC 应用程序可能需要直接用底层 Core Audio API 访问音频硬件来达到最小延时的效果。一个第三方的音频 API 需要直接访问 Core Audio API 来实现高层的 API 没有提供的功能。

Core Audio API 包括:

Multimedia Device (MMDevice) API :用这些 API 来枚举系统中的音频设备。

Windows Audio Session API (WASAPI) :用这些 API 来创建和管理来自音频设备音频流。

DeviceTopology API :用这些 API 来直接访问声音适配器中的硬件数据通路的拓扑特性(如音量控制,复用器等)

EndpointVolume API :用这些 API 直接访问音频设备的声音控制。这些 API 通常是给那些以独占模式管理音频流的应用程序。

这些 API 提供对于设备的抽象概念,这些概念被描述成为 Audio Endpoint Device 。每个 API 包含很多 COM 接口。由于音频需要低延时和精确的同步,所 MMDevice, WASAPI, DeviceTopology, 和 EndpointVolume APIs 不依赖于 .NET 框架。

除了 Vista 之外其他的操作系统都不支持 Core Audio API 。包括: Microsoft Windows Server 2003, Windows XP, Windows ME, Windows 2000, 和 Windows 98 。

Vista 中的音频控制的角色概念:

假如系统中有多个音频设备,那么一个设备可能用户是用来播放电影的,另一个可能是用来玩游戏的。这样 Vista 中就引入了角色的概念。

ERole 常量

设备角色

渲染举例

捕获举例

eConsole

与计算机交互

游戏和系统的通告声音

语音命令

eCommunications

与他人的声音交流

聊天和 VOIP

eMultimedia

播放或者录制电影和音乐

电影和音乐

实时的声音录制

Vista 中的音量控制被分成 4 种级别:

IAudioStream 接口提供 session 每个流的音量控制。

methods in the IAudioStreamVolume interface.

IChannelAudioVolume 接口提供 session 中每个通道的音量控制。

ISimpleAudioVolume 接口控制每一个 Session 的主音量。

假如需要更改设备的音量大小,则需要操作 IAudioEndpointVolume 接口。

开发举例: Vista 中控制系统音量

l         初始化 COM :

CoInitializeEx(NULL, COINIT_MULTITHREADED)

l         获取 IMMDeviceEnumerator 设备指针:

CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,

CLSCTX_ALL, __uuidof(IMMDeviceEnumerator),

(void**)&m_pEnumerator)

l         获取 IMMDevice 指针,这是是所有 MM 设备 — 多媒体设备的根

n         其中第一个参数是指明设备的用途

n         第二个参数指明设备角色

m_pEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &m_pDeviceOut)

l         获取 IAudioEndpointVolume 指针:(我们需要控制系统音量所对应的对象)

m_pDeviceOut->Activate(__uuidof(IAudioEndpointVolume),CLSCTX_ALL,NULL,(void**)&m_AudioEndpointVolume)

l         根据需要调用该对象的 API ,进行操作。

Core Audio API相关推荐

  1. Windows Core Audio APIs(一)介绍

    文章目录 Windows Core Audio APIs(一)介绍 Core Audio 架构介绍 Core Audio 架构图 音频高级API Core Audio APIs 共享模式和独占模式 音 ...

  2. ASP.NET Core环境Web Audio API+SingalR+微软语音服务实现web实时语音识别

    处于项目需要,我研究了一下web端的语音识别实现.目前市场上语音服务已经非常成熟了,国内的科大讯飞或是国外的微软在这块都可以提供足够优质的服务,对于我们工程应用来说只需要花钱调用接口就行了,难点在于整 ...

  3. Windows下Core Audio APIs的使用简介

    文|网易云信资深PC端开发工程师 Windows Vista 之后的系统中,音频系统相比之前的系统有很大的变化,产生了一套新的底层 API 即 Core Audio APIs . 该低层 API 为高 ...

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

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

  5. 【实战分享】使用Core Audio实现VoIP通用音频模块

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

  6. Core Audio音频基础概述

    Core Audio Core Audio提供了数字音频服务为iOS与OS X, 它提供了一系列框架去处理音频. Core Audio中包含我们最常用的Audio Toolbox与Audio Unit ...

  7. Windows Core Audio 音频开发技术指南

    在音视频通信处理流程中,音频方面最基本的无外乎就是音频的采集和播放.windows 平台下,有很多音频采集播放的方法.作为一个 windows 端音频应用程序开发人员,经常会被各种可用的API淹没,比 ...

  8. 如何使用Web Audio API听到“ Yanny”和“ Laurel”的声音

    by _haochuan 通过_haochuan 如何使用Web Audio API听到" Yanny"和" Laurel"的声音 (How you can h ...

  9. 如何测试ASP.NET Core Web API

    在本文中,我们将研究如何测试你的ASP .NET Core 2.0 Web API解决方案.我们将了解使用单元测试进行内部测试,使用全新的ASP .NET Core的集成测试框架来进行外部测试. 本文 ...

最新文章

  1. 互联网10年,激战如梦
  2. 常考数据结构与算法:两个链表生成相加链表
  3. 详细介绍React模态框组件react-modal
  4. 【深度学习的数学】绘制2×3×1层带sigmoid激活函数的神经网络感知机输出函数的三维图像(神经网络参数使用正态分布随机数)
  5. Python编程专属骚技巧5
  6. CCNA初认识——链路捆绑命令
  7. c语言绑定,C++实现动态绑定代码分享
  8. PIX防火墙security context配置手册(虚拟防火墙技术)
  9. 计算机系统验证具体的做法,计算机化验证的再验证周期需要定吗?
  10. 32bit还是64bit
  11. [ Front-end ] Iframe 跨域双向通信
  12. 2021认证杯(小美赛)思路分析
  13. i2c-tools使用及调试
  14. caxa 拉伸命令的使用(一次拉伸很多线)
  15. 网易云音乐实时数仓2.0进阶之路
  16. 鹏业安装三维算量软件——批量修改工程量
  17. 坚持平凡 创造非凡
  18. A股十大股东持股数据查询网站的数据库设计
  19. mybatis倒叙排版
  20. AC220V电压检测电路,一个光耦搞定

热门文章

  1. linux命令之删除
  2. 测试Bitmap和Marshal.Copy
  3. 利用requests做八字排盘的爬虫
  4. java 多态面试题_java多态面试题
  5. C语言 青蛙过河问题
  6. Android ListView异步加载数据库图片
  7. 电磁轨道炮设计-基于模型的系统工程(20190819更新)
  8. Python + Go-cqhttp + Pyqt5 —— 搭建QQ机器人
  9. Python教程:itertools模块
  10. All - 博文总纲