web analytics

Max:时间控制

19mTiming.maxpat
19mTiming.maxpat

1. 例1:pipe物件起到一个延迟输出的作用,引数为希望延迟输出的时间(以毫秒为单位,1毫秒=千分之一秒)。左侧数字框为将要延迟的数字,右侧数字框为延迟的时间。

2. 例2:delay物件类似于piep的功能,区别是,delay是专门用于延迟bang信息的。与pipe一样,右边数字框也可以手动设定希望延迟的时间。

3. 例3:clocker物件与metro物件密切相关。二者原始的区别在于输出:metro是以固定的时间间隔产生bang信息,clocker则输出在你发送一个bang信息后消耗的时间(依毫秒计)。点击stop将停止clocker,重新发送bang信息,则计时器清零重新开始。

4. 例4:timer物件是另一个计时工具,它能记录你点击左、右两个按钮间的间隔时间。类似速度选择里的Tap功能。注意timer物件与Max其他物件有些许不同,因为它的右输出为热输出,而不是惯常的左输出。

5. 例5:在实践中展示了几个最常见的布尔体系的物件。 >(大于),当公式成立返回值1(真),反之则返回值0(假);<(小于)与大于相反;==(等于),当输入值等于它的引数的时候返回值1;!=(不等于),与等于相反。&&(逻辑和),只有当两个输入的值非零的时候,他才会返回值1,反之则输出值0;||(逻辑或),当左或右至少一方输入值非零,它就将返回值1,其他任何情况,均返回值0。

6. 大家伙例6:
1)韵律时间控制(Metrical timing)基于一个中心时间保持物件──transport,它的作用是向其他物件发送时间信息。在与它的结合使用中,时间用韵律乐谱(metrical notation)表述:4n(四分音符)的值可以被用于毫秒时间乐谱(millisecond timing notation)的替代。transport物件是中心时间保持者,并将时间以小节/拍/音位(tick)的形式提供─全部基于一个速度和一个拍子。因此,如果一个传送设置为以四分之四拍、每分钟120拍的速度运行的话,每一拍将占据500毫秒,一小节则为2秒(2000毫秒)。

2)选中大黄toggle按钮开启程序──主要由于它开启了transport。大toogle同时开启了它左边红色部分的小toggle,它使用了4n作为时间的引数。之前,我们都使用毫秒作为metro物件的时间控制,但在本例中,4n乐谱意味着它将在基于transport时间的基础上每四分之一音符发送一个bang。这个metro输出到两各地方:到一个产生MIDI音符70(通过makenote物件)的消息框,然后回到transport。为什么它会被tranport路由?因为收到bang信息后,transport会以小节/拍/音位(tick)的形式输出当前的时间(它下方的三个数字框)。这里默认每一拍含有480个音位。

3)绿色部分:使用小节数+大于、小于物件来决定我们是否处于第4和第8小节之间。当我们处于这个范围内的时候,触发另一个以十六分音符定时的metro。通过random和select物件在四个数中选择一个随机值,这些数字被送入makenote物件后生成MIDI音符。这个值同样被送入一个引数为4nd的pipe物件,将此值延迟一个附点四分音符。这个输出再加上7,这样的结果教程上写的是“sounds a perfect fifth above the original”,我不知道该如何翻译才好。。

4)蓝色部分:这是使整个音序器循环的部分。它的头部是一个新的物件:timepoint,它的引数以小节/拍/音位(tick)标注,当transport的时间到达它的引数的时候发送一个bang,在本例中,当音乐行进到第17小节的时候,一个四个音符的和弦被送入makenote,同时一个bang经0.消息框被送入transport的右输入。这个信息(0.)告诉transport回到起点,第一小节/第一拍/第一音位。这就是我们如何使音序器循环的:每当它跑到第17小节的时候,我们将被立马带回一开始的部分。

5)棕色部分:key和sel 32捕捉空格键的动作,用timer物件获取每两次敲击空格键的时间间隔,用60000(1分钟)除以这个时间(X !/ 60000=600000/X)可以得到bpm值(每分钟的拍数)。但是,我们希望这个值在一个可感知的范围,所以我们使用split物件采30.~200.之间的值,如果得到的值在这个范围之间,则从split物件左输出口经tempo信息传入transport,这将迅速改变音序的回放速度以及一部分(并非完全)用于构成音序器的物件的相对速度。如果timer输出了一个split规定范围之外的值,则这个值将从split右输出输出并被忽略。

6)蓝紫部分:并非所有音序都会改变的原因在于一些patch使用了标准(毫秒)时间而非韵律时间。这个部分就是个很好的例子。当音乐进行到第6小节第3拍的时候,timepoint触发按钮。开启clocker跑10秒(10000毫秒)(当clocker的值大于10000之后,深红色按钮触发stop消息框停止clocker的运行),每四分音符弹响一个两个音符的和弦(紫色小按钮)。timepoint同时将一个bang送入delay 3000物件,在收到bang后推迟3000毫秒触发一个两音和弦的声音(深绿小按钮)(仅触发一次)。在一个很慢的tempo下,当timepoint被触发后,它也许只能进行几拍,当tempo很快的时候,它也许又能跑几小节。这就是标准时间与韵律时间混搭产生的奇妙结果。紫蓝按钮正下方那个timer的存在仅仅是为了证明clocker的确是不多不少跑了10秒而已。。。

7. 如果运行诸如本例这样的以时间作为决定性因素的例子,通常建议选中Options > Overdrive,选中后,事件程序和计算将优先于屏幕绘制和图形程序。

本例内新物件:
pipe:延迟数字或数列
delay:延迟一个bang信息
clocker:以固定的间隔报告已消耗的时间
timer:报告两个事件之间的时间
>:在两个数字之间比较,大于
<:在两个数字之间比较,小于
==:比较两个数字,如果他们相等则输出1
!=:比较两个数字,如果他们不等则输出1
&&:如果全部数字都是非零的,则输出1
||:如果两个数中有一个是非零的,则输出1
transport:控制一个主导时钟并报告时间的值
timepoint:当达到transport一个特定时间的时候输出一个bang
split:寻找一组数字的范围

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注