文本阅读:
170第7章时间平移与延时
另一方面,假设delread~对象在delwrite~之前出现。那么样点x【N】...,x【N+B-1】还没有被存入延时线中,因此最近被读取的样点是属于上一个块的:
delread|→x【N-B】.....,x【N-1】
x【N】...,x【N+B-1】→delwrite~
这里,我们可能获得的最小延时是块尺寸B。因此最小延时要么为0要么为B,这取决于delread~和 delwrite~对象在执行序列中的顺序。
回过头来再看图7.24和图7.25中的音色,这2个音色都有循环延时,delread~或vd~对象在序列中的位置必须位于delwrite~对象之前。对于任何一个包含"延时输出反馈回其输入"的设计,这都是正确的。最小可能延时是B个样点。对于(典型的)44100Hz采样速率和64个样点的块尺寸,它对应的是1.45ms。这可能乍一听上去并非一个非常重要的限制,但是当你试着把一个循环的梳状滤波器调谐到一个指定音高时,你能达到的最高音高大约只有690Hz。为了获得更短的循环延时,你必须提高采样速率或是减小块尺寸。
示例G04.control.blocksize.pd(图7.27)展示了如何在Pd中控制块尺寸,这里使用了一个新对象:
【block-,switch~:设置对象所在音色窗口的本地块尺寸。块尺寸通常是2的幂次。
此外,switch~对象可以用控制消息来打开或关闭窗口内部的音频计算。额外的创建参数可以设置本地的采样速率并指定交叠计算(在第9章中演示)。
在图7.27a(主音色)中,一个矩形脉冲被发送给pd delay-writer子音色,其输出随后被返送回主音色。图7.27b所示为子音色的内容,它把这些脉冲发送到一个循环延时中。在这个子音色中,block~对象指明了信号计算使用的块尺寸(B)仅为1。因此能够实现的最小延时就是1个样点,而非默认的64。
|Loadbang|
输入脉冲延时时间
|inlet-||inlet
random 60|
ldel1
|delread-G04-de1
+30】
*。0.99|
|mtof
vline-
lexpr 1000/$f1|
|delwrite-Go4-del 1000|
pd delay-writer
outlet-|block-1】
(输出)
设置块尺寸
(b)
图7.27使用块尺寸控制的音色,用来把环路延时将至通常的64个样点以下:(a)主音色;(b)"delay-
ter"子音色,使用了一个block-对象和一个循环延时网络