第8-9讲 制作交互式声音艺术
调动至今学过的所有技术,开始制作原创的交互式声音艺术作品。用两讲的时间,从主题的选定推进到声音制作。
本讲目标
- 开始制作原创的交互式声音艺术作品
- 确定主题(motif)与交互方式
- 让 micro:bit 的传感与 Pd 的声音合成联动
- 制作作品说明表
需要准备的物品
| 物品 | 说明 |
|---|---|
| micro:bit V2 | 内置传感器的单片机开发板 |
| USB 线 | 连接 micro:bit 与电脑 |
| 电脑 | 已安装 Pure Data |
| 头戴式耳机 / 入耳式耳机 | 用于确认声音 |
| 笔记本・书写工具 | 用于绘制创意草图 |
Step 1: 主题的选定
什么是主题(motif)
主题(motif) 是指作品的 题材或主旨。这是决定「想表现什么」的第一步。
交互式声音艺术的主题大致可以分为 两个方面。
声音的主题 — 用「声音」表现什么
指想通过作品传达给体验者的世界观与氛围。像「雨的声音」「深海的静谧」「祭典的热闹」这样,思考想通过声音传达什么样的体验。
有实体的主题 — 体验者实际接触的东西
在交互作品中,体验者 拿在手上、活动、触摸的物理对象 也是主题的重要组成部分。不是直接把 micro:bit 交给对方,而是把它组装进某种形态里,体验的说服力会大不相同。
| 实体的主题 | 组装方式 | 与声音主题的关系 |
|---|---|---|
| 手电筒 | 把 micro:bit 放进手电筒里 | 照射的方向会改变洞窟中的声音 |
| 团扇・折扇 | 把 micro:bit 贴在团扇上 | 扇动的动作会产生风声 |
| 沙漏 | 把 micro:bit 放进沙漏型的外壳里 | 倾斜时流出沙子落下的声音 |
| 毛绒玩具 | 把 micro:bit 藏进毛绒玩具里 | 摇晃或抚摸时叫声会变化 |
| 乐器形状的物体 | 把 micro:bit 装在吉他或沙锤的形状上 | 摇动・倾斜的动作就成为演奏 |
| 盒子・容器 | 把 micro:bit 放进盒子里,做成可以开合盖子 | 打开盖子时声音从里面溢出 |
| 植物模型 | 把 micro:bit 藏进盆栽型的物体里 | 手靠近时会发出花开的声音 |
有实体的主题会改变作品
即使是同样的「用加速度传感器改变音高」的机制,直接手持 micro:bit 与把它组装进剑形物体中,体验者的感受也完全不同。拿什么、摸什么,与声音同样左右着作品的印象。
活用身边的物品(百元店的小物件、纸箱、塑料瓶等),构思符合概念的形态吧。
主题的示例
试着把两个方面组合起来思考。
| 类别 | 声音的主题 | 实体主题的例子 | 体验的意象 |
|---|---|---|---|
| 自然现象 | 雨、风、波浪、雷 | 团扇、雨伞、贝壳 | 扇动团扇发出风声,倾斜雨伞改变雨声 |
| 日常动作 | 烹饪、打扫、手工 | 汤勺、扫帚、锤子 | 挥动汤勺发出锅的声音,敲击的力度改变声音 |
| 情感 | 喜悦、恐惧、疗愈 | 八音盒、盒子、灯笼 | 打开盒子发出不可思议的声音,点亮灯笼发出疗愈的声音 |
| 空间 | 洞窟、宇宙、森林、水中 | 手电筒、望远镜、瓶子 | 手电筒的朝向改变洞窟内的声音 |
| 生物 | 鸟、虫、猫、鱼 | 毛绒玩具、蛋、羽毛 | 摇晃毛绒玩具时叫声会变化 |
| 抽象概念 | 时间、颜色、温度 | 沙漏、万花筒、气球 | 倾斜沙漏发出时间流逝的声音 |
思考的提示
试着向自己抛出以下问题。
- 「听到什么样的声音会有趣?」 --- 想象日常听不到的声音
- 「拿着什么东西会有趣?」 --- 想象体验者接触的物体
- 「想用什么样的动作发出声音?」 --- 思考如何活动手中的物体
- 「希望体验者产生什么样的心情?」 --- 决定想通过作品传达的印象
构思创意的诀窍
首先把想到的东西全部写到笔记本上(头脑风暴)。数量比质量更重要。先想出 10 个以上的创意,再从中挑选最有趣的一个。
先分别列出「声音的主题」与「实体的主题」,再进行组合,更容易产生意想不到的构思。
Step 2: 交互方式的确定
使用传感器的选择
从 micro:bit 内置的传感器中,选出与主题相配的。
| 传感器 | 可以检测的内容 | 交互的例子 |
|---|---|---|
| 加速度传感器 | 倾斜、摇动、冲击 | 摇动→打雷,倾斜→风向改变 |
| 光线传感器 | 光的量 | 用手遮住→进入洞窟,照射光线→天亮了 |
| 麦克风 | 音量 | 出声→回声返回,拍手→打击乐器响起 |
| 触摸传感器 | 对 logo 的接触 | 触摸→心脏的跳动,离开→寂静 |
| 按钮(A/B) | 按下的操作 | 模式切换、音色的变更 |
| 地磁传感器 | 方位 | 朝北→风声,朝南→浪声 |
交互的设计
把 输入 → 处理 → 输出 的流程画成图整理出来。
【输入】 【处理】 【输出】
micro:bit Pd 补丁 扬声器
━━━━━━━━━ ━━━━━━━━━ ━━━━━━━━
加速度 X轴 ──→ 转换为频率 ──→ 正弦波的音高
加速度 Y轴 ──→ 转换为音量 ──→ 整体的音量
按钮A ──→ 模式切换 ──→ 音色改变一定要画设计图
不要一上来就开始编程,先在纸上画出设计图。事先明确「哪个传感器的数值」「如何被转换」「变成什么样的声音」,制作就会顺利地推进。
设计表的填写示例
填写以下项目,把交互明确下来。
| 项目 | 填写示例 |
|---|---|
| 主题 | 海中的世界 |
| 输入传感器1 | 加速度传感器(倾斜) |
| 操作方式1 | 把 micro:bit 左右倾斜 |
| 声音的变化1 | 浪声的音高会变化 |
| 输入传感器2 | 光线传感器 |
| 操作方式2 | 用手遮住/放开 |
| 声音的变化2 | 潜入深海(暗=低音,亮=高音) |
Step 3: 交互的传感
micro:bit 的编程
在 MakeCode 中编写用串口通信发送传感器数值的程序。
基本的构成:
一直重复:
串口通信写入数值 标签 "acc_x" 值 [加速度(mg) X轴]
串口通信写入数值 标签 "acc_y" 值 [加速度(mg) Y轴]
串口通信写入数值 标签 "light" 值 [亮度]
暂停(毫秒) 50数据发送的间隔
把 暂停 设为 50ms,1 秒钟大约发送 20 次数据。对音乐性的用途来说,这个速度已经足够。
SerialOSCConverter 的设置
把来自 micro:bit 的串口数据转换为 OSC 消息发送给 Pd。
- 启动 SerialOSCConverter
- 选择连接着 micro:bit 的 串口
- 把 波特率 设为
115200 - 确认 OSC 发送目标端口(默认是
8000) - 按下「Start」按钮开始转换
在 Pd 中接收与转换数据
在 Pd 中接收 OSC 消息,并转换为声音的参数。
基本的接收补丁构成:
[netreceive -u -b 8000] ← 在 UDP 端口 8000 接收
|
[oscparse] ← 解析 OSC 消息
|
[route /acc_x /acc_y /light] ← 按标签分配
| | |
[/ 1024] [/ 1024] [/ 255] ← 归一化到 0〜1 的范围传感器数值范围一览
| 传感器 | 最小值 | 最大值 | 归一化的计算 |
|---|---|---|---|
| 加速度 X/Y/Z | -2048 | 2048 | 值 / 2048 得到 -1〜1 |
| 加速度 strength | 0 | 2048 | 值 / 2048 得到 0〜1 |
| 亮度 | 0 | 255 | 值 / 255 得到 0〜1 |
| 麦克风音量 | 0 | 255 | 值 / 255 得到 0〜1 |
| 罗盘 | 0 | 360 | 值 / 360 得到 0〜1 |
Step 4: 声音的制作
至今所学技法的组合
回顾前半课程中学到的 Pd 技法,把它们运用到作品中吧。
| 技法 | 使用的 Pd 对象 | 效果 |
|---|---|---|
| 正弦波的生成 | [osc~] | 基本的音高控制 |
| 噪声的生成 | [noise~] | 风或波浪那样的声音素材 |
| 音频文件的播放 | [readsf~] [tabplay~] | 利用录制的声音 |
| 滤波器 | [lop~] [hip~] [bp~] | 音色的变化 |
| 延迟 | [delwrite~] [delread~] | 残响或回声效果 |
| 音量控制 | [*~] [line~] | 平滑的音量变化 |
| 变调 | 频率的调制 | 音高的变化 |
| 自动演奏 | [metro] [random] | 富有节奏感的模式 |
制作的推进方式
按以下顺序推进制作会比较高效。
- 先做出 1 个声音 --- 首先让一个声音响起来
- 与传感器连接 --- 让这个声音随传感器的数值变化
- 确认动作 --- 确认是否能按预期操作
- 追加声音 --- 叠加第 2 个、第 3 个声音
- 调整整体 --- 调整音量平衡与响应
常见的问题
- 没有声音: 确认
[dac~]是否已打开(把 DSP 设为 ON) - 收不到数值: 确认 SerialOSCConverter 是否在运行、端口号是否一致
- 声音断断续续: 用
[line~]让数值的变化变平滑(直接送入数值会产生「啪」的杂音) - 音量太大: 像
[*~ 0.3]这样把输出调小(超过 1.0 会失真)
Step 5: 作品说明表的制作
在课程的最后,制作作品说明表并提交。请填写以下项目。
模板
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
作品说明表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【作品名】
(例: 海中漫步 〜 Sound of the Deep Sea)
【作者名】
【概念】
实体的主题(体验者触摸・活动的东西):
(例: 在用纸、空盒子、3D 打印等做成的「潜水艇」中内置 micro:bit)
声音的主题(想表现的声音世界观):
(例: 用声音表现深海的世界)
交互的关系:
(例: 倾斜「潜水艇」时水中的深度会变化,
越深回响的声音越低,用手遮住时气泡的声音会变化)
【使用的传感器与操作方式】
传感器1: (例: 加速度传感器 Y轴)
操作: (例: 把「潜水艇」前后倾斜)
效果: (例: 音高随深度而变化)
传感器2: (例: 光线传感器)
操作: (例: 用手遮住/放开「潜水艇」)
效果: (例: 气泡的声音出现/消失)
【技术构成】
使用的 Pd 对象:
(例: osc~, noise~, lop~, delwrite~, delread~,
line~, *~, metro, random)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━面向下一讲
在第 10 讲中,我们会两人一组,用 思考发话法(Think-Aloud) 相互评价作品。在那之前,请把作品完成到「可以让人体验的状态」。没有完成也没关系,但至少要做到 能发声、能用传感器操作的状态。
检查清单
确认一下自己的进度吧。
- [ ] 确定了主题
- [ ] 选择了使用的传感器
- [ ] 画出了输入→处理→输出的设计图
- [ ] 编写了 micro:bit 的程序
- [ ] 用 SerialOSCConverter 完成了数据转换
- [ ] 在 Pd 中接收到了传感器数据
- [ ] 生成了 1 个以上的声音
- [ ] 做到了声音随传感器数值而变化
- [ ] 填写了作品说明表