© Shine's Blog

Powered by LOFTER

[Max Msp 中文教程] Basics 03.Numbers And Lists

翻译:阳光

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

Max中的数字信息

        Max编程中对不同类型数据的处理是非常重要的部分。在本节教程中,我们会看一下Max对一些其他数据类型的处理方式:数字与列表。我们会花一些时间来看看那些能让我们处理数字的用户界面元件,并学习如何使用argument来将列表中的元素插入到信息中。
        
        由于文字构成的信息对与人的交流来说非常重要(稍后我们会知道这对发送命令给许多max object也非常重要),媒体世界的很依赖数字,不管是MIDI音符数据、视频像素颜色或者机器人动作操控。了解数字信息是如何处理的,对理解max如何工作非常重要。
        
        Max中的数字信息并不总是单独存在的,它们通常会与命令或其他信息绑定在一起来创建一个数据列表,这个列表对其他object、你的用户或者外部世界有用处。因此将信息绑定到列表中对于创建有效的数据结构来说是很必要的。
        
数字框

        看一下03mNumbersAndLists示例文件。它包含了几个小的patch,具有数字和列表的操作功能。最左边的patch有一个大家第一次见的object(绿色的),它是处理整数的,并能接收很多不同的信息。点击连着它的那些message box,并注意它们是如何影响数字框的(也就是通过print显示在Max window中的信息有什么不同)。
        
        最值得注意的变化在数字信息被送到数字框时出现:它显示出送进来的数据并且从自己的出口将这个数据输出出去。当一个附点数字(比如3.5)送了进来,它会只取整数部分而不管小数部分。如果非数字信息被送进来(比如文字Hey!),Max window会显示一句数字框的牢骚,告诉我们它不能理解这种类型的信息。
        
        两种特殊的信息会被数字框接收。第一种,给数字框一个bang会让它输出当前的数值,而不会改变数值。第二,在信息前面加上set可以在改变数字的同时不形成输出——也就是说,这是一种“悄悄地”改变数字框内容的方法。这个set方式对max object来说是很常用的,它可以实现在不触发任何其他信息的情况下改变一个object的状态。
        
        右边那个patch也是类似的,只不过用了一个附点数字框,它能处理小数部分并进行输出,它与整数框有很多相像的地方。但是,当它接收到一个浮点数的时候,整个数值都会被保存在数字框中(并显示出来)。bang信息和set的用法对它来说都是一样的,Hey!对它同样也不起作用。
        
数字框的控制界面

        除了能发送信息给数字框,我们还能直接输入并编辑储存在数字框中的信息。比如,我们可以在框内点击并拖拽鼠标来收到改变它的数值。这在表演时时很有用的,因为我们可能想要在patch运行的过程中实时改变一个数值。我们不需要输入所有我们想要的数值进去,可以通过手动操作来做到这一点。如果我们在整数框里点击并拖拽鼠标,我们可以看到Max window里显示的是一连串的数据——数字框为每个我们经过的数值都制造了输出。
        
        操作整数框时,我们很容易地就能通过拖动来改变数据——向上移动会给数值加1,向下移动减1。但是我们操作浮点数字的时候,增加或减少是怎样实现的呢?在浮点框里,会根据我们鼠标拖拽时所处的位置来决定最终的结果。如果鼠标是在数据的整数部分(小数点左边),拖拽会与整数框产生相似的后果。但是,如果我们把鼠标放置在小数部分,我们可以改变任意一个位上的小数,这让我们能对数字框中的数字进行“粗调”与“微调”。
        
        有时我们可能会觉得拖动产生的数据量过于多了,也可能我们确切地知道想转变到什么数字上去。不管是整数框还是浮点框,我们都可以在patch锁定的情况下点击它们,然后输入你想要的数字,再按回车或点击别的地方来完成输入,这是个方便的输入数值的方法。注意新的数据会显示在数字框里,并且它也会将数值输出出去。
        
        第三个patch有三个数字框互相连接着,在这里,你可以看到整数框与浮点数框之间的区别——浮点数框有一个小数点。如果你改变最上面的数字框(浮点型的),你会发现它的数字可以改变中间的整数框,然后再改变最下面的浮点框。你也可以直接操作整数框来看看它的信息是如何影响浮点数框的。
        
        输入一个大数到最上面的数字框里,比如60000.你会发现整数框不能显示这个数字,因为对于现实区域来说这个数太长了,解锁patch并将鼠标移到整数框的右侧,你会看到一个小的把手出现,然后鼠标会变成一个左右箭头的形状,这叫做一个可以长大的框,可以用这个方法来改变Max中的大部分object的大小。点击并拖拽把手来改变数字框的长度,然后点击一个空白区域来完成改变。你会发现数字显示出来了。
        
        最后,输入一个大得离谱的数字,比如7245569558。这时整数框会显示-2147483648。为什么会这样呢?虽然浮点数有一个非常大的范围,但32-bit的整数有个最大数限制——2147483520。任何大于这个数的数字都会自动变为最大的负数。其他非常大的数值可能会产生其他的数值结果,这取决于你那个叔超过了这个界限多少。
        
看一下列表(list),并改变argument

        最右边的patch有一点不同——它只有一堆写有数组与文字的message框。当我们点击写有60 30的这个message框的时候,我们可以看到两个数字被同时显示在Max window里。多个数字与文字的组合叫做一个列表,列表是将多个数据组织到一个单独message中并通过patchcord发送给其他object的机制。数字可能是整数、浮点,或是二者的组合,正如你在第二个例子中看到的那样(22 33.9 -5 -44.2)。
        
        注意:Max中的一个列表要么以数字开始,要么以文字开始(例如list notes 60 67 74)。
        
        下一个例子是一个数字框连接到一个message框。用鼠标来改变数字框的数值,Max window会显示那个包含fleas的信息,但是$1的部分是由数字框的内容决定的。$1叫做一个可代替argument,它允许你能用一个不断改变的值来代替message中的某一部分。
        
        最后一个例子接收了两个数值(由$1与$2标注出来),并利用接收到的数值来输出包含fleas和ticks的信息。你最多可以有9个可替代argument,用$1到$9来表示它们,argument可以用任意顺序排列。让我们试验一下argument的用法:
        
        解锁patch,然后选择最后一个message框的内容,在已有文字的最后,加上如下信息:$2 ticks are worese the $1 fleas。
        
        锁定patch,然后点击两个连接着的列表的其中一个。你应该能看到Max window显示了新的内容,message的相应部分被argument代替了。这展示了可替代argument是可以被重复使用的(比如你可以在同一条信息中有多个$1)并能以任何顺序来提取它们(比如在一条信息中$2可以在$1前面)。
        
结论

        Max可以数字数据当作信息来发送,就像蚊子一样。有一些有用户界面的object可以帮我们构建数字信息,比如整数框和浮点数框。Max也可以利用list来将一组数字存到一个单一的message中,message框可以用可替代argument来构建列表和其它更复杂的信息。

发表于2014-07-07.