当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 24 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 写给追求音质的朋友,ALSA下的SRC(Sample Rate Conversion)问题
帖子发表于 : 2008-02-09 19:55 

注册: 2007-06-03 12:50
帖子: 27
送出感谢: 0 次
接收感谢: 0 次
这里不涉及基本音质问题,所以如果你有爆音的问题请参考论坛里如何设置PCM音量以避免增益带来的削波失真的文章;或者你有背景噪声,请尝试关闭声卡的录音和与你所需输出声道无关的接口。此外数字输出和外置解码器不在讨论范围。如果你有一片过得去的声卡,音质在感觉上已经不错了,那么你可以看看下面。当然如果你只是疑惑Linux是否真有音质问题,或者是怎么发生的,也可以参考。

最近在使用一块Terratec DMX 6Fire LT(音频I/O控制器是 Ice1712[Envy24])的时候,我发现envy24control这个功能强大的控制软件面板总是显示这片声卡正在使用48KHz的模式,我的音源库基本是从CD转换的FLAC和WAV,采样率都是44.1KHz。DMX 6Fire是一片双晶振的声卡,板上有24.576MHz和22.5792MHz两颗晶体,可以直接支持44.1KHz和48KHz等模式而无需转换。我尝试直接播放一片普通CD,依然自动跳到了48Khz上,真是奇怪。于是我松开了自动Reset频率的选项,手动锁定到44.1KHz,然后播放,没想到声音出来像是慢放的效果,肯定有什么地方不对了。

我使用Amarok管理音乐库,因此想到是否是Xine后端做了自动升频处理,改用ALSA命令行工具aplay播放一段44.1KHz的WAV后,问题依旧。排除了Xine,下面就是ALSA(我使用Xine的ALSA输出插件)本身了,最底层的驱动模块应该没有问题,因为可以手动锁定到任何改卡规格上支持的模式,只是播放效果不正常。逐渐地我想到了一个问题,Evny24是一个音频I/O芯片,并没有CS46xx一类DSP的计算处理能力,应该不支持硬件混音。表现到计算机上,就是多个音频流无法同时开启,你不能在播放音乐的同时再去开一个电影播放器,甚至IM软件的消息通知音都无法播放。但是在我的系统下同时开出一打的音频程序确实又没有问题,最终我把目光放到了ALSA的软件混音插件DMix上。

由于从前我的声卡使用CS4630芯片或者EMU10K,dsp具有硬件多音频流和SRC功能,因此我不太使用DMix。但现在我决定还是去掉DMix看看是否有用。在
代码:
/usr/share/alsa/cards/
下,我找到了ICE1712芯片声卡的预设文件ICE1712.conf,并注释掉了开头一段dmix相关的项目。随后我用aplay播放一段44.1KHz的WAV,声卡终于自动跳转到了正确的模式!当然作为代价,相应地我暂时失去了软件混音的功能。
代码:
# default with dmix & dsnoop
ICE1712.pcm.default {
   @args [ CARD ]
   @args.CARD {
      type string
   }
   type asym
   playback.pcm {
      type plug
      slave.pcm {
         @func concat
         strings [ "dmix:" $CARD ",FORMAT=S32_LE" ]
      }
   }
   capture.pcm {
      type plug
      slave.pcm {
         @func concat
         strings [ "dsnoop:" $CARD ",FORMAT=S32_LE" ]
      }
   }
}

结论很清楚,现在的ALSA默认已经为不具备硬件多音频流混音功能的声卡开启了DMix。由于DMix需要把多个可能是不同取样率的音频流混合输出,需要一个较高的常用取值。ALSA默认会为DMix采用48KHz的Sample Rate,若是低于此频率,则升频到48KHz。接下去的问题是,DMix在SRC之后,是否影响听感?在我看来,有一定影响,比如小提琴的高音延展会不足,而较为纤细的泛音被DMix做SRC之后也会被削弱或模糊(请抓取后面的附件音频试听)。因此如果你有双晶振声卡但没有硬件混音,并对44.1KHz回放的音质有所不满(例如结像较虚),那么你可以考虑在欣赏音乐的时候关闭DMix,这样可以完全发挥双晶振应有的实力。当然如果你只重视44.1KHz音源例如从CD抓轨的APE/FLAC/WAV,而对DVD或者其他视频相对来说无所谓一些,同时不想失去软件多音频流支持,那么你也可以只把DMix设定到默认44.1KHz,享受音乐,迁就视频(毕竟看视频时,我们关注画面多过声音)。

将DMix的默认输出频率设定到44.1KHz,请参考以下~/.asoundrc
代码:
pcm.!default {
    type plug
    slave.pcm "dmixer"
}
pcm.dsp0 {
    type plug
    slave.pcm "dmixer"
}
pcm.dmixer {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:0,0"
        period_time 0
        period_size 1024
        buffer_size 8192
        rate 44100
     }
     bindings {
        0 0
        1 1
     }
}
ctl.mixer0 {
    type hw
    card 0
}

除此之外,有些声卡只有单晶振,无法直接支持两种频率,必须透过SRC,如此情况下,高品质的SRC至少可以降低失真。ALSA考虑到这种情况,允许通过插件调用外部高品质SRC库进行转换运算。为了使用外部SRC,你需要libasound2-plugins,libsamplerate0等软件包(源中均有)。安装完毕后,在~.asoundrc 中加入
代码:
default.pcm.rate_converter "samplerate_best"
启用最佳SRC算法。

以上为最近的研究总结,写得比较仓促,供诸位Ubuntu音乐粉丝参考批评。


附件:
文件注释: 44.1KHz测试文件,对比SRC前后的变化
test.flac.bz2 [183.24 KiB]
被下载 677 次


最后由 anderson_yao 编辑于 2008-02-10 10:45,总共编辑了 1 次
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-02-09 21:31 

注册: 2007-06-03 12:50
帖子: 27
送出感谢: 0 次
接收感谢: 0 次
上面的附件里是一个常用的测试SRC品质的音频文件,FLAC格式,前景声是一个拨电话时电话里传来的的按键音,背景接近寂静,但在后半部分有一段十分纤细的类似远处传来警报的声音。如果你可以听见,恭喜这个至少是接近原声的。一般SRC之后,这个类似“唔~哇~唔~哇”的声音是完全听不到的,最多也只有一定的微弱噪声,这就是SRC带来的损失最直接的证明。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-02-09 21:44 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
声卡驱动关系复杂。没一个图文解说的。那Lirc的声卡采样,曾经看晕。


_________________
● 鸣学


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-02-09 22:57 
头像

注册: 2007-10-06 18:40
帖子: 4313
送出感谢: 0 次
接收感谢: 5
thank you . :lol:


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-02-09 23:19 
头像

注册: 2006-05-13 4:02
帖子: 10606
送出感谢: 0 次
接收感谢: 7
绝大多数还是集成声卡,目前的一般都是intel hda的那些,不像ac97普遍存在src。
lz还有没有48khz的测试音频?


_________________
HP Pavilion DV6-2064CA: AMD Turion II Ultra Dual-Core Mobile M640, HD4650, 2GBx2 DDR2-800, Seagate 500GB 7200RPM SATA, BD-ROM
DELL UltraSharp 2209WA
Arch64, Testing repo


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-02-09 23:52 
头像

注册: 2006-05-13 4:02
帖子: 10606
送出感谢: 0 次
接收感谢: 7
我觉得lz的情况应该不是普遍的,不知道和声卡或者alsa版本是否有关。
我这里是alsa 1.0.15,AD 1986A芯片,也是双频率的,但并不存在默认开启48khz的情况。
如有src,那么用audacious播放应该听不到lz所说的呜哇声,而一旦用audacious开启src,那么确实是听不到的。

这里提醒一下,audacious居然默认开启src,还是96khz的,所以如果你觉得用audacious音质很差或者没有声音,那么应该就是这个原因了。毕竟不是所有的声卡都支持96khz。


_________________
HP Pavilion DV6-2064CA: AMD Turion II Ultra Dual-Core Mobile M640, HD4650, 2GBx2 DDR2-800, Seagate 500GB 7200RPM SATA, BD-ROM
DELL UltraSharp 2209WA
Arch64, Testing repo


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-02-10 11:25 

注册: 2007-06-03 12:50
帖子: 27
送出感谢: 0 次
接收感谢: 0 次
zhuqin_83 写道:
我觉得lz的情况应该不是普遍的,不知道和声卡或者alsa版本是否有关。
我这里是alsa 1.0.15,AD 1986A芯片,也是双频率的,但并不存在默认开启48khz的情况。
如有src,那么用audacious播放应该听不到lz所说的呜哇声,而一旦用audacious开启src,那么确实是听不到的。

这里提醒一下,audacious居然默认开启src,还是96khz的,所以如果你觉得用audacious音质很差或者没有声音,那么应该就是这个原因了。毕竟不是所有的声卡都支持96khz。


这个ALSA下的问题,是纯粹的软件SRC。就是说如果启用了Dmix,那就会被(内置的低精度算法)强制转换到48KHz,这是从ALSA前几个版本开始的。最新的和自行编译的ALSA版本就说不清楚了。如果是支持硬件多音频流的声卡,不用DMix是不会有SRC问题的,去掉DMix就彻底摆脱了问题。支持硬件多音频流或者SRC并不代表音质的好坏,玩家也会要在收益和方便程度上作出一定权衡。

BTW,有些播放软件使用的插件可以不经过Dmix,这样如果播放器本身若没有开转换也不会有软件SRC的问题。


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-02-10 12:07 
头像

注册: 2007-10-06 18:40
帖子: 4313
送出感谢: 0 次
接收感谢: 5
第一种方法,成功。
第二中方法也成功但感觉和第一种一样,软件一样调节不了音量。


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-02-16 19:28 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
+ 精


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-07-13 22:44 
头像

注册: 2007-10-06 18:40
帖子: 4313
送出感谢: 0 次
接收感谢: 5
8.04好像不用改了。


_________________
E=m c^2


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-07-27 13:19 
头像

注册: 2005-08-14 19:53
帖子: 3998
送出感谢: 1
接收感谢: 2
OSS驱动这些src效果都是可调的,还可以关闭。比特率也是可调的

使用audacious这个测试好于任何播放器,vlc可以听见,mplayer,gstreamer后端的,mpd全部都听不见。。

不过不知道audacious和vlc那个的声音比较正确。听起来audacious比较正常。。

这么明显!。。。。


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-07-27 21:23 
头像

注册: 2006-05-13 4:02
帖子: 10606
送出感谢: 0 次
接收感谢: 7
gstreamer肯定可以听见。


_________________
HP Pavilion DV6-2064CA: AMD Turion II Ultra Dual-Core Mobile M640, HD4650, 2GBx2 DDR2-800, Seagate 500GB 7200RPM SATA, BD-ROM
DELL UltraSharp 2209WA
Arch64, Testing repo


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 写给追求音质的朋友,ALSA下的SRC(Sample Rate Conversion)问题
帖子发表于 : 2009-08-06 9:21 

注册: 2009-02-18 18:20
帖子: 4
送出感谢: 0 次
接收感谢: 0 次
很感谢楼主~~~

如果完成楼主所说的Dmix设置之后,再把pcm调到90%左右,ubuntu的音质很赞,没有噪音拉~~~ :em01


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 写给追求音质的朋友,ALSA下的SRC(Sample Rate Conversion)问题
帖子发表于 : 2009-11-15 0:28 

注册: 2008-06-01 12:31
帖子: 51
送出感谢: 0 次
接收感谢: 0 次
我用mplayer放能听见远处传来的报警声,但是用banshee 就听不见了。


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 写给追求音质的朋友,ALSA下的SRC(Sample Rate Conversion)问题
帖子发表于 : 2009-11-26 23:04 
头像

注册: 2008-08-26 4:31
帖子: 67
送出感谢: 0 次
接收感谢: 0 次
声卡音效芯片 cmi8787
Codec芯片 akm4396
DAC芯片 24bit 192kHz级别芯片
适用操作系统 Windows XP/XP x64/Vista/Vista x64
信号传输类别 数字式
声道系统 5.1声道
声卡采样率 44.1KHz
采样精度 24bit

德国坦克HiFier Serenade小夜曲功能参数

数字输出


支持音效 DirectSound/3D/A3D 1.0/EAX 1.0,EAX 2.0等
音频接口 一组立体声模拟输出(RCA接口)
一只耳机输出(6.3mm TRS接口)
两组数字输出(同轴及光纤各一个)
其它功能 集成耳机放大器电路
带有AIR技术改善音质
所有讯号来源均可单独控制输出音量

这块小夜曲是不是也一样能在8.04下用?????


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 24 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译