ww

ww

Max:数据流控制

1. #1:主要有三点: 1)那个竖着排列可以点选的小圆点是由一个叫做radiogroup的物件弄出来的,用物件检查器将其打开,Number of Items项是几,便有几个小圆点,它们代表的数字由0开始,后续每个递增1。这一特性可以很好的与gate以及switch物件的属性配合。 2)gate物件:一个输入,然后可以选择不同的输出。与switch物件刚好相反。你要几个输出,就将引数设为几。 3)switch物件:一个输出,然后可以选择不同的输入。与gate物件刚好相反。你要几个输入,就将引数设为几。 2. #2: 1)如果你需要既控制特定的输入又控制特定的输出,便需要使用router物件。它的第一个引数为输入的口数,第二个引数为输出的口数。 2)router物件正上方那个网格咱之前没见过,它叫做matrixctrl物件。它与router物件是一对绝配。 3)我们注意到这个网格的线条组成:横四竖三。他们分别代表:四个输出和三个输入。点击任何一个横竖线交叉点,会放置下一个白色红心的圆点,就是由它控制不同输入、输出口的组合。例如,选择左上角的交叉点,这表明我们选择了router物件第一输入和第一输出口这个组合,那么在本例中,它将跟随我们鼠标的轨迹画出一连串空心的矩形。从上至下、从左至右,不同的点对应不同的输出、入组合,依此类推。 4)打开Max窗口,我们可以看到router物件与gate和switch物件的另外不同。还是以点选matrixctrl物件左上角的交叉点为例。这时在Max窗口中显示为0 0 1。这三个数字分别代表:输入口 输出口 状态。这里我们看到,router物件的输入与输出口均是由0开始,而gate和switch物件则由1开始(0代表关闭),这是它们之间的又一个不同之处。第三个数字“状态”:1代表连接,0代表断开连接。因此,如果我们取消matrixctrl物件左上角的点,则max窗口返回0 0 0三个值。 本例内新物件: (gate:将一个输入通过一个特定的输出口输出) switch:通过一个特定的输入输出信息 (router:可配合matrixctrl使用的Max消息整合分配) radiogroup:点选按钮用户界面物件 matrixctrl:矩阵转换控制

Max:演出模式

1. 点击patcher窗口下方第四个按钮将带我们进入演出模式(Presentation Mode),它可以让我们在表演时隐藏我们patch中不需要显示的部分而仅留下关乎操作的部分,也就是设计我们自己的用户界面(UI)。这是Max5的新功能。 2. unlock这个patch,我们可以发现,凡是将出现在演出模式的物件周围都会有一圈粉色的“光环”。 3. 在演出模式下unlock,可以任意移动、缩放你希望改变的物件,这个改动不会改变它们在patch模式下的位置及大小。 4. 在patch模式下,选中你希望放到演出模式下的物件后Object > Add to Presentation将把它们放入演出模式物件中。 5. 在演出模式下同样可以添加新的物件,而且当你返回patch模式,它仍将在原来的位置存在,并且,你可以看到它的粉色“光环”。 6. View > New View 将打开一个与你当前操作的patch一模一样的一个复制品,这么做的好处是,你可以将其中之一放在patch模式,另一个转到演出模式,同时对比两种模式协同工作。 这一课比较简单,所以顺便玩了一下视频录像软件,本来想做成Flash,但想想太麻烦,还不如直接录像。没想到也挺好玩的..

Max:时间控制

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,它的引数以小节小节/第一拍/第一音位。这就是我们如何使音序器循环的:每当它跑到第17小节的时候,我们将被立马带回一开始的部分。 5)棕色部分:key和sel 32捕捉空格键的动作,用timer物件获取每两次敲击空格键的时间间隔,用60000(1分钟)除以这个时间(X !/ 60000=600000,如果得到的值在这个范围之间,则从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信息…

Max:数据采集

1. #1:coll物件的基本使用,点击三个消息框,将建立一个小型的索引,当第一个数字框分别输入0、1、2的时候,底部的数字框将分别得到20、-50和33。双击coll物件,将打开一个编辑窗口,在上面你能看到,消息框的第一个数字为索引,第二个数字则为它们对应的值。其实coll物件完成的就是一个索引值设置的储存机制。 2. #2:与#1一样,只不过是索引换为了符号(单词)。我们注意到要以符号作为索引,必须在存储信息之前加上“store”。 3. #3:已经事先储存了数据在其中。选择0~3,在底部的消息框内会显示不同的句子(由prepend set实现)。用文件检查器打开本例的coll物件,看到属性“Save Data With Patcher”被选中。当这个属性被设置后,当patcher文件被保存后任何储存于这个coll物件的信息都将被写入,并且在patch再次打开后能被立即使用。 4. #4:选中toggle触发drawit子patch内prepend在lcd上画圈,makenote/noteout物件发声。coll物件中存储了150000个索引,prepend画的圈依它们对应的值作为纵坐标,makenote/noteout用它们对应的值乘以127后触发MIDI音符。coll物件存储的值位于一个叫做egg的txt文件中,这样做的好处是,当你需要存储大量数据饿的时候,为你的patcher减肥。 5. #5:现双击打开名为cues的coll物件索引,然后顺序选择数字框的0~7,或者next和prev消息框可以在整个coll物件的索引内实现步进式跳转(需要route物件的配合)。他旁边那一个小patch:双击打开同名的coll物件,我们可以看到,它和#5coll的内容是一致的,因为它俩同名。这很想value物件分享数据的方式。同名coll物件共享可以在整个patch甚至是子patch内实现。 6. 右下角的例子:一个route物件的实例,其实就是将各种输入和其对应的输出分流,你可以通过触发指定的输入得到你要的输出,如同这个物件的名字,你可以把它理解为一个路由器。注意最后一个出口是留给无法识别的信息的,比如此例中的zeppo。在本例中,对无法识别输入信息的处理是打印nomatch内容到Max窗口。 本例内新物件: coll:存储并编辑一组不同的消息集合 route:有选择性的从一个特定的出口通过一个输出 Rio老师关于储存coll物件内容的解读(采于Max 4.6中文教材课程37:资料结构): 一但你將訊息存入coll中後,你可以將之設定為與程式一併儲存。解除視窗鎖定,選擇coll物件,按下Object選單中的Get Info…,勾選Save coll with Patcher選項。 或者你可以將coll物件內容存成獨立檔案(此內容可被用在其他程式內)。你可打開coll物件的文字視窗後,選擇File選單中的Save as…。或是送入write訊息到coll物件內,打開儲存文件對話框。 要由檔案載入coll物件,你可以直接將檔名當成其引數輸入,或是送入read訊息到coll物件,打開開啟文件對話框。

Max:数据结构和可能性

1. #1:在patcher第一次打开的时候,灰色框(itable物件)内布满了随机的值,这是一组基于XY坐标的数据结构图,滑动横向slider物件(X轴)的同时,纵向slider会显示它相应的Y轴坐标。点击旁边两个信息框,第一个当你X滑动到50的时候,Y会显示为80,100和20那组数据同理。你可以点击并拖动鼠标在itable内画下一组数据结构,如果你想画直线,那么同时按下shift键。

Max:远程信息

1. 除了使用连线的方式,我们还可以使用send和recieve物件传递信息。这可以免去过多连线造成视觉混乱的弊端。 2. 与send物件同名的所有receive物件都将接收到同名send传送的信息并同时做出相应改变。这种效应在教程中被称为“广播”(Broadcast)。注意,同名send发送的消息会被整个Max环境中的所有同名receive接收到,包括其他patcher里的receive。新建一个patcher,可以实验一下。send和receive在物件内可以分别缩写为s和r。 3. slider那组例子中,set $1是数字框的一个message,它储存并显示当前数字,但并不触发output。这应该是之前的知识,只是我忘了,所以补充一下。 4. 另一种传送远程信息的方式是运用消息框,在希望传送的名称前加上分号(;),比如 ;bob 155 就等于将值155传送到任何以bob命名的receive物件。演示patcher左下角那个绿色消息框就是个很好的例子。点击它,看结果。 5. 运用forward物件可以分配send的讯息流向。 6. 一个没有名称的receive物件可以接收来自任何send物件或以上方式远程传送的讯息。set讯息可以对receive物件实施更名,因此它可以监听patcher内不同的部分。例子中forward隔壁就是这样一个receive物件。选择一个不存在的名称将切断它的监听动作,注意只有未命名的receive物件才会有输入口。 7. 右上角的例子,int和float物件,左输入设定并输出一个值,右输入设定储存但并不输出一个值(这个值需由一个经左输入触发的bang输出,例如例子中的按钮)。第一次bang将输出它们的初始值,也就是它们的引数。 8. value物件,类似一个int/float物件及send/receive组合的合体,每一组value物件都有一个名字(本例中为joe),任何一个value物件的值都将被其他同名value物件共享,改动本例其中一个value物件的值,然后bang另外一个,看看得到的是不是同样的值。value物件可以接受除整数、浮点数以外的任何类型的讯息,包括符号和list。 本例内新物件: send:无线传输信息 receive:无线接收信息 forward:向多个物件传输远程信息 int:储存一个整数值 float:储存一个小数 value:与其它物件共享一个储存的数字