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)将特定的系统范围角色(控制台、多媒体和通信)分配给各个音频设备

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值