提高音质——重采样器的问题_晓夜莹光_百度空间

最近研究了下Foobar2000,找到篇技术文章,怎么说呢......挺专业的,给个链接吧,不过好像也不是原帖,喜欢在我这看就看文章的第3段吧,第2段为我整理帖子的主要内容。


那个帖子主要讲的是“重采样器”的问题,针对我们常用的CD转录的WAV、MP3格式音乐。简单的说,就是现在十分流行的AC'97规范的声卡(板载声卡基本都是,创新的SB Live系列等,但AC'97最终版本2.3版据说解决了这问题,因此,有这问题的声卡都是老点的产品,大概为Realtek(瑞昱)的ALC202/A、ALC101、ALC650,Analog Devices系列AD1885等,关键是看其是否支持输入采样44.1KHz,就算其{zg}支持96KHz但不支持44.1KHz也没用),AC97声卡的一个必备特征是所有输入音频流均被采样到48K 16Bits以后才送到后续的混合、DAC、光纤输出等部件(该过程称为SRC——Sampling Rate Convert)。而CD的采样率为44.1KHz,所以CD制作成的WAV、MP3等格式的音乐时,采样率也是44.1KHz。这中间44.1KHz转48KHz,如果有上面所说的声卡(解码器)完成,则会造成音质的损失,特别是高频,表现为出现爆音。解决方法有2个:
1、录制音乐时,将采样率录为48KHz的音乐,推荐录制过程为44.1K CD->EAC->44.1K WAV->CoolEdit Pro->48K WAV->LAME(可以用foobar)->48K MP3。再正常播放就不会有这问题。
2、播放音乐时,用插件out_wave_ssrc和out_dsound_ssrc(有for Winamp,但不知道有没有for 千千),对于Foobar2000而言,直接使用DSP插件中的“重采样器”,将频率锁定为48KHz,机器够好就勾选“极端模式”。这个方法对CPU要求有点高,会占用不少的系统资源。

以下为原帖内容(转自“Foobar2000中国爱好者社区”,发帖人“aling”,原文作者“rain blue”):

编者按——用电脑作为家庭音视频中心已经成为未来的大势所趋,虽然目前还有这样那样的局限和技术障碍,但已经有很多朋友开始作者做相关的尝试。由于多媒体声卡品质的不尽如人意,所以我们{zh0}作一些力所能及的改善,网友rain blue作了如下的测试,取得了不少心得,与大家分享。

近日开始用SB Live!5.1来组建音源,关于PC音响系统的音质改进,有一些想法,写出来供大家讨论。本人的音响设备具体配置如下:

●功放:君悦ML-585
●主音箱:惠威Ms5
●中置:君悦C80
●环绕:君悦S800
●音源:SB Live!5.1(Model:SB0060)+光纤子卡
●连接方式:光纤子卡Optical Out->君悦0.5M光纤->ML-585 Optical In
●特别配置:关闭SB Live!5.1的AC-3解码和所有EAX{tx}

君悦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、驱动程序;
2、音频信号来源(CD、MP3等);
3、音频重放软件。

我使用的操作系统是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开始,响度开始急剧下降;
2、44.1K采样时,在高频段有严重的互调失真,输入信号为-12db19K和-12db20K,结果输出时在多个频段出现很高的波峰,我想这就是为什么SB Live!在高频声音发毛、数字味很重且容易使人疲劳的原因之一。

而在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;
2、用CoolEdit Pro2.0打开Test_44.wav,将其重采样到48K,重采样的叠代次数选项选{zd0}(999),然后保存为Test_48.wav;
3、使用Winamp2.8的标准out_dsound(不带SSRC)插件播放Test_44.wav和Test_48.wav,比较音质区别;
4、使用Winamp2.8的标准out_dsound(不带SSRC)插件播放Test_48.wav,使用out_dsound_ssrc(带SSRC)插件播放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;
2、用out_dsound播放Welcome_48.wav;
3、用out_dsound_ssrc播放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引入的失真已经可以忽略不记了,所以,我觉得这种担心是不必要的。



郑重声明:资讯 【提高音质——重采样器的问题_晓夜莹光_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——