文本阅读:
1.9示例19
转换。输入和输出均为消息(两者也有相应的"~"版本,但与dbtorms~一样,它们都是非常耗费CPU资源的)。当输入为0或负值时,ftom对象的输出为一1500;反之,若给mtof输入-1500或更低的数值,则其输出为0。
r frequency|
r pitch
|Bet $1(
set $1(
8 frequency
e pitch
Etom|<把频率转换成"MIDI"音高tof|<把"MIDI"音高转换成频率e pitch
sfrequency|
店1.13A06.frequency.pd中进行的音高与频率的相互转换receive,r:用来接收非本地消息。receive对象可被缩写为r,用于等待接收由send对象(将在下文介绍)发送的消息,或是由使用了重定向(即前例A01.sinewave.pd中讨论过的";"功能)的消息块发来的消息。参数(如本例中的"frequency【频率】"和"pitch(音高】")指明了消息发送目的地的名称。多个receive对象可以共享同一个名称,此时任何发送给该名称的消息将会发送给所有这些对象。
send,s:send 对象可以被缩写为s,它会把消息发送给 receive对象。
这里使用了数字块的2个新属性。前文中我们已经把它们作为控制或是显示来使用,在本例中,2个数字块都同时实现了这2种功能。如果一个数字块从其输入口获取了一个数字,那么它不仅会显示该数字,并且会把该数字发送到其输出口。不过,也可以向数字块发送一个"set(设置"消息,比如本例中的"set55"。这将会把该数字块的数值设置为55(并显示出来),但不会像那个简单的"55"消息一样产生输出。在这种情况下,从2个receive对象接收到的数字将会被消息块格式化,即被读成"set55"而非"55",依此类推。("51"这个特殊的单字会被接收到的数字所替代。)我们必须这样做,否则将会得到一个无限循环,频率会改变音高,然后音高又会改变频率,并无限进行下去,或是至少要等到有外力来破除这个循环为止。
1.9.6更多的加性合成
示例A06.frequency.pd中的大三和弦展示了通过累加的方式把几个正弦组合在一起的方法。还有很多其他方法能够对多个正弦进行组织,在这里我们将介绍2种。示例A07.fusion.pd
(图1.14)中有4个振荡器,其频率比为1:2:3:4,相对幅度分别为1,0.1,0.2和0.5。各个幅