Max:电影回放

max12

1. 我们可以用imovie物件在一个patcher内嵌入一段QuickTime片段。

2. 例子:imovie物件上方的几个消息框:read将读取特定的电影文件;start开始播放;stop中止播放;dispose(去除)将从imovie物件缓存中移除当前的电影,一但你dispose一个电影档,你可以用read重新载入它。点点这几个按钮试试吧。注意在你每次点击start的时候,它都是从片头开始播放。那五个竖着摆放的rate信息告诉imovie物件改变回放的速度,1.表明按正常速度正向播放,-1.表明按正常速度反向播放;0.5表明用正常速度一半的速度正向播放;0.为暂停,点击其他rate将从停止的位置继续播放。再向右的loop信息可以使电影片段持续循环回放。点击duration消息可以在imovie下方的数字框内获得当前电影片段的长度(单位为毫秒),这有利于我们创作电影配乐及了解当前所在的时间位置。

3. 要更换载入多个电影片段,一个选择是去掉read消息的引数,这样做之后,当你点击read消息框的时候,将自动弹出一个对话框供你选择你电脑系统内的任意文档。但是,向你的imovie物件添加新电影更简单的方式是使用文件浏览器。你可以通过File>New File Browser打开它。里边将装满Max认为的对你的程序创作有帮助的一切文档,包括文件名、文件类型、修改日期和自定义的标签等。点击搜索框旁边的+号,将打开精确检索框,如果某项精确检索是你常用的,你可以点击文件浏览器左下角的+图标将其保存,以供日后使用。将任何文件拖入你的patch,鼠标悬停于物件上方,能够被接收的文件将在该物件周围出现一圈蓝边。比如将一个.mov文档拖到一个imovie物件上将自动载入新的电影档。

4. #1:metro建立了一个基于mousestate物件的测试,mousestate的第二输出口(鼠标水平坐标)被使用,它的值被scale物件scale到-2.~2.的范围内(如果你显示器分辨率水平大于1024,则这个值可以设的更大),scale后的值经过rate消息框发送命令实时控制影片播放速率。

5. #2:这次采集的是鼠标纵坐标,并用它来改变影片回放的点,要实现这个功能,你首先需要得到影片的长度(点击duration获得)。为了完全控制影片的位置,最好将影片速率事先设到0。

6. #3:四个.mov文件首先通过read进入imovie的输入口,接下来,key物件监测我们的键盘输入;a、s、d、f四个键(ASCII码 97, 115, 100, 和 102)经select物件到达switch命令(一个start命令紧随其后,以让视频重新开始)。一切就绪后,你将可以通过键盘上的a、s、d、f四个键实时快速切换这四个视频文件,由于它们已经事先经由read读入imovie物件的缓存,所以在切换时只会有非常小的延迟(个人感觉基本可以忽略不及,但没试过大的文件)。

Max:程序绘制

max11

1. 左上角的例子:counter物件可以生成一组循环的值。依次点击第一个按钮可以依次生成一组0-9的循环值。counter第三个输入口为“赋值于下一次点击”,比如物件改变第一排第一个数字框的数字为5,可以在下一次点击的时候直接跳到5,而无论之前的数字是几,点击蓝色背景的按钮(发送bang信息)则可以将下一次点击的值恢复到零。counter物件最后一个输入口可以实时设定最大值。

2. counter的多引数应用:1个引数:设定最大值;2个引数:设定最小值和最大值;三个引数:设定方向(direction)、最小和最大值。

3. scale物件:将一组输入值的范围(引数前两位)映射到一组输出值范围(引数后两位)内。左列二例:输入值0-100并映射到输出值-1.0~1.0上,即:如输入值为0,则输出值为-1.0;输入值为100,输出值为1.0;输入值为50,输出值为0.0。如果输入值超越输入值范围,输出值也会按计算的增量相应增加。因此,输入150输出则为2.0,输入-100输出则为-3.0。这个物件的引数是用于决定转换的数学表达式。

4. 左列三例:点击第一个消息框,最下边的数字框将在1000毫秒(1毫秒=1/1000秒)内由0增加到目标值(100)。点击第二个消息框,起始值将在5000毫秒(5秒)后回到0。点击第三个消息框,数字将在2.5秒后由20上升到50。

5. 大家伙:

#1:使用了4个不同的counter物件,一个用于设定位置和大小,另外三个改变颜色。需要了解最左边的那个counter是最重要的,它从0数到767,共给我们768步。x/y轴的值则由%(一个数字除以另一个数字,整除后输出剩余的值,例如22%10=2)和/(一个数字除以另一个数字,输出结果)物件计算,将我们的lcd物件打碎为24×24的格子。注意看counter的两个输出,它们均生成了一组0-23的循环,%跑得快,/依metro的速率改变。这个值乘以10(获得左上角的像素位置)后加10(获得右下角的像素值)。这为我们的程序建立了一个可用来作画的以圆形填充的lcd方格界面。另外三个counter物件在三个不同的数值范围内循环,使我们得到了一个不断变色的调色板。第一个引数2强制counter从小值增加到最大值之后再减小到最小值,如此反复。这是在绘制时颜色缓慢改变的原因。这个引数(direction)的使用:0=增加,1=减小,2=增加后减小,如此反复。

#2:运用scale物件绘制基于正弦波计算的形状。counter’物件产生从0到最大值(由metro物件右侧的两个数字框内数字决定)的输出。它被scale物件界定于0.0~6.283185(2×π)之间,而后发送进入一个sin物件,计算出输入值的正弦值,产生一个在-1.0~1.0范围内变动的正弦波。这个值被送入另一个scale物件,映射进入一个整数范围0~319(lcd物件的大小范围)之内,这用于产生x轴的值。它隔壁与它同样的那堆方块儿用于产生y轴的值。这些数字随后被插入一组数列(list)(使用pack物件,使用prepend物件lineto它们)后被传送到lcd内。

#3:目前为止我们见过的最复杂的程序。它依靠lcd物件的空闲(idle)机制做一些程序绘制。当idle消息开启(通过idle 1消息)。lcd物件会输出你鼠标当前相对于lcd物件画布的位置。x/y坐标由lcd物件的第二个输出口输出为一组list。淡蓝色连接线将当前鼠标坐标送入unpack物件,这些值被送入我们的绘画代码,创造出一组值,绘制出两个能够跟随鼠标反应的圆形,并且能够对鼠标与它们的不同距离产生不同反应。开启最顶端的toggle盒子,然后用鼠标在lcd上转转,看看那俩球是如何反应的。

在这个程序内有非常重要的两步:第一,用line物件使得输出值的时间周期为1秒(1000毫秒),这使得产生的结果在不断插入的过程中有一种更有机的感觉。第二,我们运用cartopol(cartesian to polar) 物件使得鼠标的x/y轴(“Cartesian”)笛卡尔坐标值转化为一对基于距离/角(“Polar”)的极坐标值,这对在圆形范围内绘制内容很有帮助。一旦polar坐标被计算出来,它们将被限制符合于圆形绘制范围的大小,然后被用于一个复杂、多消息消息框的一部分,结果就是你看到的那两个球体。

程序底部的消息框发送4个有序的绘制命令到lcd物件。前两个用paintoval命令绘制固定位置(100 100 140 140 和 180 100 220 240)的两个背景圆形,后三个数字0 0 0设定它们的颜色为黑色。后两个用pack物件得到的值绘制出两个绿色(0 255 0)的“追随者”,四个值提供了“追随者”开始和结束的角度并由paintarc命令绘制出来。

6. 结论:运用一组输入值,然后依据你的需要scale它们,这是很多Max程序至关重要的步骤。用counter物件创造循环,用scale物件将输入值scale到输出值,并用line物件在不同的时间内插入数字。有时,我们也会运到一些基于三角学计算的物件。

本例内新物件:

count:计算收到的bang讯息,输出它。

scale:将一组输入值范围映射到一组输出值范围。

line:在一定时间内平滑输出一个值到另一个值。

sin:正弦功能。

cartopol:笛卡尔(Cartesian)坐标到极(Polar)坐标的转换。

相关知识:

1. 正弦:正弦是三角函数的一种。它的定义域是整个实数集,值域是[-1,1]。它是周期函数,其最小正周期为2π。在自变量为(4n+1)π/2〔n为整数〕时,该函数有极大值1;在自变量为(4n+3)π/2时,该函数有极小值-1。正弦函数是奇函数,其图像关于原点对称。

2. 笛卡尔坐标系:在數學裏,笛卡兒坐標系,也稱直角坐標系,是一種正交坐標系。二維的直角坐標系是由兩條相互垂直、0 點重合的數軸構成的。在平面內,任何一點的坐標 是根據數軸上 對應的點的坐標設定的。在平面內,任何一點與坐標的對應關係,類似於數軸上點與坐標的對應關係。

採用直角坐標,幾何形狀可以用代數公式明確的表達出來。幾何形狀的每一個點的直角坐標必須遵守這代數公式。例如,一個圓圈,半徑是 2 ,圓心位於直角坐標系的原點。圓圈可以用公式表達為

3. 极坐标系:在数学中,极坐标系是一个二维坐标系统。该坐标系统中的点由一个夹和一段相对中心——极点(相当于我们较为熟知的直角坐标系中的原点)的距离来表示。极坐标系的应用领域十分广泛,包括数学物理工程航海以及机器人领域。在两点间的关系用夹角和距离很容易表示时,极坐标系便显得尤为有用;而在平面直角坐标系中,这样的关系就只能使用三角函数来表示。对于很多类型的曲线,极坐标方程是最简单的表达形式,甚至对于某些曲线来说,只有极坐标方程能够表示。

Max:随机绘制

max10

1. 那个大家伙:
#1:pack物件的七个值分别为:形状左、右、上、下的位置,以及RGB颜色的三个值(0-255间)。一切随机的值均由random物件生成。
#2:与上同理,区别是由于drunk物件的限制作用,所以方块位置及颜色的变化都非常缓慢。
#3:framepoly由于绘制多边形,每一对x/y值代表一个顶点。pack物件内8个值正好给予4对顶点,随机颜色由prepend frpg(foreground RGB)单独生成(在旁边)

2. drunk物件:第一个引数设定随机值的范围,第二个引数设定随机增减数目的范围。

本例内新物件:
random:生成一个随机数字
drunk:在一定变化范围内生成随机数字(Output random numbers in a moving range)

Max:鼠标绘制

max9

1. Window > Clue Window,将打开线索窗口,鼠标悬停会显示你悬停对象的基本信息,这对帮助理解patch(尤其是那些复杂的)非常有帮助。

2. 勾选Options > Segmented Patch Cords将允许我们绘制曲线连接线。但相比之下我更愿意画斜线后,在直线上点击右键选择Route Patch Cords让程序自己生成合适的曲线。

3. 左上角的例子:点击信息框1后改变数字框内数字大小,则结果显示在gate物件的左输出口(输出1);点击信息框2后改变数字框内数字大小,则结果显示在gate物件的右输出口(输出2)。按照说明文档,我自己又添加了3、4号输入、输出口,结果非常完美的分别输出了数据,我感觉这很像一个路由器,或者某种分配器。。

4. 上例正下方的例子:unpack物件分离多个信息框内的数字进入多个数字框,pack物件重组他们并经prepend物件由print物件反应到Max窗口内。

5. unlock这个patch,将鼠标悬停于prepend物件右侧输入口上,可以看到一个蓝色的圆圈,表明这是一个冷输入口(cold inlet),它不产生任何信息;与之相对的,将鼠标悬停于prepend物件左侧输入口上,可以看到一个红色的圆圈,表明这是一个热输入口(hot inlet),它会在接收到信息之后产生输出。也就是说,只有改变左侧数字框内的数字才会产生输出,而改变右边的则不会,你可以自己尝试一下。

6. unpack之后的两个0代表它可以输出两个数字,有多少个0就代表它能输出多少个数字。若需输出小数可以写为0.;如需输出一个符号(一个词),则可以写为s。

7. 跟在prepend之后的“thelist”可以换为任何我们喜欢和易辨别的词组。

8. 右边那个大块头:那块大的空白叫做lcd物件,我们可以在上边用鼠标任意绘制2维图像。同时或分别按下shift和option/alt键在其上拖动鼠标可以绘制出不同的图形,点击上方不同的颜色框,可以改变绘制图案边框的颜色。

9. 分别按下shift和option/alt键在其上拖动鼠标可以绘制出不同的图形,这是由modifiers物件完成的。我们将option/alt的输出乘以2后将它加到shift的输出上,这样做的结果是:单按shift得到值1;单按option/alt得到值2,两个一起按得到值3;如果没有任何modifiers的键被按下,得到值0。这样的信息传送方式非常适于下边gate物件的发挥。

10. 当前鼠标的位置可以由lcd物件的第二个数出口提供,并由unpack物件分离后显示于其下的两个数字框内,同时,这串数字被输出进入了gate物件的右侧数入口内(例子中的红线)。

11. 现在gate物件控制着将会在lcd内产生什么样的图形。在这些环节中鼠标x、y轴的坐标分别通过unpack物件得到,然后绘制出适宜大小的形状。在gate最左边的路线内,坐标轴的值分别被减10、加10后依如下顺序送入pack物件内:x-10 y-10 x+10 y+10,这串数字随后被送入prepend物件内,在这个例子中,我们在四个数字之前发送了framerect命令,四个数字分别代表四边形的左、上、右、下的边界。

12. 其他的两条路线也是同样的原理,frameoval是画椭圆,paintroundrect是画圆角矩形,除了坐标的四个值外,另外两个数字框的参数控制的圆角的圆度。

13. frgb消息框可以定义在lcd里边笔触的颜色。

本例内物件:
gate:将输入转化为精确的输出
pack:将数字和符号结合为一个list
unpack:将一个list打散为单独的信息(message)
prepend:将一个信息(message)置于其他信息最前端
lcd:在patcher窗口内绘图

Max:键盘与鼠标输入

max8

1. 左例:选中最上方checkbox,移动鼠标,连接mousestate物件的四个数字框内数字会随着鼠标的移动和变化,单击鼠标,连接此物件的checkbox将被同时选中。mousestate物件两个绝对位置(物件下方第2、3个输出端口)坐标x、y轴最大值依屏幕分辨率而定,左上角为0、0,右下角为你当前屏幕分辨率。modifier连接的几个checkbox会在你按下Cmd, Control或Option等键的时候被激活。用于过滤无用数据流。

2. 左二例:键盘输入的字母经key物件转换为ASCII值后由number盒子显示为数字,数字再经由itoa物件(可以将整数转化为字母数字符号)转化为字母经print物件返回显示在Max窗口内。尝试键盘上不同的按键,并注意观察Max窗口返回的值。

3. 中例:keyup物件与key物件功能完全一样,除了只有当按下并放开按键后才报告按键信息(report key information)而外。二者配合最有用之处在于,你可以在按下键之后使key物件开启,并在放开键之后用keyup物件使其关闭。

4. 右二例:numkey物件可以记录并累积你输入的数字,并在你按下回车键后输出这串数字。

5. 右例:mousefilter物件:点击鼠标按键后放开,这时才能允许数字或数据通过。用于过滤无用数据流。

6. 下例:跟着帮助文档自己搭建的一个patch,有趣的是*控制那边(右侧按钮),乘以几,速度就是左侧按钮的几分之一。

Max:数字用户界面

07mNumericalUserInterfaces.maxpat
07mNumericalUserInterfaces.maxpat

1. slider是数字信息存储工具。

2. 横向、纵向拖动slider到一定宽度或高度,可以相应将之变为横向或纵向silder。

3. 左侧例子:size数字框限制slider的范围,min限制slider起始的最小值,mult是递增的量,用以扩大当前slider的范围,表现为向右或向左移动slider滑杆时,slider的值根据mult的值递增或递减。

4. 右侧例子:上方数字框为十进制,中左为十六进制(基数-16),中右为midi,注意下方数字框之前并无小三角,这可以显示更长的数字,并且表明它在lock状态下的值是不可编辑的。

5. 通过物件检查器(object inspector)可以改变以上数字物件的属性,在unlock状态下将鼠标悬停于物件左侧后,会出现一个圆形蓝色背景的i,点击它,则可以激活物件检查器,通过它,你还可以改变此物件更多的属性,比如颜色、字体、字体大小等。

6. 你可以尝试着将物件检查器中各种属性拖入一个unlock的patcher中以验证他们的作用。例如左例中size,min,mult等message物件便是由此生成。