前两天看到有人说DFD没什么用,感觉还是很多人不熟悉这个东西,所以,索性翻译了这个手册。
原版PDF貌似是2007年的,一些例子有些陈旧,不过作为参考还是可以的。
为了大家都能看,我就这么直接发。
第一次翻译东西,错误难免,各位观众海涵。
OK,正文:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 DFD 详解
随着计算机技术的发展,使软件可以依赖于这一技术.几年前的电脑仅限于16MB物理内存。这意味着,乐器采样(instrument samples)是相当小和有限的。如果你还算走运的话,每个乐器(instrument)可以拥有5个采样(samples)!
同样地,你可以想像,一个采样移调两个八度后肯定难以达到很好的效果。令人欣慰的是那些日子已经成为过去,我们不再受到那些限制,来自以使用采样为基础的真实的乐器回放技术。
现在一般的个人电脑最多4GB(或许更多)的物理内存。然而,我们大多数人的台式电脑或者作为现场演出的笔记本电脑仍然停留在1GB或2GB的程度。无论如何,似乎总是存在这么一个这个问题,没有足够的内存。
如今采样文件的尺寸变得越来越大,通常,一件乐器中包含的采样大小可以超过现有的系统内存。
即使你有4GB内存安装在机器上,操作系统也将拨出至少几百兆字节(往往更多)。你可以试着想象一下你的物理内存可以加载多少采样。这时DFD发挥作用。
1.2 什么是DFD
DFD标准意思是“direct from disk”,即“直接从磁盘读取”,是一个回放大甚至超大乐器和采样,而不需要把它们完全装载到 内存的技术。事实上,每个采样只有第一部分加载到内存,其余的是读计算机的硬盘来回放该乐器。
当需要回放时,内存几乎能够立即作出反应,提供第一部分用户请求的样本,而电脑从硬盘读取下一个部分样本。
当DFD启动,我们可以加载的采样可达2GB每个。 后面,我们将学习使用DFD工作,我们实际需要多少内存,以及如何建立我们的缓冲区大小。
1.2 理论背景
这一部分有利于我们了解DFD的工作流程,如果我们想要达到超越我们硬件和软件的最好表现。
那么,如果我们能够直接从硬盘读取需要的采样,能不能不要内存?
答案是:不能。至少不能实时的满足需要。 假设我们敲响键盘,那么我们希望的是立即听到声音。
严格意义上来说, 我们知道“立即”在宇宙中是不可能的,因为所有的声音都需要时间穿越空气,通过转换器, 通过布线等,但我们仍然期待声音“立即”让我们听到,可接受范围为1-10毫秒。
你可能知道这个值-这是所谓的“潜伏期”,它也可以作为衡量您的音频接口好坏的一个标准。最好的一些 潜伏期能低到1.5毫秒) 。总之,按下琴键我们需要等待很少的几毫秒后,声音才能被听到。
因为还没有那么快的硬盘(设计最快的磁盘工作中的数据库服务器也需要约4毫秒) 。
这样,解决这个问题的唯一途径是加载每个采样的第一部分到内存中(它有几乎在瞬间提供采样的能力),好让硬盘有机会获取后面的一部分采样,因为它需要时间。
1.3 举例来说明一个采样发声的流程
假设你有一个装有水的水箱,这个水箱有一个洞,水不断的流出。你的任务是使用一个水桶,不断填补流失的水,保持水箱不流空。
如果您手脚不利索,水箱应该一开始就有比较多的水,为你填补上第一桶水提供时间。但如果以较少的水开始, 那么你必须提供更快的提供下一桶水以保证水箱不流尽。
然而,最开始的水位并不是唯一的因素。它还将继续,如果有较大的桶,您可以携带更多的水,从而不用 做那么多人次,但很明显的,这也需要花费较长的时间来填补。与此相反,小水桶需要你跑更多趟,但每次填补迅速。
假设我们能够增加更多的水桶(为每个发音的音符) ,那么你很快会发现速度又成为一个重要的因素。
1.4 请问这与DFD有什么关系?
在DFD世界中,水箱是您的DFD发音内存,最开始的水位可以看成预存的缓冲,桶是一个通道缓冲区,而桶的容量,是您缓冲区大小。
如果这些东西把你搞混了,请继续阅读下去。
1.5 技术背景
1.5.1 The Preload Buffer(预缓冲区)
一个预缓冲区对乐器里的每一个采样都是必要的。因为使用者可能弹奏键盘上的任何一个键,所以KONTAKT无法得知哪一个采样将被触发。
假设一个乐器由200个不同的采样构成,每个采样需要192KB大小的预缓冲区,那么我们最终将需要37.5MB的预缓冲区。请记住,这和采样的实际大小没有关系,这是相同的,无论采样大小是1GB一个还是200KB一个。
现在我们得到了第一个简单的公式:
一个乐器里面的采样数量*preload buffer size(预缓冲区大小)=这一乐器使用的内存。
换句话说,一个乐器加载需要的内存就是加载该乐器中每一个采样的第一部分所花的内存。通常,这仅仅是每一个采样的一小部分。
当我们加载一个乐器时,预分配多少内存取决于该乐器的预缓冲区设置。那么这里我们来看看乐器里面的Instrument Options对话框。(当你觉得有必要调整时,也该看看这里)
预缓冲区的设置用来指定对于每个采样而言你要预载多少到内存。当回放的时候,随着载入预缓冲区的采样开始进入回放,硬盘也已经开始工作读取采样的余下部分用于回放。这一时间直接取决于采样装载入内存的第一部分的大小,即预缓冲区的大小。
如果缓冲区比较大,可以维持回放较长的时间,那么硬盘上的工作容易得多。
如果缓冲很短暂,硬盘就必须更努力,更快,但能节省更多的内存。因此,显然这里需要我们自己权衡。一方面可以让硬盘轻松,但需要大量的内存。另一方面,很可能使用很短的缓冲,导致硬盘提供采样的速度跟不上。
另外,复音数也是个问题,如果同一时间硬盘只是读取几个采样可能还行,但如果同时要读取数百个采样(比如一个完整的管弦乐采样库),可能硬盘就捉襟见肘了。每一位用户的硬件和性能需求是不同的,因此没有一个标准的的方案。不过,我们可以在这里提供一些指导性建议。
1.5.2 通道缓冲
为了持续发音,DFD系统将不断读取下一个缓冲的声音并把它纳入一个专门的内存区,同时 Kontakt将读取这些采样。这一部分专用的内存领域(水箱)由Kontakt在启动时就预留好,基于两个DfD的大小。
设置:
由于这些缓冲区是发声所必须的,而且一个声音有可能占用Kontakt多达16个通道,所以他们被称为通道缓冲。
1.53 我们需要多少通道缓冲?
这是相对容易的:这取决于我们打算同时发出多少个声音。如果我们需要的最大复音数为100,那么我们将需要100个这样的缓冲区。每个通道缓冲区的大小将决定采样的下一个部分是否跟得上。
了解了这一点,我们得到第二个公式:保留通道缓冲x通道缓冲区大小=总的DFD内存 这里重点是不要混淆总的DFD内存使用量和显示在Kontakt乐器栏的内存使用量。这是分别占用若干系统内存的两个值,由Kontakt在加载和运行乐器时分配。
(注意!一个立体声的声音将使用2个这样缓冲区,而一个5.1声道的声音将使用其中6个。这是设定预留多少数量通道缓冲需要考虑的重要因素)
1.6 放在一起来看
现在,我们知道了DFD背后几乎所有的理论基础,得到以下关于内存的结论
注意:
1.我们需要一些预缓冲区,数量和我们加载的采样一样多。
2.我们需要通道缓冲区,以满足回放时的发音需要。
3.我们可以调整每个缓冲区的大小,以配合我们各自的需求和内存。
此外,重点要记住:
1.通道缓冲器总是存在,不管加没加载采样。
2.预缓冲区可以变得相当多,如果加载的乐器或者多个乐器包含有很多采样。使用的采样数量决定预加载的内存消耗,所以可能有必要把它设置得尽可能的低,特别是要装载大型乐器,然而内存又比较有限的情况下。
DFD发声内存(DFD voice memory)将根据实际应用来分配给Kontakt中所有加载的乐器共享。
理论结合实例,使我们能够得出如下结论:
以更大的水桶和更多的复音数工作,水桶每次装水的时间就会越长。也就是说,如果要回放大量的音符(多复音数) ,这可能意味着装满所有水桶的时间过长,这样就可能导致DFD超载。
当然,我们可以减少水桶(通道的缓冲器)的大小,但是有一个限制:桶越小,每次抵达的通道缓冲可提供的回放时间也会更短。在这种情况下,硬盘寻道时间将成为影响DFD性能的因素。
[
本帖最后由 我 于 09-4-4 22:08 编辑 ]