Windows Core Audio 音频开发技术指南
在音视频通信处理流程中,音频方面最基本的无外乎就是音频的采集和播放。windows 平台下,有很多音频采集播放的方法。作为一个 windows 端音频应用程序开发人员,经常会被各种可用的API淹没,比如 MME、DirectSound、WDM/KS 和 Core Audio。但是几乎所有做音视频通信的开发者都会选择 Core Audio 作为采集播放的底层 API。在本篇内容中我们将主要围绕 Core Audio,讲解它的优劣势,以及我们基于它来做 windows 音频采集播放的技术实践。
#1
Why Core Audio?
为什么选择 Core Audio?我们先来了解一下现在主流的一些 Windows APIs的优劣势。
1.1 Windows Multimedia Extensions (MME/WinMM)
MME是第一个适用于Windows的标准API。
优势:MME方法实现简单。
劣势:延时是一个重大的问题,动态,实时的音频(比如实时音频通话,游戏事件通知等)有点难以及时处理,一般最小时延能达到120ms。在实时音频场景中,任何比大脑认为应该发生的时间晚10毫秒的事情都被认为是不同步的。
1.2 DirectSound(DirectX Audio)
DirectX 是基于COM的多媒体API集合的总称,其中包括 DirectSound。
优势:
1)它可以非常接近硬件工作,极限最小延迟可到60毫秒左右,并支持更高质量的音频;
2)可通过简单的API使得与硬件交互变得切实可行;
3)为平台带来了可插拔的、基于软件的音频效果(DX 效果)和乐器(DXi Instruments)。
1.3 Windows Driver Model/Kernel Streaming (WDM/KS)
使用 WDM 后,MME 和 DirectSound 音频现在都通过称为内核音频混合器(通常称为 KMixer)的东西。KMixer 是一个内核模式组件,负责将所有系统音频混合在一起。但是 KMixer 也会引入了延迟,大概30毫秒,事实上,有时会更多。为了减少 KMixer 带来的时延,WDM/KS 的方案诞生了。
优势:可将延迟做到极低的状态,一般最小延迟可以到1毫秒~10毫秒,且在一定情况下可以使用非分页内存、直接硬件IRP和RT,独占声卡的所有资源。
劣势:
1)独占了声卡的所有资源,导致只能听到特定应用程序的声音。当多个程序开启时,是无法听到其他应用程序的声音的;
2)KS 也没有音频输入,即麦克风也是无法使用的。
注意:在 Vista 和 Windows7之后,KMixer 已经被弃用了,KS并不适用于 Vista 和 Windows7之后的版本。
1.4 Audio Stream Input Output(ASIO)
ASIO 最初是 Windows 的专业音频级驱动程序规范,由一家名叫 Steinberg 的德国公司所提出的。
优势:为应用程序提供直接从应用程序到声音硬件的高质量、低延迟的数据路径。对于可以支持 ASIO 的应用程序,可以完全避免所有处理Windows 音频堆栈的业务,将系统对音频流的响应时间降至最短。使用 ASIO 的情况下,缓冲器依照设定的不同可至10毫秒以下,也有因环境较佳而到1毫秒以下的情况产生。
劣势:如果您尝试使用的音频应用程序仅支持 ASIO,而您的声卡是廉价的、缺乏 ASIO 支持的,那么使用 ASIO 就是一个问题了。ASIO 的实际性能取决于制造商提供的驱动程序的质量。
1.5 Windows Core Audio
2007年,Vista 最终上架时,Windows Core Audio 也面世了。微软宣称,vista/7 已经开始弃用了 kmixer 和依赖 dma 的 audio IO。熟悉和喜爱的所有音频API都被洗牌,突然发现自己建立在这个新的用户模式API之上。这包括 DirectSound,此时它完全失去了对硬件加速音频的支持。
优势:
1)低延迟、故障恢复的音频流;
2)提高可靠性(许多音频功能已从内核模式转移到用户模式);
3)提高安全性(受保护的音频内容的处理在安全、低权限的过程中进行);
4)将特定的系统范围角色(控制台、多媒体和通信)分配给各个音频设备;
5)用户直接操作的音频端点设备(例如,扬声器、耳机和麦克风)的软件抽象。
Windows 采集播放中有着多种API,但
Windows Core Audio 音频开发技术指南相关推荐
- Windows上的音频采集技术
在制作发布端的时候,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音,对于音频处理的技术,主要有如下几种: 采集麦克风输入 采集声卡输出 将音频数据送入声卡进行播放 对多路音频输入进行混音处理 ...
- Windows上的音频采集技术比对
[转]Windows上的音频采集技术 转自http://blog.csdn.net/wxl1986622/article/details/44230149 前一段时间接到一个任务,需要采集到声卡的输出 ...
- Windows Core Audio APIs(一)介绍
文章目录 Windows Core Audio APIs(一)介绍 Core Audio 架构介绍 Core Audio 架构图 音频高级API Core Audio APIs 共享模式和独占模式 音 ...
- 《Core Data应用开发实践指南》一1.3 创建Grocery Dude项目
本节书摘来自华章出版社<Core Data应用开发实践指南>一书中的第1章,第1.3节,作者 (美)Tim Roadley,更多章节内容可以访问云栖社区"华章计算机"公 ...
- 【VS开发】Windows上的音频采集技术
前一段时间接到一个任务,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音. 之前一直没有研究过音频的相关技术,这次就顺便抽出一点时间去了解了一下Windows上采集音频的相关技术. 对于音频处 ...
- 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? .Net Web开发技术栈...
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先 ...
- Core Audio音频基础概述
Core Audio Core Audio提供了数字音频服务为iOS与OS X, 它提供了一系列框架去处理音频. Core Audio中包含我们最常用的Audio Toolbox与Audio Unit ...
- 【Audio音频开发】音频基础知识及PCM技术详解
个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.概念 3. PCM介绍 4. PCM原理 5.PCM相关概念 5.1 ...
- Linux平台开发技术指南
以下技术和工具是Linux平台下工作的基础,熟练掌握: C++ 工作语言,重要性不言而喻: 入门: <C++ Primer>http://book.douban.com/subject/1 ...
最新文章
- Spring Cloud Stream消费失败后的处理策略(一):自动重试
- mysql数据库搜索字符_在MySQL数据库中快速搜索字符串?
- storm安装笔记以及提交拓扑任务
- linux ftp 怎么验证,Linux编译安装vsftpd服务器(本地用户验证方式)
- UFLDL教程: Exercise:Learning color features with Sparse Autoencoders
- hbase+hive应用场景
- 苦逼了6年,我今天终于把老板开了!哼!
- css float属性
- java修改cdm_Java™ ORM框架CDM教程 增删改查(四)
- 使用SQL语句操作数据
- matlab qam调制函数,matlab实现16QAM调制解调
- 状态压缩dp(规律)
- python的pyc反编译
- SQL学习-数据库基础知识(1)
- 【聚客通scrm】-微信个人号sdk实现的微信云控方案
- 计算机维修难点,计算机组装与维修习重难点.doc
- 十月下旬腾讯,网易游戏,百度迅雷校园招聘笔试题集锦(第271-330题)
- unik的命令行-解释说明
- Vue3+TypeScript从入门到进阶(六)——TypeScript知识点——附沿途学习案例及项目实战代码
- 瑞吉外卖第五天(套餐的增删改和手机端登录功能的实现)