在「生成式艺术和算法创作」系列第二篇中,00 介绍了随机和噪声在算法创作中的应用。
今天我们一起来用 Max/MSP 实现一个半(hu)仙(shuo)算(ba)命(dao)小应用,加深对 Max/MSP 中 random
对象的了解,并且学习如何使用 coll
对象。
名称:麦克斯半仙儿(又名 Random Bullshit)
主要使用的对象:random, coll, route, jit.cellblock, fpic
难度系数:
背景知识
巴纳姆效应(Barnum effect)是 1948 年由心理学家伯特伦·福勒通过试验提出的一种心理学现象,以杂技师巴纳姆的名字命名。巴纳姆效应是一种心理现象,人们会对他们认为是为自己量身订做的一些人格描述,给予高度准确的评价,而这些描述往往十分模糊及普遍,以致能够放诸四海皆准适用于很多人身上。
据说巴纳姆的成功秘诀是:「永远要让每一个观众都感到自己若有所获」。意思如果要让每一个人都能感到对自己个性的描述是准确的,就要去提供一些放之四海而皆准的描述。看手相、算命、占星术及其他伪心理学经常利用这种效应,怎么说都能让你听着有点儿道理。于是有人将十二星座的描述随机排列,发现不同星座的描述基本上可以适用于其他星座。
所以今天我们来实践一下这个想法,看看程序随机给出的星座描述,有没有戳中你 。
任务拆解
这个程序叫麦克斯半仙儿,用户选择自己的星座后,程序给出描述。最后的成果是这样:
image
首先来拆解需要干的事儿:
收集十二星座的简短描述和图标
存储文本,方便随机调用
12 星座的选择控件
显示结果(包括加载默认值)
开始动手前,请复习 Max/MSP 文档中 random, coll, route, jit.cellblock, fpic 等对象的说明。
实现步骤
这个小程序的核心是用 random
对象随机显示 coll
对象中存储的内容。coll
即 collection,用来存储一个列表,列表中每一项都包含 key 和 value(中间用 , 隔开),可以通过 key 获取对应的 value。value 可以是单个值,也可以是以空格分隔的多个值。
在 Max 中新建名字为 blah 的 coll
对象,双击(或者 cmd+点击)打开,填入我们在网上找到的十二星座描述内容,格式如下:
0, 你大方、明朗,全身充滿活力……; 1, 你不但好學、知識豐富,還很……; 2, 嗯,你善於說服別人,還是個……; ……
十二个星座描述的索引是从 0~11,所以在 coll
前用一个 random
对象随机选取其中一个星座的描述,然后从 coll
的左出口输出。因为我们存储的是文本内容(symbol),所以需要用一个 route
对象读取 symbol 内容,并发送到显示区域。
image
如果不想每次双击打开 coll
查看,可以用 refer 名字
消息连接一个 jit.cellblock
查看 coll
里面的内容。
随机调用的内容准备就绪后,接下来是选择星座的界面:
image
用 fpic
显示星座图标,在上面覆盖一个 button
对象,将按钮背景设置为透明。然后将按钮连接到 random
对象,读取 coll
的内容。
因为想显示每次选择的星座名称,所以每个按钮连接了一个包含对应星座名称的 message
,点击按钮时可以触发显示在内容区域。其实用 radio group
对象能更好实现,但是它的 UI 不好自定义,就放弃了。
完整的 patch 如下:
image
后记
程序做好以后,随机生成了几个描述,发到朋友圈,让大家猜这些描述原本对应的是什么星座。
BarnumEffect2.png
BarnumEffect3.png
BarnumEffect4.png
BarnumEffect5.png
作者:Kidult
链接:https://www.jianshu.com/p/ae2e4fccaac9