最近研究了下Foobar2000,找到篇技术文章,怎么说呢......挺专业的,给个链接吧,不过好像也不是原帖,喜欢在我这看就看文章的第3段吧,第2段为我整理帖子的主要内容。
以下为原帖内容(转自“Foobar2000中国爱好者社区”,发帖人“aling”,原文作者“rain blue”): 编者按——用电脑作为家庭音视频中心已经成为未来的大势所趋,虽然目前还有这样那样的局限和技术障碍,但已经有很多朋友开始作者做相关的尝试。由于多媒体声卡品质的不尽如人意,所以我们{zh0}作一些力所能及的改善,网友rain blue作了如下的测试,取得了不少心得,与大家分享。 近日开始用SB Live!5.1来组建音源,关于PC音响系统的音质改进,有一些想法,写出来供大家讨论。本人的音响设备具体配置如下: ●功放:君悦ML-585 君悦ML-585功放是一台全解码(PCM、HDCD、Dolby Digital、DTS)6×100W功放,以其身价服务于PC系统绰绰有余。惠威的M系列音箱采用了平面等磁带式高音R系列,其中M1(使用R1C作为高音单元)深受广大发烧友好评。R1C低频下限较高,因此与之相配的低音单元口径不能太大,为了使R系列能够配合口径更大的低音单元,惠威推出了低频下限达1.7K的R2C,被用于M1.2、M3、M4、M5等系列上,Ms5所用高音单元与M5一样均为R2C,只是低音单元由F8变为SS8PlusIIN,考虑到F8较SS8PlusIIN的强项在于低频爆发力,而我的听音环境只有20多平,所以选择了较为便宜的Ms5。君悦C80是六展{zj0}中置得主,为了达到较好的协调性,选用了同系列的S800环绕。鉴于Ms5为双8寸结构,低频量感已经充足,所以未搭配超低音音箱。 关于SB Live!的音质问题,大家已经有过很多讨论。由于我在这套配置中使用了光纤输出,绕开了声卡板载的DAC、低通滤波、运算放大等模拟线路,因此系统音质仅跟以下软件项目有关: 1、驱动程序; 我使用的操作系统是Win2K,目前,除了创新{zx1}官方驱动外,网上受关注比较多的SB Live!WDM驱动大致有:KX、创新官方驱动、康柏A7、游飘改的YouP-PAXIII、Up改的AX等。由于我要使用光纤输出AC-3和DTS信号到功放进行解码,因此放弃KX驱动(哪位大虾如果知道使用KX如何光纤输出AC-3和DTS信号,烦告诉我:,因为我个人比较喜欢KX驱动简洁的风格)。在测试余下几种驱动的时候,我发现,这些改版驱动相对于SB Live!5.1自带光盘上的驱动而言,的确是好了很多,但是,跟创新官方{zx1}驱动比较起来,竟然没有任何可以让人瞩目的优势!某些改版驱动的IMS总体值比创新{zx1}驱动要小一些,但是在除19K和20K之外的某个频率出现较高波峰,相反不如创新{zx1}驱动控制得好,而其他得改版驱动要么得分跟创新{zx1}驱动极为相近,要么甚至比创新{zx1}驱动还要低。于是,我对于改版驱动是否能提升音质产生了怀疑。考虑到稳定性因素,我使用了创新{zx1}版官方驱动。 在使用RMAA4.2测试各驱动表现的过程中,我发现一个让我非常惊讶的现象:各款驱动使用44.1K采样进行录放时的测试结果比使用48K采样进行采样的测试结果差了很多!尤其是频响和IMS两项,现以使用官方{zx1}驱动时的测试结果为例,下面为测试数值比较以及各项图表,所有测试均通过光纤输出到光纤输入完成: 从以上几张详细图可以看出: 1、44.1K采样时,从3K开始,响度开始出现波浪式恶化,从15K开始,响度开始急剧下降; 而在48K采样的时候,以上问题,均不存在。其他各款驱动均如此,限于篇幅,不一一列举,有兴趣的朋友可以自行测试。造成这种情况的原因在于:SB Live!是一块符合AC97规范的声卡,而AC97声卡的一个必备特征是所有输入音频流均被采样到48K 16Bits以后才送到后续的混合、DAC、光纤输出等部件(该过程称为SRC——Sampling Rate Convert)。这一强制要求带来了很多好处,比如易于实现多音频流混合、使用结构简单的定频(48K)DAC就能完成数/模转换等,但是,由此引入的音质损失也是很明显的:因为CD的采样率为44.1K,由CD制作成的WAV、MP3等,采样率自然也是44.1K,而AC97声卡在播放这些音频流的时候要把它们重采样到48K,其间就会引入失真。 低失真的SRC算法计算量非常大,而高速度和低失真是非常难兼顾的,尤其当源频率跟目的频率不成整倍数关系的时候,比如:将44.1K的音频流重采样到48K的音频流。指望以SB Live!100MIPS的计算能力完成高质量的SRC,自然是不现实的,而测试结果也证明:SB Live!所使用SRC算法在高频段存在很大缺陷。 有没有什么办法避开声卡劣质SRC算法的影响呢?答案自然是肯定的——只要我们送入声卡的音频流已经是48K采样的,那么:1、倘若声卡不对此音频流再作SRC处理,我们的目的就达到了;2、倘若声卡仍然要对此音频流作SRC处理,由于源采样率跟目的采样率相等,SRC所引入的失真降降到最小。由SB Live!在48K采样率下平直得让人不敢相信的频响曲线来看,我猜测SB Live!在输入音频流为48K采样的情况下,是不会再对音频流进行SRC处理的。 既然CD和绝大多数MP3采样率都为44.1K,那么如何使得送到声卡的音频流都是48K采样的呢?很简单:我们自己实现从44.1K到48K音频流的SRC。具体实现起来,有两种渠道:一是在播放后期完成SRC,二是在播放前期完成SRC。 专门为Winamp写插件的Peter曾经基于一个优秀的SRC插件“SSRC”写过两个Winamp的输出插件:out_wave_ssrc和out_dsound_ssrc,其用途就在于将Winamp解码器输出的音频流重采样到48K以后再送到声卡还原。这种方式属于在播放后期完成SRC的典范。之所以称“SSRC”为一个优秀的SRC插件,原因是该插件可以以较低的计算量达到较低的失真度(详见),但就算如此,在CIII 1G的平台上使用dsound_our_ssrc插件时,CPU占用率都达到了14~16%,而不使用ssrc输出插件的时候,CPU占用率只有不到3%。 再来说播放前期完成SRC的情况。目前短歌行所倡导的高品质MP3制作流程为:44.1K CD->EAC->44.1K WAV->LAME->44.1K MP3,好,现在在这个流程中加一步,变成:44.1K CD->EAC->44.1K WAV->CoolEdit Pro->48K WAV->LAME->48K MP3,我们所获得的MP3就是48K采样的MP3了。播放前期完成SRC的好处在于:由于SRC操作不是实时完成的,因此我们可以选择失真度{zd1}的算法来完成SRC(在此例中我使用了CoolEdit Pro2.0),而不用顾忌该算法的复杂程度和CPU资源消耗率。在播放的时候,拥有SRC输出插件的播放器(如Winamp2.X)也就不是必须的了,我们可以使用Winamp3.X、MediaPlayer等等,而且,由于在播放的时候不再需要进行SRC操作,CPU资源占用率会降低很多(跟播放后期进行SRC的方式相比较)。 我在本文开头所述的系统下进行了测试,具体做法为: 1、用EAC抓CD音轨为Test_44.wav; 测试曲目包括小提琴独奏、人声以及古典吉他独奏。{zh1}的结果是让人满意的。标准out_dsound播放44.1K采样WAV时的有小量高频破音;而标准out_dsound播放48K采样WAV时这些破音都没有了,声音不再带刺,听感轻松了很多;使用out_dsound_ssrc插件播放44.1K采样WAV时效果跟标准out_dsound播放48K采样WAV非常接近,也就是说,无论是在播放前期完成SRC,还是在播放后期完成SRC,只要SRC操作不由SB Live!进行,音质都会有明显提高。 为了进一步比较播放前期完成SRC和播放后期完成SRC在音质上的区别,我更改了测试方式。SB系列的用户都很熟悉那个SB驱动里面自带的打雷的声音文件(Welcome.wav)吧?那是一个22K采样的WAV文件,我用CoolEdit Pro2.0把它转换到48K,保存为Welcome_48.wav,然后分别用三种方式播放: 1、用out_dsound播放Welcome.wav; 这下差距就明显了,{dy}种播放时由声卡进行SRC,数字杂音不需要进行A/B测试就能明显的听出来;第二种播放是前期SRC方式,闪电劈开云层时干净利落,能量集中在很窄的频段里面,没有丝毫发散,有如解剖刀般锋利;第三种播放是后期SRC方式,xx没有{dy}种播放的数字杂音,但是声音的能量分散开了,不如第二种播放那么集中、有冲击力,而且,由于源采样率(22K)和目的采样率(48K)区别较大,该方式播放竟然使用了近22%的CPU资源,而其余播放两种方式CPU资源占用都不到2%。 扯点话外的,当我用CoolEdit Pro2.0将一首4分多钟的WAV重采样到48K的时候,耗时居然有10分钟(CIII 1G平台)!由此可以知道,高品质的SRC算法是多么消耗资源!以SB Live!的Emu10K1那100MIPS的运算能力,所用实时SRC算法效果低劣,也在情理之中了;而ssrc能以14%~16%的CPU占用率达到这种效果,也非常难能可贵了! 本文的分析,对于所有的AC97声卡都适用,因为AC97声卡都面临SRC算法的问题。我建议今后大家在制作MP3的时候按照我给出的流程来进行,因为这是一劳永逸的解决由声卡SRC算法不足引起音质恶化问题办法。对于非AC97声卡比如MX200,播放48K采样的MP3是没有任何问题的,因为MX200等非AC97声卡的DAC工作频率是可调的,当你播放44.1K的音频流时,这些声卡的DAC工作在44.1K下,而播放48K音频流时,DAC工作在48K,不存在从48K重采样到44.1K的问题。 曾经有朋友提出:使用播放后期进行SRC的方式,如果SRC算法升级了,简单的升级SRC插件就可以达到升级目的;而如果采用前期SRC的方式,是不是一旦CoolEdit升级,就得重新抓轨、重新SRC、重新用LAME压缩MP3?我个人认为,对于CoolEdit这样的准专业软件来说,音质肯定是最重要的,因此,它必定会采用失真{zd1}的算法,而SRC是一个已经研究了很长时间的纯粹的数学问题,极低失真的SRC算法已经很成熟了,以后就算CoolEdit升级,其SRC算法部分也不会有太大变动,顶多优化执行效能而已。更何况,目前的CoolEdit Pro2.0进行SRC引入的失真已经可以忽略不记了,所以,我觉得这种担心是不必要的。 |