Skip to content

第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 与把它组装进剑形物体中,体验者的感受也完全不同。拿什么、摸什么,与声音同样左右着作品的印象。

活用身边的物品(百元店的小物件、纸箱、塑料瓶等),构思符合概念的形态吧。

主题的示例

试着把两个方面组合起来思考。

类别声音的主题实体主题的例子体验的意象
自然现象雨、风、波浪、雷团扇、雨伞、贝壳扇动团扇发出风声,倾斜雨伞改变雨声
日常动作烹饪、打扫、手工汤勺、扫帚、锤子挥动汤勺发出锅的声音,敲击的力度改变声音
情感喜悦、恐惧、疗愈八音盒、盒子、灯笼打开盒子发出不可思议的声音,点亮灯笼发出疗愈的声音
空间洞窟、宇宙、森林、水中手电筒、望远镜、瓶子手电筒的朝向改变洞窟内的声音
生物鸟、虫、猫、鱼毛绒玩具、蛋、羽毛摇晃毛绒玩具时叫声会变化
抽象概念时间、颜色、温度沙漏、万花筒、气球倾斜沙漏发出时间流逝的声音

思考的提示

试着向自己抛出以下问题。

  1. 「听到什么样的声音会有趣?」 --- 想象日常听不到的声音
  2. 「拿着什么东西会有趣?」 --- 想象体验者接触的物体
  3. 「想用什么样的动作发出声音?」 --- 思考如何活动手中的物体
  4. 「希望体验者产生什么样的心情?」 --- 决定想通过作品传达的印象

构思创意的诀窍

首先把想到的东西全部写到笔记本上(头脑风暴)。数量比质量更重要。先想出 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。

  1. 启动 SerialOSCConverter
  2. 选择连接着 micro:bit 的 串口
  3. 波特率 设为 115200
  4. 确认 OSC 发送目标端口(默认是 8000
  5. 按下「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-20482048值 / 2048 得到 -1〜1
加速度 strength02048值 / 2048 得到 0〜1
亮度0255值 / 255 得到 0〜1
麦克风音量0255值 / 255 得到 0〜1
罗盘0360值 / 360 得到 0〜1

Step 4: 声音的制作

至今所学技法的组合

回顾前半课程中学到的 Pd 技法,把它们运用到作品中吧。

技法使用的 Pd 对象效果
正弦波的生成[osc~]基本的音高控制
噪声的生成[noise~]风或波浪那样的声音素材
音频文件的播放[readsf~] [tabplay~]利用录制的声音
滤波器[lop~] [hip~] [bp~]音色的变化
延迟[delwrite~] [delread~]残响或回声效果
音量控制[*~] [line~]平滑的音量变化
变调频率的调制音高的变化
自动演奏[metro] [random]富有节奏感的模式

制作的推进方式

按以下顺序推进制作会比较高效。

  1. 先做出 1 个声音 --- 首先让一个声音响起来
  2. 与传感器连接 --- 让这个声音随传感器的数值变化
  3. 确认动作 --- 确认是否能按预期操作
  4. 追加声音 --- 叠加第 2 个、第 3 个声音
  5. 调整整体 --- 调整音量平衡与响应

常见的问题

  • 没有声音: 确认 [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 个以上的声音
  • [ ] 做到了声音随传感器数值而变化
  • [ ] 填写了作品说明表