【混音基础教程】第一集:认识音频层 (上) 什么是音频API 操作系统如何发声 文稿
Q-Video
2020年03月05日 22:23

各位观众老爷们大家好,这里是你们的新人Up主MOJANG

欢迎来到全新的混音教程 系列视频,在这个系列中,我将带你走进Q-Audio的混音日常

在本期视频中,我们将了解

Windows是如何输出音频的

目前有哪些输出音频的方式

以及这些API的历史与好坏

首先我们先放出结论

ASIO是最好的,其次是WDM与WASAPI的独占模式

然后是一个已经弃用的Kernel Streaming

后面四个其实都大同小异,最差的是MME

让我们排除一些日常中见不到的和已经停止支持的API,得到如下的简化排序

所以你们就按照这个来选,原则就是有ASIO就用,但是一定记住,ASIO4ALL不是传统意义上的ASIO,这个后面讲

在深入了解音频层之前,我们需要知道操作系统如何控制你的耳机和音响等设备

这里,我们有一个一般情况下简化版的流程图

你的音频播放软件向系统的高级API发出指令,然后高级API处理一部分内容后,根据实际情况找到底层API,然后底层API再处理各种各样的东西,比如你的杜比音效,如果有多个播放器同时播放声音,高级API可能还会重采样所有的音轨到同样的采样率上,再交给Windows内核,内核再负责把处理好的信号发送给你的硬件,这样,你就听到了声音

而其中提到的高级API中,最著名的就是MME,全称Multimedia Extensions

这个API的年龄可能比在座的各位都还要大,市面上所有的音频设备都能很好的支持它,它也是Windows对32桌面程序的默认音频输出方式,到现在也是

众所周知,古董问题都多,它延迟至少高达120毫秒,这是由于它有着很大的缓冲区,那你就会说了,缓冲区可以调小啊,是的,只要你觉得断断续续的声音很好听的话

高级API的特点就是不直接与内核,硬件交流,而是要靠底层API再转一遍,这一般是由于对应的底层API无法实现某些功能,所以才需要一个高级API来完成底层无法做到的工作

就MME而言,它的底层API是WaveOut与WaveIn,是微软最早提出的音频流输出方式,缺点很明显,没有任何硬件加速,所有的混音操作都是软件实现的,所以一旦遇到需要重采样的情况,音质和动态范围就会急剧下降,所以,能不用MME就别用,但这玩意也不是一无是处,毕竟兼容性好

在说完古董级高级API后,我们再来了解一个古董级底层API

DirectSound,简称DS,我相信在Windows上用过iTunes的都见过这玩意,到现在都还有,Apple把它翻译成 直接声音

它是Windows95时代的产物,因为在当时,游戏厂商一片抱怨,无论是视频还是音频的API都实在是太慢了,所以微软就索性推出了一套全新的音视频处理API,名叫Direct X,目前已经更新到12了

那有观众就要问了,既然今天还在更新,为什么说这是古董呢

因为DirectSound只是Direct X中的一个部件,且有2D与3D之分

和MME一样,几乎所有声卡都支持DirectSound,但它有着最小60毫秒的延迟,还可以直接访问硬件,对游戏来说是非常大的优化,而且还原生支持各种效果器

但是,在Windows Vista发布的时候,微软大刀部直接把DirectSound 3D需要的硬件层支持给砍掉了,关键问题是只有3D才有硬件加速,2D就是个普通的输出接口而已,直接导致那时候号称所谓3D加速的声卡,都无一例外的沦为了亮机卡

从那时候开始,DirectSound就渐渐淡出历史舞台

现在,古董高级API和古董底层API都有了,最后我们再来讲一个只存在了一个版本的短命API来结束上集视频

Kernel Streaming

名字很直接,内核流,这是随Windows XP推出的一种底层API

它可以绕开Kmixer,避免了重采样和各种中间过程,直接与声卡通信,并且对音频数据做内核级处理,达到了尽可能的保真

但,很明显,使用这个API会直接霸占对应的音频硬件,导致听歌的时候其他软件没法出声,这就叫独占模式,WDM和WASAPI都有这种独占模式

又是微软大刀部,Windows Vista时期直接砍掉了Kmixer和依赖DMA的音频IO,所以这个API还没捂热就已经凉了,前面两个最起码现在还能用,这个就直接废了

这期视频我们回顾了历史,而下期视频我们将要了解当下最流行的几种高质量API

最后,求一波三连加关注,我们下个视频再见