© Shine's Blog

Powered by LOFTER

[MaxMsp 中文教程] Basics 04.Metro And Toggle

(请前往 http://cycling74.com/downloads/ 下载Max的试用版,打开后点击菜单Help-Tutorials,即可看到Max教程,本教程即是其中内容的中文翻译,请结合软件给出的示例工程学习)

 

自动化操作

    这一节教程讲的是自动化操作与如何实现与控制自动化。我们会用toggle的界面来控制metro(节拍器)。我们也会深入学习一下相关的argument并改变它们。

    你家用的最多的东西就是灯的开关——它为一个复杂的系统(你家的灯)提供了一个简单的用户界面。同样的,toggle就是这样一个东西,与metro的时间自动控制功能相结合,能制造出一个具有简单交互界面的复杂自动化操作。

玩一下toggle

    看一下04mMetroAndToggle这个示例文件。最左边的patch是一系列链接到一个正方形框的message框(还有一个按钮)。先点击那个正方形,我们看到它变为一个选中的状态,它发出了一个“1”到下方的数字框中。再次点击这个正方形,选中状态会消失,并发送出一个“0”。这就是这个东西所做的全部事情——它要么输出0,要么输出一个非0的数值,这取决于它的状态(关上还是打开)。这个object的学名叫toggle,它是Max编程中最常用的object之一。

    与我们使用电脑时所见到的大部分复选框不同的是,这个正方形复选框可以通过发送给它信息来自动控制它。点击连接到toggle的message框,看看它们对toggle有什么影响。通过观察连接的数字框,我们可以看到,除了0之外的任何数字都能让toggle变为打开的状态(正方形内会显示选中符号),而且,toggle会将收到的数值再输出出去。点击0能关上toggle,然后输出0。

    按钮对toggle的影响更有趣。点击按钮可以让toggle在打开与关上之间切换,而它输出的数值也会在0和1之间切换(看Max window和数字框的显示)。这就是toggle名字的由来——它能通过接收到的信息来改变自己的状态。

初识metro:节拍器

    中间的patch包含有一个新的object:metro。metro发出的是bang信息,与按钮很像。但是,与按钮不同的是,metro能以一种预先设计好的方式将信息发送出去。一旦开始了,metro会一直发送bang信息,直到结束。点击连接着metro的toggle,观察结果——它每秒发送一个bang信息(在这种情况下,发送给了一个按钮)。我们可以通过关上toggle来让它停下来。metro是Max中可以用来制造自动化操作或自运行的object之一。

    如果我们点击链接到metro的按钮,我们可以看到,这也可以启动metro。如果我们再次点击按钮,可以看到metro被立刻又触发了一次,快速点击按钮,这样的情况会不断出现,只有我们不再这么频繁地点击按钮时,metro才会以每秒一个的频率输出bang信息。当一个metro收到了bang信息,它会“重启”自己,并从最后一个bang信息开始运行它的输出计划。当我们想要关上它时,可以点击写有“stop”的message框,这等于发送了一个0给它。

    我们怎么改变metro输出bang信息的速度呢?这是通过设置bang信息之间的间隔时间来实现的。metro有一个argument(在这个例子里就是那个数字1000)来设置bang信息之间的时间间隔(以毫秒为单位)。1000毫秒等于1秒,这就是为什么这个metro每秒输出一个bang。怎么改变这个速度呢?用metro右上角的入口来设置这个值,从这里输入数字可以让你直接设置时间间隔而不必手动改变argument的值。

    在这个patch中,有一个数字框连接着许多个message框。点击2000那个message框,(在下一个时间间隔之后)输出会减慢到每2秒输出一次。点击500会使metro的速度上升,一秒发送两次bang信息。250则是一秒4次bang信息。改变时间间隔不会改变toggle的状态(比如是“打开”还是“关上”)。

    从右端入口改变argument也不会改变metro本身包含的那个为1000的argument。为什么呢?将新数值显示出来不是会更方便吗?也许吧,但是那样意味着任何改变object的行为都会保存到patch中去,然而,大多数时候,你会想要保持那个你输入进去的argument,因为它设置的是metro的默认值。Max中许多object都是这样的:它们的一个或几个argument会拒绝被输入进来的message改变。

同时运行

    我们教程中的第三个patcher是一个单独的toggle连接着另外3个toggle,这三个toggle每个都连接着一个argument不同的metro。打开最上面的toggle,metro会创造一个急速的“灯光秀”。这是因为三个metro的argument是相互关联的:第一个metro每秒输出一个bang(1000毫秒),第二个每秒三次,第三个每秒四次。没有东西控制着这个显示模式——它会出现单纯地是因为metro的argument是恒定的,所以这个显示模式不断地出现。注意metro的时间间隔设置既可以是整数的(比如1000)也可以是浮点数的(比如333.33)。

    让我们用已学到的知识来扩展一下我们创建节奏模式的能力。我们可以通过改变每个metro的时间间隔来创建新的patter,让我们先来添加3个信息框,分别包含数字500、200和750,然后分别将它们连接到三个metro的右端入口上。当我们点击message框来改变metro的时间间隔时,没有明显的模式出现。这是因为我们需要将三个metro的开始时间同步起来,这需要我们将最上面的toggle关上后再打开。结果是一个在中间飞速闪烁的按钮,搭配着两边以某个模式与其同步的两个按钮。 

    让我们来创建另一个pattern,将message框的数值设置为200、400和600。但是,现在不用toggle来控制metro了,而改用一个按钮来控制,将一个按钮连接到全部三个metro的左入口上去。点击三个message框,然后点击按钮,这将重启所有metro。按钮会迫使metro重新同步开始,获得我们预期的“滚动”灯光效果。

结论

    自动化操作是用于现场演出的Max工程的核心,而metro通常是这些操作的开始部分。一旦开始了,Max的规划系统为时间的运行提供了一个稳定的系统,我们能让事件不受干扰地按计划发生。

    通过像toggle这种与复选框类似的object来控制patch也是一个编程的关键工具,因为一个单独的toggle就可以为很多复杂的操作提供一个开关控制界面。


发表于2014-07-07.