访MAX/MSP和PURE DATA的创建者

2020-05-12 19:28:52

通过搜索编码的未来或通过Apple播客|Overcast|Google播客|RSS订阅您的播客播放器。

Miller Puckette创建了“补丁”Max(MAX/MSP的前身),后来又创建了Pure Data,这是视觉编程和计算机音乐史上最重要的两个工具。Max是米勒在20世纪80年代中期设计的,目的是帮助那些希望在不需要编写C代码的情况下构建自己的动态系统的计算机音乐作曲家。MAX起初没有声音生成设施,但随着MSP的加入,最终会实现这一点。十年后,在一些学术政治废话迫使他离开Max之后,米勒继续创建了它的继任者,开源的Pure Data。MAX/MSP和Pure Data都变得非常受欢迎,Max/MSP是由Cycling‘74(现在归音乐巨头Ableton所有)开发的更漂亮的商业产品,Pure Data是黑客和科技朋克的蓬勃发展的独立社区项目。在这一点上,节点和线路可视化编程语言几乎是陈词滥调,因为它们中的绝大多数要么大量借用,要么至少参考Miller Puckette最初的Max Patcher及其MSP/PD后代的视觉设计。不过,正如你在采访中听到的那样,他们中的许多人因为没有重新考虑他们灵感中的一些潜在假设而变得更穷。

在听了达尔文·格罗斯在艺术+音乐+科技播客上对他的精彩采访后,我决定让米勒参加这个节目。(提示:订阅,这很好。)。米勒很好地重述了Max和Pure Data的历史,以及他创建它们时发挥的作用,这一集是对我们节目中更专注于设计的采访的有力补充。米勒顺便提到,他还没有写的三本书中有一本是他对实时日程安排的想法,所以这是我采访的最初诱惑点。回顾MAX/PD 30多年的历史,他在工具设计方面学到了什么?他没有追求的其他想法是什么?哪里还有改进的空间,也许是其他人从他停止的地方重新开始?

在这次采访中,米勒说了几件事,作为视觉编程的教条主义捍卫者,嗯,听到这些对我来说是痛苦的。所以,如果你开始这样想,这将是一个值得祝贺和崇拜的小时,坐起来,准备好翻转桌子。这次采访令人振奋;就个人而言,我很高兴有机会与我所在领域历史上如此有影响力的人物交谈,我希望你们和我一样喜欢这次采访。

节目引述:“它不仅强大,而且还不够充分。”

你可以收听本期节目,了解更多关于麦克斯和警局的历史。这是达尔文·格罗斯(Darwin Grosse)非常酷的艺术+音乐+科技播客,你可以回到Patreon上。

马克斯·马修斯被认为是“计算机音乐之父”,也是米勒的MAX软件的同名人物。他曾参与过一个名为RTSKED的项目,RTSKED代表实时调度器(Real Time Scheduler)。

当米勒在麻省理工学院时,他可以接触到从事实时计算工作的人,但他们的兴趣并不像人们希望的那样与米勒的兴趣很好地结合在一起。这些人更关心机器人或伺服控制中的缓解振铃等问题。

虽然当时它正在传播,但Miller并没有受到Smalltalk的直接影响,当然也没有受到添加到C++或Self中的任何东西的影响。

要产生延迟效果,您需要唯一命名的延迟线以避免冲突。为了让这一点在Max中很好地发挥作用,米勒增加了名字Minging。对于Ivan来说,这似乎类似于围绕卫生宏的辩论。

74年的自行车是现在拥有和开发MAX/MSP的公司。他们最近被Ableton收购,尽管他们的整合可以追溯到Ableton Live的Max for Live插件。

纯数据试图用一种称为数据结构的特性来解决MAX中的一个问题-缺乏丰富的数据可视化表示。

在纯数据成为“最大克隆”之前,米勒用它做的第一件事就是和物理学家朱迪·布朗一起写了一篇关于相位声码器的论文。

纯数据中数据结构的问题之一是使用名为POINTER的对象进行遍历。当讨论嵌套对象(扩展到嵌套数据结构的概念)时,Ivan想知道这是否与bpatcher有关。

米勒正在学习朱莉娅,她发现它很强大,但有时不如MATLAB直接。

我非常喜欢那样。你在那次采访中说了几件事,我想要跟进。我觉得他们会对我为之做这个播客的社区非常感兴趣。

它被称为编码的未来。对…感兴趣的主要是研究人员,他们大多是独立工作或在学术界工作的人。不完全是人机界面,不完全是编程语言理论…。寻找使工具更丰富、更有活力的方法。对构建视觉环境感兴趣的人有一个非常普遍的线索。MAX和Pure Data是视觉环境历史的两块典型试金石。

你在达尔文·格罗斯的播客上说,你是在30年前第一次研究这个问题的,你对事情发生的确切原因的记忆在这一点上可能是一个遥远的记忆。

嗯。所以,虽然我很想去那个兔子洞问,“哦,你为什么会有这样的刘海,”或者诸如此类的事情,我认为一个很好的起点应该是得到你确实记得的任何东西,关于你是如何着手设计Patcher和Max的,然后是最终的纯数据。

首先,电脑音乐最让我感兴趣的是让它实时工作的可能性。1979年我开始工作时存在的环境几乎完全是非实时的。最初有一些东西可以实时使用,但它们不能以任何非常通用的方式进行编程。所以,你可以选择各种特殊用途的东西,或者一种通用的语言-例如,音乐11,它是Cound的前身,它是一个完全通用的声音渲染器,但它永远不会实时运行。

我在由Barry Vercoe掌管的实验室里,Barry Vercoe是Cound的发明者。Barry真正感兴趣的并不是制作软件合成引擎。事实上,这些在Cound之前就已经存在了。我认为他这样做是为了对社会有实际帮助。他从来不认为这是他的主旋律。他的主要关注点是实时。所以,我爱上了他,并产生了这样的想法,天哪,你可以试着让电脑乐器实时运行,这将是一件很棒的事情。

所以,我考虑的主要事情是,首先,能够以一种软件的方式设计声音。第二,如何解决改变模型时出现的问题,从将穿孔卡片送入计算机,到在键盘上播放或输入其他类型的实时信息-例如,从麦克风输入的声音。在Cound或它的前身中,你不能做的一件事是把麦克风连接到它上面,然后对着麦克风演奏一种乐器,然后让一些回声,或者一些失真,或者滤波,或者类似的东西出来。例如,你不能做吉他踏板。

事实上,我记得有一位参观者参观了麻省理工学院的实验音乐工作室。当我向他们展示我在做什么时,他们问的第一个问题是:“好的,我能把吉他插进去吗?”答案是,“不,你现在还不能这么做。”(笑)“我正在努力呢!”

所以,真的,我想的整个事情与图形编程环境没有任何关系。事实上,当我开始的时候,我甚至没有考虑图形编程环境。我考虑的是实时结构,以及系统对实时输入做出反应的方式。

所以,这是另一种人机交互问题。但这不是在屏幕上安排内容的问题,而是把你的计算机变成乐器的问题。实际上,一开始我甚至不关心你要做什么,才能指定乐器是什么。我只想让它在本质上是工具性的,而不是批量性的。这几乎就是所有术语的来源。

另一位非常有影响力的研究人员,通常被称为计算机音乐之父的马克斯·马修斯(Max Mathews)也关注实时。他的想法之一是你会引发一些事情。触发,我认为从词源上讲是…。我想扳机真的来自于扣动武器的扳机。当人们在1970年谈论触发事件时,我的意思是,拜托,…。当时,国防部为大多数计算机科学研究提供了资金。所以肯定有军国主义的金融背景。就计算而言,时代精神在60年代和70年代是军国主义的。如果你想无聊,你可以做银行软件。如果你想做研究,那你就得到了军方的资助。所以我甚至毫不犹豫地使用了像触发器这样的术语。当然,如果你要触发某件事,那么被触发的自然而然的事情就是爆炸。

我觉得这有点好笑,因为当你把功放插到墙上的时候,你当然不想发生的事情就是让它爆炸。(笑)。

是啊,是啊。因此,这实际上是一种内置的抵御厄运的方式,通过给某些东西起一个最坏的结果作为一个名字。

是的,点击是个小问题,但爆炸会是个大问题!这也许足以让观众离开音乐厅。(笑)。

所以,我开始把这些东西命名为bang,就像是在说,“是的,这不会奏效,但不管怎样,还是让我们来写吧。”(笑)。

嗯。就像一句话。您不能将其解析为数字。我实际上向PD邮件列表提议,“为什么我不把bang改成句点,因为它完全是中性的,它没有说明将要发生什么。”

这本书很好地参考了“银河系漫游指南”,因为某些自动机在银河系传递的信息原来是一个点。意思是“问候”(笑)

不管怎么说,你不会想用感叹号,因为它通常发音为bang。那么,你为什么不直接用句点呢?我得到的回答是,“哦,我们喜欢bang,我们就用bang吧。”(笑声)让我们继续做刘海吧。

可以肯定的是,这完全是Max和PD身份的一部分,也是从那以后出现的衍生语言的一部分。

这是真的。我并不是真的发明了它,因为当然,它是触发器的概念早在那之前就有了。但是扣动扳机的想法,我想很大程度上源于我。

因此,回到您开发Patcher接口之前的早期阶段,当时您正在处理实时调度问题。

简而言之,我只想说:我是可视化编程的铁杆粉丝,喜欢使用图形隐喻来表示程序执行过程中发生的事情。我认为那里有很多非常有趣的想法,它们还没有出现。

但我今天主要想和你们谈的是整个日程安排问题。特别是因为,在对达尔文·格罗斯的播客采访中,你说你还有三本书中的一本是关于日程安排的,所以你有一天可能会写这本书。

所以,这让我觉得,不管你当时有什么想法,直到今天,你仍然有越来越多的想法。我很好奇:你当时是如何处理这个问题的,从那以后,你对这个问题的看法有了什么变化?

首先,在麻省理工学院,我可以接触到那些考虑过实时编程的人。我没有发现他们的研究实际上回答了我提出的问题。所以人们的想法,或者至少是我在那一天采访的人对实时编程和调度的想法是这样的:你有一堆输入,你有一堆输出,你希望输出是输入的某个函数,而不是时间。您只需要尽可能快地计算来自输入的输出,或者可能在某个硬性截止日期之前进行计算。

例如,你不能做的事情是制作节拍器,因为节拍器不是一个函数。这是一种有它自己的状态的东西。

我没有从实时社区中得到任何东西,至少我和它交谈过的一小部分。也有其他地方的人在编写实时操作系统。这一切都是关于中断处理和让事情进入紧迫的最后期限,通常不到一毫秒。

比如你会用来着陆阿波罗着陆器,或者为战斗机做某种电传飞行系统。不管发生什么,你都需要一个结果,可以牺牲结果的质量,但结果必须及时到达。

(笑)我不确定人们会如何谈论质量与及时性的权衡。更值得思考的问题领域是机器人技术。你会有一只手臂,如果你的手臂伸得太远,你想把收益拉回来,这样手臂就会回来。但是如果你做的太晚了,手臂就会收得有点太远了。然后你把它推回去,它就会出得有点太远了,以此类推。很快,你就会打自己的脸。

是啊,或者你会有狩猎行为,它会来回摆动。

对,没错。因此,大多数进行亚毫秒级调度的人真的很担心机器人技术的应用,或者其他类型的伺服控制。

那不是我想要做的。很难解释我想做什么。(笑)但我举的一个例子是,天哪,有人走到那个东西跟前,弹了一个C大调和弦,你只想听到它从扬声器里出来。那你会怎么做呢?

除了这两种示例-基于流的实时模型和基于中断的实时模型-都是Max Mathews的作品。他有一种叫做RTSKED的东西,代表“实时调度器”。他的编程模型是一堆并行进程,每个进程都在等待一种特定类型的触发器来触发它。例如,我会大致正确,但不完全正确,您可以将一架钢琴建模为91个过程。其中每一个都有一个专用的键,可以向下移动-88个键中的一个,或者三个踏板。然后,当它被引爆时,将会有某种行动发生。然后,无论流程是什么,在处理与其触发器相关联的操作之后,它指定它将等待的下一个触发器是什么。

例如,如果你想被指挥,如果你只用节拍演奏,你会等到指挥的节拍为一,然后说,“好的,我会弹奏第一个音符,然后我等着指挥家敲击节拍二,那就是我的下一个等待条件。”“好的,我会弹奏第一个音符,然后等指挥家敲击第二个节拍,那就是我的下一个等待条件。”然后,当第二个节拍出现时,我会演奏下一首曲子,“以此类推,就像这样。

所以,我想了想,我对此有两种反应。其中之一是,通常可能会有几种不同的事情-一种脱节的事情-你会想要等待,并且你可能想要根据可能发生的各种事情采取不同的行动。举个例子,这是个不好的例子,但是钢琴--如果你踩下软踏板,动作就会移动。如果你按一个键,动作就会砰的一声响,对吗?所以,你实际上需要等待两件事,无论发生哪件事,你都需要做出适当的反应。

你事先不知道它们会以什么顺序发生。那就是钢琴在你进去弹奏之前告诉你你要演奏什么乐谱。

让听众来说明一下:移动的动作需要一定的时间才能发生。然后,按下键,如果你在按软踏板的同时按下它,软踏板不一定会移动到足够远的地方,如果你做得非常快的话。

正确的。事实上,这是一个有趣的评论。这正是这个比喻分崩离析的地方。因为事实上,锤子在空中飞过的同时,动作也在滑动。你不知道锤子会打到弦的什么地方,直到锤子真的打到了弦上,这才是真正重要的时候,动作恰好转移到了哪里。(笑)所以,真的,要正确地建模,你需要在时间上做一些连续的事情。解几个微分方程。

我没有把那些东西都考虑进去。我在想,“嗯,听着,这是一台计算机,我们不需要处理身体上的限制,我们可以让事情瞬间发生。”这可能会让你更容易思考和设计乐器,即使乐器可能不会像你真的造出乐器那样有趣。

这就是第一条评论。我开始思考,不是让每个所谓的进程(正如Max所说的那样)具体说明它在等待什么,而是简单地指定它正在等待,并让触发它的东西知道当它停止时必须触发哪些进程。

那么,你是在把一些知识转移到触发信息中吗?

一点儿没错。或者实际上,交给了寄件人。换句话说,不是接收者说我想从哪里得到消息,而是发送者说我要把消息发送到哪里。这是第一个想法。

第二个想法是:与其让世界上的所有数据都是全局变量,为什么不真正将数据封装在作为触发器的消息中呢?我认为人们以前没有这样做过,至少在音乐系统中没有。这就是MAX范型的真正原因--您发送消息的事实是,消息不仅仅是一个触发器…。(笑)这是触发器,加上触发器需要的所有信息,以指明你可能关心的所有事情。同样,由发送者决定,而不是由接收者决定。

足够有趣的是,这意味着收到消息的东西不必出去读取数据,它可以维护自身封装的数据,并且可以将数据作为这些消息的一部分进行接收。因此,通过使用此模型,您将拥有非常高的数据封装度。

那是a,那是正负。这是一个优势,因为它意味着您的程序将更加强劲地增长。当你开始添加东西的时候,你就不会在失控的东西之间有这些相互依赖关系。

是的,你不必担心全球国家会以一种你意想不到的方式改变一些当地的行为。

一点儿没错。但不利的一面是,当然,有些东西真的想要全球化。比如,采样率。因此,您不必将采样率与每条消息一起发送。因此,最终发生的是全球性和地方性之间的一种妥协,在那里,大多数有趣的事情都是实时发生的,都是当地的。但你需要的某些东西,你真的只想拥有-比如存储的声音是大型阵列,或者全局的,比如采样率-这些确实是全局的。在MAX中,实体(称为对象)可以找到它们,并使用它们进行操作。

当你做这项工作的时候,你有没有意识到。

..