常见音频API简介
9 l, Q: p3 e+ r5 e3 O 有了高质量的音频文件,那么是否就能得到高质量的数字音频输出呢?不一定。子弹再好也需要枪,音频的输出途经需要得到重视。 , y: D8 e% G. i9 w$ p
再好的车也要好路才能跑得快 在计算机系统中,如果需要输出音频,就要用特定的方法去驱动Codec、DAC等音频芯片。在调动音频芯片的过程中,需要用到一些特殊的应用程序编程接口,也就是音频API。使用音频API,音频软件如播放器等就可以直接针对API设计输出程序,而不必针对不同的芯片使用不同的指令。音频API可以理解为,声音在输出过程中需要走过的路。路的质量,影响到声音的送达。 音频API属于声音的输出规范,而各个音频厂商都深谙“控制标准的人就控制了一切”这一套。于是,这些厂商们都针对其旗下的产品开发了属于自己的API。不过,这些API主要用途是实现不同的音效,如游戏中的3D环境音效等,而非播放音乐,所以如果安装了独立声卡,那么选择API就显得尤为重要。 下面是一些常见的音频API。 MME MME是最常见的Windows音频API,全称为MutiMedia Extensions,即多媒体扩展技术。它历史悠久,兼容性好,市面上基本所有设备都能良好支持。它属于高级的API,并不直接和硬件交流,需要通过层层接口才能访问音频硬件,这也为它带来了高延迟。虽说这种延迟在回放音频的时候并不会造成音质的劣化,但对音频的处理和录制却有着较大的负面影响。 DirectX Sound
& k2 ^0 v# d0 {/ t. k# `3 e5 A 微软的DirectX大家都一定很熟悉,玩游戏之前都需要先安装一下。实际上,DirectX也包含了音频的部分,主要为游戏提供音频接口,减少游戏中画音不同步的现象。DirectX Sound侧重于音频输出,能直接访问硬件,响应速度得到了极大的提升。 9 [, l. w3 m1 l# L" J8 A
DirectX API包括音频部分 微软在Vista系统之后对DirectX Sound进行了大改,砍掉了DirectX Sound的3D部分,这一举动直接让EAX等依赖于DirectX Sound的3D环境音效欲哭无泪大佬你动作之前先张声一下啊,这不是砸我饭碗么! WDM WDM是Windows Driver Module的缩写,拥有低延迟、支持多个音频流等特性。MME延迟高,而Direct Sound并非为专业音频设计,WDM的出现很好地弥补了这些缺点。WDM直接和音频芯片的驱动程序交流,减少了大量中间环节,把延迟降低到一个新的层次,目前不少专业音频软件都提供了WDM接口。 UAA
h7 `/ r, K d p UAA是最新的Windows音频架构,在Vista推出之时面世。UAA全称为Universal Audio Architecture,即通用音频架构,其中用于管理音频对话的API为WASAPI(Windows Audio Session API)。WASAPI可以对每组音频对话单独处理,这显得意义重大。
4 x4 M; d0 c/ y9 Y微软在Vista后开始使用UAA音频架构 举个例子,使用WASAPI的时候,如果正在用44.1kHz的采样率播放音乐,但此时音频采样率为48kHz的QQ又响了,就不必以混响解决,不会产生采样率转换(SRC)劣化音质的情况。事实上,WASAPI这个音频API是很多音乐发烧友的标配。 Kernel Streaming 就和其名字一样,这个API可以使音频直接访问底层数据,绕过系统的各种接口。它能带给音频极低的延迟。不过Kernel Streaming也有其局限性,首先使用这个API会直接霸占音频硬件,你听歌的时候就没法听到QQ响;其次这个API美元音频输入功能,也没法使用麦克风。 ASIO
, Z, ~1 o: A6 G; F* q ASIO是由德国Steinberg公司提供的音频接口,主要应用于专业领域。它的特色在于延迟极地,Windows 自有的 MME 驱动程式其延迟时间为 200~500 毫秒,DirectSound 为 50~100 毫秒,使用ASIO却能把延迟降低至10毫秒以下,十分惊人。
0 h8 W. w; h2 ~" v V为专业领域而生的ASIO 低延迟对声音录制和后期制作有着重大的意义,但是在声音回放上的效果却有争议。有的发烧友认为,ASIO的低延迟可以极大程度地减少音频Jitter(抖动,这个会在后面提到),从而提高音质;但有另一种说法称ASIO对软硬件的环境要求都比较苛刻,如果音频驱动编写水平一般,很容易产生爆音、声音生冷等问题。 其他常见的音频API还有EAX、OpenAL等,但是这些API一般是在游戏等应用程序中的音效中使用,很少在聆听音乐的时候用到,就略过不提了。 劣化数字音频的因素:Jitter和SRC 实际上,在数字音频输出的时候很容易受到一些消极因素影响,使得音频劣化,其中Jitter和SRC是两种比较常见的劣化因子。 Jitter
& P7 N5 h9 `9 t9 W$ d Jitter的意思是抖动,在数字音频系统中可以理解为数字音频信号传输所产生的时差。我们知道,在数字音频系统中,声音以“0101”的数字传输,并有多种手段使误码的可能性降到极地基本可以看成不会误码。这意味着通过数字传输,音频信号不会有任何损耗,但是否能说数字音频系统能完美地输出音频呢?
: L: e( a8 u4 oJitter在很多领域都很常见 实际上,还会有其他因素左右着数字音频信号的传输质量,Jitter就是其中一种。在前文中提过,数字音频描绘的声波可以用纵横坐标轴上的采样点来表示,横坐标对应时间。在数字音频的传输过程中,固然我们可以保证数字音频信号没有损耗,但是却很难保证这些信号在预定的正确时间到达终点。由于声音是一种“流”,时间的误差会让声音产生畸变,从而劣化音频。 产生Jittter的因素很多,抛去信号线、时钟芯片等硬件因素,系统中的驱动程序和音频API也会影响Jitter的多寡。前面提到不少发烧友都选择不适合回放音频的ASIO API来听音乐,为的就是减少Jitter。 SRC ' ], c9 z! h+ e# s0 e; ~% g6 V
SRC的全称为“Sample Rate Converter”,即采样率转换。采样率是数字音频一个十分重要的参数,而不同定位的音频则有着不同的采样率如CD的采样率一般是44.1kHz,普通视频中的音轨采样率为48kHz,高清音频的采样率能达到192kHz以上。有时候由于种种原因,无法以原本的采样率播放音频,如44.1kHz的CD不得不使用48kHz输出,这个过程就产生了SRC。
% m( Y9 E; u9 s! `SRC示意图 非整数倍的SRC过程会对声音质量产生极大的负面影响。把44.1kHz转到88.2kHz播放,这没什么;把88.2kHz转到44.1kHz也没什么大问题,总不会比44.1kHz差。但如果把44.1kHz转到48kHz,问题就来了。 数字音频使用非连续的点来描绘声音曲线,如果是整数倍地转换,那么参考原样删减增加这些点变得很容易。但是如果是非整数倍地转换,事情就一下子变得难办起来了整数倍转换容易保持曲线的原样,非整数倍由于新SRC后的新采样点和原采样点不重合,所以会导致曲线畸变。非整数倍的SRC需要比较好的算法来保证音质,但好算法实在是凤毛麟角。 SRC在音频回放的时候经常出现,如在最初AC"97的音频规范中,为了节约成本,就约定俗成采用48kHz输出,44.1kHz的CD会被SRC,这也造成了电脑音质不好的口碑。不过现在已经很少机器使用AC"97规范了,在新一代的HD Audio规范中考虑到了SRC的问题,音质已经得到了很大提升。
& G$ W2 c& V1 j1 d+ ~/ [ Android的音频输出值得另外提出来说一下。在Android 2.2及之前的版本,Android继承了Linux的ALSA(Advanced Linux Sound Architecture)音频架构,Google在ALSA中增加了一个AudioFinger模块,其中包含了AudioResampler(声音重采样器)。这使得Android的音频输出固定在了44.1kHz的采样率上。虽然Android在后面的版本去掉了ALSA库,但是SRC的问题依然存在。
; n* n! T' `' A8 cAndroid的音频系统存在SRC问题 用Android播放音乐,没问题,大家都是44.1kHz;但是如果用来看视频,很抱歉,44.1kHz和48kHz格格不入,声音的劣化无法避免。希望Google在将来能对Android的音频架构进一步改良,解决SRC的问题。 结语 数字音频涉及系统的环节很多,本文所提到的不过是作为整套音频系统基础的音源及其数字输出部分。也许有的朋友会说,我不过是想要随便听听,喇叭能出声就行,何必追求这么多?何况我又不是金耳朵。 的确如此,很多人都对音频不够重视。即使去组装一台万元级别的电脑,恐怕也没什么人会把独立声卡考虑在内。但是,既然人们会花重金购买高端显卡以获取绚丽的光影,那么洗涤心灵的旋律也理应得到同样的重视。
- C& F& l) m9 |; g) `5 ?1 b 另外,并没有什么科学证据能证明“金耳朵”的存在。资深发烧友和普通人的最大差距不在于听力,而在于听音经验以及音频知识储备量。好的音频系统,带给人的感官提升是明显的即使你没有听音经验,也能感受得到。
x$ O7 ?+ Y) ^' g4 f金耳朵意味着更好的听音经验知识而非听力 音频系统的组件的确比较复杂,在硬件器材上还需要投入不少的金钱。但是调教好数字音源却不需要什么成本,就能带来音质的提升。如果不满于快餐一样的在线音乐,那就不妨按照本文所说的,尝试一下无损音频,并配置好音频API吧,祝大家听音愉快。 |