光电工程师社区

标题: 认识音频输出API [打印本页]

作者: suncon    时间: 2004-3-18 11:46
标题: 认识音频输出API
认识音频输出API

我们通常认为电脑的音频信号是通过声卡处理后再经音频传输线输出到音箱的,但有些媒体播放软件在设置音频输出方式时却有Wave out、DirectSound之类的选择,这是怎么回事﹖它们有什么不同?哪种方式更好呢?
通常应用程序要调用声卡进行播放或者录音时需要一个指令,不同类型的声卡做同一件事情,可能会有不同的指令或者不同的指令方法,为了统一调用的过程,于是出现了好几种类型的API(Application Programming Interface,应用程序接口)。有了API,程序设计者就可以不理会硬件,只管专心设计程序就行了,因为不管什么声卡,只要能够支持这种类型的API就可以用统一的指令去调用。

一、音频输出API种类
1.Wave out
Wave out标准的称呼应该是 Multimedia Extensions(MME,多媒体扩展),早在Windows 3.1时代就出现了,它在Win 9X和NT 4.0中已经非常完善了,Wave out可以在这些操作系统上获得最好的效果。不过,Wave out毕竟非常老旧了,它的局限很多:声音输出的延时较长,没有任何硬件加速功能,混音是靠软件来完成的,在CPU占用率很高的时候,甚至会发生声音不连续的现象。Win 2000/XP提供的Wave out输出的目的只是为了和旧的软硬件兼容,所以,在这些操作系统下的录音和播放软件中应该避免使用Wave out。

2.DirectSound
DirectSound是目前最常用的声音播放API。在Win2000/XP下,DirectSound远比Wave out优越,其占用的系统资源要少于Wave out,声音的延时也要小得多。DirectSound 支持混和多重音频流、独立的音量控制、硬件加速层及硬件仿真层,它与Windows的基层挂钩,能够使用声卡的各种加速功能。只要安装了适当的声卡驱动程序及最新的DirectX,DirectSound通常都可以工作得很好,否则,虽然表面选择了DirectSound,实际上使用的模仿模式,在性能上甚至比Wave out更差。DirectSound原本是为游戏而准备的,主要用于声音的回放,如果要进行录音,应该选择其他驱动。

3.ASIO
ASIO即Audio Stream Input Output(音频流输入输出),它是由Steinberg公司推出的,这是一套专业色彩很浓的音频输入输出API。ASIO可减少系统对音频流信号的延迟,增强声卡的处理能力。在ASIO以前的API,如Wave out,存在着约750毫秒的延时,这对音乐创作来说是无法忍受的,为此,Steinberg公司提出了被称为ASIO的标准规范,以便让自己的音乐创作软件Cubase VST更具吸引力。ASIO完全摆脱了Windows操作系统对硬件的集中控制,它能实现在音频处理软件与硬件之间进行多通道传输的同时,将系统对音频流的响应时间降至最低3ms。

4.WDM
WDM即Windows Driver Module(Windows驱动模型),是Microsoft力推的全新驱动程序模式,用于Win 98/Me/2000/XP系统中。WDM也可以算是一套API,通讯的对象是驱动程序而不是普通的应用程序,只要驱动支持WDM,就会增加不少功能,例如微软的软波表等。WDM驱动还能让以前不支持多音频流的声卡播放多个音频流。在输入输出方面,WDM要优于Wave out和DirectSound,现在主流的声卡都支持WDM。WDM让声卡的延时大大降低,某些时候甚至可以媲美ASIO,部分专业的音频编辑创作软件已经对WDM提供了支持。

5.E-WDM
Enhanced Windows Driver Model(增强WDM),是由一家韩国公司Egosys开发的API,这是一套非常强大的API。E-WDM使音频的延时减小到了1.5ms,优于专业声卡使用ASIO所达到的3ms。它使用了DirectWire技术,可以实现无损的数据流输入输出。拥有E-WDM驱动的设备不再需要AC3杜比解码器就可以回放DTS ES 6.1和7.1环绕声,以及Dolby 5.1环绕声。不过,这套API并没有公开,它主要在专业声卡中使用,民用级产品中目前只有半专业的Maya 44 Pro支持它。

了解了这些音频输出API,我们在播放和录音软件中遇到有关的设置就清楚得多了。对普通用户来说,Wave out、DirectSound是我们在播放音乐时经常会碰到的输出API,也有部分媒体播放软件试图提供ASIO支持,以实现更理想的播放效果。而WDM并不会出现在播放软件中,E-WDM更是极为少见。对于比较常见的三种API来说,Wave out拥有最好的兼容性;而DirectSound的延时要少于Wave out,约为500ms,它使用硬件加速功能,但在软硬件不兼容的时候,其效果甚至要低于Wave out,特别是使用老式的ISA声卡时;ASIO可以让延时低于40ms甚至更低,更加接近实时,这对监听来说非常有用,但它需要硬件的支持。

二、直接支持ASIO的声卡
ASIO一直都是专业声卡的专利,因为必须有声卡芯片的硬件支持ASIO才能够实现,而它的价格比较昂贵。对民用声卡来说,ASIO并不是必需的,所以很长时间以来,在民用声卡中我们见不到对ASIO的支持。

首款公开声称完全支持ASIO的民用声卡是创新SB Audigy,这款产品提供了高达24bit/96 kHz的声音品质,而且还全面支持ASIO。这样一来高档民用声卡跟专业声卡之间的距离就大大缩小了。此后的SB Audigy2、SB Audigy2 ZS也继承了前代产品对ASIO的支持。

VIA的Envy24及Envy24HT芯片也是完全支持ASIO的声卡芯片,Envy24系列的芯片音质非常出色,获得了众多专业声卡制造商的青睐。这类厂商也推出了不少基于该芯片的民用中高档及半专业的声卡,如比较有名的TerraTec DMX 6 Fire系列、AUDIOTRAK PRODIGY 7.1和MAYA 44/44 Pro。

实际上,创新早期的SB Live?也是能够支持ASIO的,只是该产品的驱动程序并不能实现ASIO,但在修改版驱动程序中是能够实现的(参见《电脑报》2004年第5期F9版)。另外,中低档声卡常用的CMI8738芯片也是具备ASIO的潜质的,只是因为驱动程序的原因而没有将它发挥出来。

三、通用ASIO驱动
为了给众多的中低档声卡及板载AC’97声卡增添ASIO功能,爱好者们开发出了几个通用的ASIO驱动程序,它们能让普通的声卡也获得部分ASIO性能。ASIO2KS(下载地址:http?//www.asio2ks.de/beta/asio2ks_betat.zip)和AxASIO(下载地址:http?//file.mydrivers.com/sound/ax-asio-b03.zip)是最常见的两个通用ASIO驱动程序。这两个驱动程序只能在Win 2000/XP中使用,其用法差不多。

将通用ASIO驱动程序解压到系统目录中的system32文件夹,然后打开控制面板,就可以看到控制面板中多了一个与ASIO相关的图标。
它们的使用并不复杂,以AxASIO为例。双击该图标,打开设置对话框,首先选择输出设备及输入设备(只有在多声卡情况下才需要选择),然后设置ASIO状态为“启用ASIO”,并设置声道数和延时时间。完成后点击“确定”即可。

ASIO2KS及AxASIO对大部分的板载AC’97声卡的支持还不错,其他的独立声卡需要你自己去测试了,运气好的话也许其中一个能够支持你的声卡。

四、在播放器中使用ASIO输出
Winamp和Foobar2000是目前最流行的两个音频播放软件,通过第三方的ASIO输出插件,可以使它们的播放效果更加出色。

1. 在Winamp 5中使用ASIO输出
安装Winamp 5的ASIO输出插件(下载地址:http?//www3.cypress.ne.jp/otachan/out_asio?exe?_041c.zip)比较简单,只需要将它解压至Winamp的Plugins目录下(如C?Program FilesWinampPlugins)即可。
运行Winamp 5,打开Winamp参数对话框,在左栏的“插件”下选择“输出”,即可在右边窗格中显示全部的输出插件,双击列表中的“ASIO output plug-in”,打开其设置对话框。

在设置对话框中选择“Device(设备)”为“AX_ASIO Driver”,为避免AC’97声卡所存在的SRC问题,可以设置重采样(Resampling)的采样率(Sample rate)为4.8kHz,其他则可以使用默认值,然后,点击“OK”按钮完成设置。在重新运行Winamp 5后,如果没有意外,就可以听到通过ASIO API发出的声音了。

小提示:SRC,全称为“Sample Rate Converter”,意为采样频率转换器。声卡上之所以会出现这个东西是因为当年Intel在制定AC’97标准时,为了解决单CODEC解码多音频流问题而规定了输入输出的采样频率都必须是48kHz。所以,如果CODEC接收到其他采样频率的音频流(比如CD标准的44.1kHz),便要经过SRC处理,将频率转换到统一的48kHz。而符合AC’97规范的音频解决方案是使用24.576MHz的晶振来为CODEC及主芯片提供同步脉冲,但是24.576MHz的晶振无法为回放44.1kHz的音频信号提供整数倍的同步脉冲(24.576MHz/44.1kHz=557.2879…),在这种情况下声卡无法为回放44.1kHz的声音提供高保真必要的硬件环境,转换过程中音质劣化导致声音变调失真,就造成了SRC问题。

2. 在Foobar2000中使用ASIO输出
ASIO For Foobar2000插件已经包括在Foobar2000的汉化增强版中了,可直接使用它。在Foobar2000的窗口中选择“Foobar2000”菜单下的“参数设置”命令,打开参数设置对话框,在左栏中选定“回放”下的“Output”,然后在右边的“输出方式”下拉列表中选择“ASIO”,然后点击“转到设置项”按钮,此时可以看到ASIO设备为AX_ASIO Driver,设置可使用默认值。保存后单击“关闭”按钮,重新运行Foobar2000就可以让设置生效了。

但是,如果你的声卡不能正常支持ASIO,强行使用ASIO以后,音频文件的播放效果反而会变得更差,甚至根本没法听,那就只能禁用ASIO了。






欢迎光临 光电工程师社区 (http://bbs.oecr.com/) Powered by Discuz! X3.2