在音视频通信处理流程中,音频方面最基本的无外乎就是音频的采集和播放。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 音频开发技术指南相关推荐

  1. Windows上的音频采集技术

    在制作发布端的时候,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音,对于音频处理的技术,主要有如下几种: 采集麦克风输入 采集声卡输出 将音频数据送入声卡进行播放 对多路音频输入进行混音处理 ...

  2. Windows上的音频采集技术比对

    [转]Windows上的音频采集技术 转自http://blog.csdn.net/wxl1986622/article/details/44230149 前一段时间接到一个任务,需要采集到声卡的输出 ...

  3. Windows Core Audio APIs(一)介绍

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

  4. 《Core Data应用开发实践指南》一1.3 创建Grocery Dude项目

    本节书摘来自华章出版社<Core Data应用开发实践指南>一书中的第1章,第1.3节,作者 (美)Tim Roadley,更多章节内容可以访问云栖社区"华章计算机"公 ...

  5. 【VS开发】Windows上的音频采集技术

    前一段时间接到一个任务,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音. 之前一直没有研究过音频的相关技术,这次就顺便抽出一点时间去了解了一下Windows上采集音频的相关技术. 对于音频处 ...

  6. 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? .Net Web开发技术栈...

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先 ...

  7. Core Audio音频基础概述

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

  8. 【Audio音频开发】音频基础知识及PCM技术详解

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.概念 3. PCM介绍 4. PCM原理 5.PCM相关概念 5.1 ...

  9. Linux平台开发技术指南

    以下技术和工具是Linux平台下工作的基础,熟练掌握: C++ 工作语言,重要性不言而喻: 入门: <C++ Primer>http://book.douban.com/subject/1 ...

最新文章

  1. Spring Cloud Stream消费失败后的处理策略(一):自动重试
  2. mysql数据库搜索字符_在MySQL数据库中快速搜索字符串?
  3. storm安装笔记以及提交拓扑任务
  4. linux ftp 怎么验证,Linux编译安装vsftpd服务器(本地用户验证方式)
  5. UFLDL教程: Exercise:Learning color features with Sparse Autoencoders
  6. hbase+hive应用场景
  7. 苦逼了6年,我今天终于把老板开了!哼!
  8. css float属性
  9. java修改cdm_Java™ ORM框架CDM教程 增删改查(四)
  10. 使用SQL语句操作数据
  11. matlab qam调制函数,matlab实现16QAM调制解调
  12. 状态压缩dp(规律)
  13. python的pyc反编译
  14. SQL学习-数据库基础知识(1)
  15. 【聚客通scrm】-微信个人号sdk实现的微信云控方案
  16. 计算机维修难点,计算机组装与维修习重难点.doc
  17. 十月下旬腾讯,网易游戏,百度迅雷校园招聘笔试题集锦(第271-330题)
  18. unik的命令行-解释说明
  19. Vue3+TypeScript从入门到进阶(六)——TypeScript知识点——附沿途学习案例及项目实战代码
  20. 瑞吉外卖第五天(套餐的增删改和手机端登录功能的实现)

热门文章

  1. 【算法周】人以类聚咋个聚!K-means了解一下~(下篇)
  2. python字符串最后一次的索引_关于python:如何每3个索引切一个字符串?
  3. Nginx——Keepalived的原理与配置
  4. 中秋节快乐--祝诸佬们今后月来月靓
  5. js-cookie 关于js-cookie 什么是js-cookie js-cookie的使用
  6. 小鼠IV型胶原蛋白稀释原理
  7. EMC之地线干扰与抑制
  8. 10.BoxShadow 初级到高级特效
  9. iconfont矢量图的链接使用
  10. 1366 xth 的第 12 枚硬币