录音/制作/创作 吉他 扩声技术 视频技术 作品展示 生活 信息 更多...

有关DAW的内部混音精度的一些说法和想法

( 16 )
12
 
[收藏]
-  第 1 页  -

20
#1 12-5-13 18:20

有关DAW的内部混音精度的一些说法和想法

发这贴的目的,一个是为了能骗点金币或者积分为了在二手版发东西卖我的Virus TI2 Desktop,一来则是一直以来对DAW的内部混音精度有点自己的看法。也希望大家能看看讨论一下。恩=v=

本人是个搞编程的。说来也搞了十几年了。因为兴趣也弄点音乐,于是很早以前就看到各个地方说的,不同的DAW的内部混音精度不同。比如ProTools现在用48位整数、Live是64位浮点、Logic是32位整形、Cubase是32位浮点什么的(不一定准确,记不太清了),因此就尝试自己从编程的角度去理解,发现了一些问题。

首先,有关这个精度。这个精度其实是指计算机中存储一个数的最小单元。这个的意思,举例子最好说明。例如我们说的16位整形的wav文件,也就是说,wav中每个采样是使用16位整数来保存。什么叫16位整数?并不是有16个数位的整数而是指,范围是从0到1111111111111111(16个1)的整数。16个1的二进制整数,其值也就是65535。也就是说,16位整数的wav文件中,存储的某个采样的最小值是0,最大值是65535。换句话说,从负无穷db到0db,分割成了65536块。因此显然,如果这个分块越密集,音质就越好。这也是为什么说24位的wav音质要比16位好一些的原因。

解释了这个以后,再来继续说我自己对于DAW内部混音精度的一些问题的原因。

如果将音频信号数字化的话,纵向(也就是我们提到的16位整形、32位浮点等)的分割方法上来说,存在一个问题。因为计算机内的数字的保存,无论他是浮点还是整数,如果是多少位,那么就是最多多少位。例如16位wav中不可能出现一个65537,因为这样做16位是写不下的。换句话说,如果某个状态下,要保存的某个数字大于了所规定的上限值,那么这个值肯定要被缩减到能允许的最大值。这个无论是保存的数据,还是在内存中运行的DAW混音引擎来说,都是一样的。

了解这个后,我们来看个问题。例如一个32位整形的DAW,对于常规的每个轨道来说,多少才是0db那个点呢?这个的意思就是说,刚才说到了,当把一个有限的距离(无声到最大声)分割的越密集,其音质肯定就越好。那么对于一个DAW来说,现代DAW并不会限制每个轨道不能超过0db,也就是说,其实每个轨道都是可以至少大于16位整形的最大值的。但是这个0db点,取得是多少呢?我们并不追求上面能空多少,而是那个最小分割的单元有多细。例如我让每个轨道的0db点是16位的上限,那么实际上,你的动态变化的最小单元就是,16位中的1。但是如果同样是0db点,某个DAW用的是24位整数的上限,那么,这里动态变化的最小值就是2的24次方-1中的那个1。距离相同,但是间隔变小,显然更细致,音质也更好。

但是刚才也提到,即使是DAW的内部混音也不是没有最大值的。因此如何平衡每个轨道的数值上的headroom,以及轨道数,就是一个问题了。例如,内部混音精度是48位。我们按照最大256个轨道计算,即每个轨道的精度是 (2^48)/256 = 2^40。也就是说,每个轨道可以有40位整数最大值的数值。大家都知道现代DAW中不会在轨道上限值你是不是超过0db,也就是说,其实他能保存大于0db的数值(换句话说,有数值上的headroom)。那么问题就是我该怎么分割例如刚才的那40位整数呢?多少是0db以下的,多少是0db以上的headroom呢?这个问题直接决定了那个纵向的最小单元的大小。例如。我懒了,决定用32位整数的最大值是0db点。那么headroom就是 2^40-2^32 = (2^8 - 1) * (2^32),也就是说headroom是255个32位整数最大值。。那么多。这显然是浪费了。同时,32位的精度决定了到0db点分割的最小单元的高度。但是如果,例如我决定各分一半。相当于2^40 / 2 = 2^39。也就是说0db点是2^39。那么明显,2^39要远远比用2^32作为最大值精确。纵向分割的单元多了很多,声音也就更细致。

但是显然我们都没在DAW的说明中看到这个问题。怎么分配0db点和headroom的数据呢?单个轨道的最大精度是多少呢?在内部混音中的精度是多少呢?虽然现在我们最多是可以录制32位浮点的wav音频,但是其实在内部混音中,到底这32位是如何进行加法,如何处理,并没有详细的说明。这些部分也就是盲区了。

另一方面,有关浮点和整形。事实上从理论上来说,浮点与整形在保存方法上没有区别。计算机内存没有小数点,浮点数的小数点不过是通过一种方法来将某些位作保存整数部分,某些位保存浮点数部分罢了。虽然这样做的话,就会存在——越小的整数位,浮点数位会越精确,越大的整数位,浮点数位会越不那么精确。也就是说,从我个人的逻辑来说,如果超过某个数值范围,浮点数的混音精度其实是不那么可靠和可控的。这么一来,如果设计的内部混音精度是浮点数,那么就要考虑在轨道数、headroom上面更多的问题了。这恐怕也是为什么例如标准级别的ProTools HD系统选择了48位整型而不是48位浮点作为内部混音精度的原因吧。

以上只是从计算机内部的角度说了一下DAW内的混音精度问题。实际上每个DAW中怎么处理轨道的混音,就不得而知了。不过一般他们是不会在混音体系中加入什么处理的。多数就是如上提到的限制headroom,然后进行加法。但是在计算机中,浮点数的加法运算法则和整数的运算法则并不相同,(整数当然是1+1=2,但是浮点数的话,例如一个很大的浮点数的话,小数点后面的部分其实精度是会降低的。这个时候,浮点数部分就会存在一个舍弃的情况,精度也就会降低),所以DAW内有没有在采用浮点数作为混音数据格式的时候一定程度上处理这个精度降低的rounding up问题,也是要考虑的。只是这些资料恐怕只有读了他们的源代码才有可能知道吧唔。。。。而这些问题,其实是会影响混音以及输出的结果的。有的时候可能会有很大的影响(例如对于多轨道的工程,混音加和的结果会很大。浮点数的话就有可能出现rounding问题,导致输出的结果和用整数的DAW有一定的不同)。

[ 本帖最后由 haku_wang 于 12-5-13 18:22 编辑 ]
观众反应
:知识帖,我对混音研究不深,学习了!

4104
#2 12-5-13 18:34
daw的说明说看了么,有没有你要的答案?

20
#3 12-5-13 18:38

回复 ddyykk_hello 在 #2 的 pid=3513696 的贴子

我看过Live的和ProTools HD的。都没有具体的说明。其实从技术角度来说,如何处理这个summing和roundup的具体算法问题,应该是每个DAW开发公司自己的技术秘密的。就如同DAC中数字滤波电路的技术差不多。这些具体的技术应该是可以决定DAW混音声音的部分的。只是在这个领域大家的起点都差不多,又还没有一个统一的标准,所以就都是黑箱了。。。。。

2031
#4 12-5-13 18:42
精度难琢磨!

2922
#5 12-5-13 18:47
多年选择最后只用sawstudio,大家都懂的。

13923
#6 12-5-13 18:47
个人对精度的理解,64bit整数或者浮点精度的混合已经能基本达到硬件summing的精度了,毕竟summing只是用加减法。但daw的精度难点在于谐波生成器的叠加,各种的乘加,估计得内部起码256bit以上的谐波运算叠加精度才能达到硬件的水平,现在的声音一经过软件的处理就数码化,或者硬了,就是处理精度的问题。如果在谐波生成下下功夫,应该能超越国外的水平

13923
#7 12-5-13 18:56

回复 haku_wang 在 #1 的 pid=3513687 的贴子

混音精度已经在64bit上解决了,saw,pt10,studio one现在都是的,现在的难点是效果处理精度,也就是对各种硬件设备模拟的精度,如果有一天能软硬件反相70db以上的话,就可以舍弃硬件了

266
#8 12-5-13 19:03
程序也是门艺术!

20
#9 12-5-13 19:03
原帖hjun 于 12-5-13 18:47 发表
个人对精度的理解,64bit整数或者浮点精度的混合已经能基本达到硬件summing的精度了,毕竟summing只是用加减法。但daw的精度难点在于谐波生成器的叠加,各种的乘加,估计得内部起码256bit以上的谐波运算叠加精度才能 ...


确实。这个方面是数字音频混音的一个大问题。但是这类问题即使在现在的硬件运算速度下也是一个很大的问题,所以基本上如果在这个方面加入运算的话可能会对延迟带来巨大的影响。在算法角度来说,这类牵涉到类似物理方法的运算一直都很难办唔。。。

不过不知道国外的DAW现在有没有已经在这方面进行研究的呢?我接触的DAW还不是那么多,主要也就是主流的。另外就是也没有具体的DAW有说明他们使用这类技术(有的话估计会拿出来宣传吧唔。。。)

20
#10 12-5-13 19:05

回复 haku_wang 在 #1 的 pid=3513687 的贴子

效果处理精度的提升一般都会带来巨大的处理延迟和占用。。所以这一直都是问题啊唔。。。只能等算法技术的提升和硬件处理器速度的提升了唔。。

13923
#11 12-5-13 19:06
我个人对硬件的理解是这样的,信号每经过一个电阻,电容,放大设备,变压器和导线,都会生成各自的频率偏移和Xie波。

而在音频最常用的EQ和压缩之中,EQ是LCR电路,其中以电感产生的谐波最多,直接增加在以特定频率为中心上了。而越好的设备,其谐波失真也是比较少的(相对),但失真都是失真在应有的位置上面,所以信号通过他们,既能还原,又能增添音乐味道。

由于谐波很小,所以32位浮点在相当的精度下还不足以表达如此小的信号,导致32bit浮点的daw声音一片胡,甚至连低端的调音台都比不过(summing谐波部分)。

在音频处理中,个人的倾向都是用整数,感觉失真比较少,而且相对直观,知道精度到多少能控制,在少数需要极小和极大的数而不太需要精度的运算中可以运用浮点。

如果谁有专业的测试仪,能测试到硬件谐波生成的精度,推算出软件计算的精度的话,应该能做出媲美硬件的效果器。再把软件运算信号跟硬件信号不断对比调试,解决算法中存在的问题,相信软件代替硬件的那一天应该就会来临了。

作为准专业的计算机毕业学生,信号处理部分的精度就要请教楼主了~~

834
#12 12-5-13 19:16
我的理解中,同样位数(如32bit)的浮点数比整数(即小数部分为0的定点数)可表示的数值范围更大,但因为其实现方法是把一个数表示为m × b^e,所以在一定数值范围内,浮点数变化一个数(指内部存储数据的最低位变化一个数),其表示的实际数值变化小于1,则其精度高于定点整数;而当数值超出上述范围后,浮点数的最小变化量将大于1,则其精度低于此范围内的定点整数。
以上只是单个数值的表示精度,如果是多个数据之间的运算,情况比较复杂,我实在没有耐心和信心搞清楚……总之个人感觉在较高电平时浮点数的运算精度损失应该会比定点整数大,但如果实际使用和运算的有效数值较小的话(比如使用64位浮点存储,但实际使用的数值控制在40位或50位浮点可表示的范围内),使用浮点数的可实现的精度会更高。

[ 本帖最后由 ajunk 于 12-5-13 19:18 编辑 ]

20
#13 12-5-13 19:17
原帖hjun 于 12-5-13 19:06 发表
我个人对硬件的理解是这样的,信号每经过一个电阻,电容,放大设备,变压器和导线,都会生成各自的频率偏移和Xie波。

而在音频最常用的EQ和压缩之中,EQ是LCR电路,其中以电感产生的谐波最多,直接增加在以特定频 ...

我个人觉得其实就算是summing本身,模拟的summing和数字的summing还是有些不同。xie波也是其中一方面,不过觉得模拟电路的summing还有更多的特殊因素。这方面的信号处理估计就不太好办了。倒是如果算法能充分利用现在64位系统的运算精度的话,应该可以有很好的改善。不过这个时代还没到来唔。。

我也非常赞成summing使用整形而不是浮点。不过我的另一个问题是,有关在64位的DAW中,单个轨道的声音精度到达了什么程度的问题。虽然内部的混音总线的精度已经提高,但是对于每个轨道实际进入混音总线的数据精度,我有点怀疑。毕竟在数字系统中是存在一定的空余,可以让单个轨道大于0db的。那么这单个轨道中的音频数据是不是利用了summing总线那么大的精度,也就是个问题了。数据角度我总觉的这种内部的事情不公开的话,还是有点不放心唔。。。或者就是说从数据类型角度,也只有充分的利用了64位的数学范围,才有可能真正的提高精度。如果数据类型是64位,其实很多轨道加起来只是还不到32位整数的上限,那么使用这个精度实际就一点意义都没了。所以才更希望知道其内部细节是如何处理的。就如我在文中提到的那些问题唔。。。

20
#14 12-5-13 19:21
原帖ajunk 于 12-5-13 19:16 发表
我的理解中,同样位数(如32bit)的浮点数比整数(即小数部分为0的定点数)可表示的数值范围更大,但因为其实现方法是把一个数表示为m × b^e,所以在一定数值范围内,浮点数变化一个数(指内部存储数据的最低位变化 ...

其实确实是这样的呢。所以这个具体的运算控制和算法应该就是某种可以改善DAW混音音质的部分了。只是各个公司都没有具体的说明这些细节唔。。。。
理论上来说,使用浮点或者整数都是可以的,只是这和上面提到的那个算法关系很大。如果设计中充分考虑了利用浮点的精度,并且所有的输入数据实际上在大部分时候都是能够优化到最佳的浮点数范围内,那么应该就是最好的状况了。或者同样在整数运算中充分考虑使用足够的精度的话也是一样。
但是实际情况。。。。不知道。。。。

13923
#15 12-5-15 20:58
如果有国外关于谐波测试的资料就好了~不过我看谐波的那个直方图,估计要做谐波运算计算量会非常巨大!可能现阶段用cuda显卡计算有点希望,求教下楼主关于谐波震动的一些知识~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

搜索