|
发表于 2008-4-1 04:07:26
|
显示全部楼层
原帖由 cyrax 于 2008-3-30 17:40 发表
。。。CPU周期的分辨率低?这和DAC转换有什么关系,您认为44.1khz这个频率需要CPU去响应??
。。。只要不发生缓冲区欠载,除非您用的pc性能还不能实时解码ape。。。。呵呵,现在主流pc解ape CPU占用率才不过 ...
您好像对数字音频播放时候的时间轴的误差完全不清楚啊?数据和时钟概念不同的。除非你的声卡有几百M的缓存来存放一整张CD的数据(实际上大部分声卡都采用了很简单的设计),否则输入的数据在实践上的稳定性对最终声音品质的影响是极大的。
正是因为声卡的时钟可以(比较)精确的锁定在44.1khz(当然,很多声卡甚至都没有44.1khz的时钟设置),所以当输入的数据并非完美的对应44.1khz的时候,输出的模拟信号就会产生失真。除非采用极大的缓存和完美的算法来reclock,否则没有可能复原。而且,请注意:在执行reclock算法的时候,所需的时间是不可预知(不稳定)的,所以当你算好的时候,时间已经变了,而变了多少是无法准确知道的。
专业声卡的厂商如protools的白皮书,反倒很少提及这一点,因为专业的设备不像民用,都是有一个统一外部时钟来控制输入/输出/DA的过程的,不存在这个问题。
这跟CD机转盘的道理不是一样么,要是DAC真的能消除所有jitter,厂商花那么多工作做“匀速”的转盘有啥用?同样的道理,很多专业数字声卡都会标明jitter值——如果数字输出是完美的,他们标这个值干啥?
书上说:jitter仅仅发生在AD/DA转换时,完全正确,没有DA转换过程我们永远不可能听到jitter的存在——或者说,我们啥声音也听不到,只能看着0和1;但是这个DA转换时的jitter是从哪里来的?
Since then, we've learned much more about the relationship between word-clock jitter, the digital processor, and the CD transport. It turns out that word-clock jitter in a digital processor—the point where jitter becomes audible—is a result of many variables, including the transport, the digital interface, and the digital processor itself.
http://www.stereophile.com/features/368/
现代CPU是够快,不过快不代表准确,您知道一个解码步骤多应多少条微指令?对应多少个时钟周期?我们的民用PC系统不是给实时系统建造的,听音乐不是看书!音乐是时间的艺术,一个在错误时间出现的正确音符是一个错的音符。请注意,您听歌是匀速、实时的,需要数据的时候必须有,慢了会出现空白停顿,快了会出现丢祯。单单以算法来看,只要一小块缓存和足够的计算能力就可以完成“实时”的解码,完全正确;但是如果要求您以刚刚好44.1khz的匀速解码输出数字信号呢?如果您的解码快过这个速度,数据流往哪里输出呢?foobar的缓存是4s左右。
您这口气好象科学霸权主义者,在这种思维下面,科学反倒变成了一种迷信。不信实际结果,偏偏抱着理论。CPU占用率跟时间的准确度完全没有关系。我们用串口向医学仪器上同步资料,数据流量很小,但是很难达到“实时”的要求!我们所谓的实时,才仅仅是1/60s的精度!
您玩的游戏最多也就是100fps,播放电影30fps就够了;这些计算量巨大的工作反而没有问题;但是音频文件需要44.1khz的分辨率——电脑的CPU主频的漂移量,自己用检测程序去看一下好了。虽然理论上CPU也是可以做到相当接近44.1khz的分辨率的,不过那需要微指令级别的程序。说实话,俺做不来,您试试看?
所以很多人说老掉牙的电脑声音反而会好。快不见得有用的。
PS:把APE解压缩为WAV,和内存里有一块600M的缓存,是一样的效果——最终减少了播放过程中引入的jitter——假定解码速度远大于播放速度,实现这个应该没有问题。可惜我估计foobar的插件是“on demand”式的,即系统会向插件要求固定时间块的数据,这个要求极度精确的时间信号是由foobar自己控制的,块长度是在foobar里可以设置的。这个法子比起完全buffer肯定要差一些,不过大多数用户会很介意600M甚至更大的内存占用吧?至于foobar里的插件有没有用近似算法,是另外的问题,俺没看过,就说一句,很有可能的。
不同的播放软件、不同的驱动程序、不同的操作系统、不同的电脑出不同的声,这应当是公认吧,有现象肯定有解释的,肯定不是玄学。现在写个程序是很简单,不过不代表电脑的体系结构就简单,这种通用型的设备就是过于复杂,所以需要注意的环节就尤其的多。
[ 本帖最后由 pig2man 于 2008-4-1 05:08 编辑 ] |
|