

各位观众老爷们大家好,这里是你们的新人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
最后,求一波三连加关注,我们下个视频再见
