贴肤膜片
接收皮肤表面的细微振动。

给自己做个
蛛丝发射器。
SonicWEB 是一套受蜘蛛侠启发的体感控制器,将肌肉信号、手臂动作与空间声音接入游戏。抬手瞄准、握紧发射,在声音的指引下完成一次次摆荡。
02 / The Experience
声塔藏在视野之外,耳机里的声音会提示它在哪边。抬起手臂瞄准,握紧握力器,蛛丝就会射向目标,带你向前摆荡。松开手,再找下一座声塔。

03 / Sound-Led Play
前方的视野受到限制,声音成为寻找目标的主要线索。需要选择方向时,游戏会短暂进入慢动作,留出听辨和瞄准的时间。命中目标后继续摆荡,方向错误时则给出反馈,进入下一次尝试。



声音负责引路,画面帮助确认结果。这里展示的是游戏原型的静帧。
04 / Mechanomyography
肌肉收缩会带来细微的机械振动,记录这些变化得到的就是 MMG(肌机械信号)。SonicWEB 用它识别握紧与松手,让肌肉活动成为游戏输入。
传感器贴在前臂上,通过薄膜和声腔把振动传给麦克风。比较不同佩戴位置后,选用较易定位、表面相对平坦的桡侧腕伸肌区域。

本次记录的分析中,能量主要集中在 5–60 Hz 范围。该观察用于指导原型滤波,不代表所有 MMG 信号的固定范围。
05 / Building the Sensor
传感器由贴肤薄膜、密封声腔和 MEMS 麦克风组成。振动从皮肤传到薄膜,再经声腔传给麦克风。声腔的形状与密封程度,也会影响信号的采集。

接收皮肤表面的细微振动。
将振动传递为腔内压力变化。
把压力变化转化为可采集的电信号。

Arduino 通过定时器中断采集麦克风信号,把采样与串口发送分开。采样结果先写入环形缓冲区,再由主循环送往电脑。
原型把 10 位 ADC 数据缩减为 8 位,通过 115200 波特率串口发送。这样减少传输量,也牺牲了部分幅值分辨率。
115200 表示串口波特率;实际采样率与端到端延迟需分别测量。
06 / Iteration
薄膜材料、声腔尺寸和贴合方式,都会影响振动的传递。通过逐项比较与调整,改善信号采集,也让传感器在手臂活动时保持贴合。
对比材料包括保鲜膜、胶带和乳胶膜。本次测试中,保鲜膜的振动传递较清晰,因此用于后续原型。
比较不同腔体后,选用直径约 10 mm、高约 5 mm 的尺寸,兼顾振动传递与佩戴体积。
用肌内效贴固定传感器,再做好封装密封,尽量减少手臂活动时的松动和外界干扰。
以上为本项目原型试验中的选择与观察。
07 / Signal to Action
一次握紧对应一次发射。程序先平滑信号,再用两个阈值区分握紧与松手;持续握持时保持当前状态,松开后才允许下一次触发,避免信号波动造成连发。

先听清目标在哪边。

超过触发阈值,发射蛛丝。

降到释放阈值以下,松开蛛丝。
先接收传感器信号,再分成两条路径:一条判断动作何时发生,一条把持续变化变成声音。动作事件同时控制预录音效和游戏输入。
RMS 描述信号幅值,不能直接当作实际握力。触发逻辑用于本次原型,不代表已验证所有用户和佩戴条件下的稳定性。
校准方案在游戏开始前收集一段个人信号,以均值和标准差计算阈值,让动作判断适应当前用户与佩戴状态。
触发阈值 = 均值 + 3 × 标准差
释放阈值 = 均值 + 0.5 × 标准差
确认放松、握紧、松开能形成清楚的状态变化;调整佩戴位置或更换用户后,需要重新检查基线与阈值。
固定阈值用于动作判断原型,动态校准是进一步的探索;校准效果仍需跨用户测试。
08 / Body as Sound
短音效回应发射与松开的瞬间,连续变化的声音则随肌肉信号调整。两路反馈结合,让玩家既能确认动作,也能听见拉住蛛丝时的张力变化。
Event / 事件反馈
为发射、命中和松开准备不同的音效。听到声音,就知道刚才的动作有没有发生。
Continuous / 连续反馈
先把低频肌肉信号移调,再用幅值控制滤波,让音色跟着用力过程变化。声音的起止也经过包络处理,接得更自然。
使用 pitchshift~ 改变肌肉信号的音高,将输入转化为更适合游戏语境的声音材料。
幅值控制量经 scale 和 line~ 平滑后,调节 lores~ 的滤波参数,让用力过程表现为连续的音色变化。
adsr~ 控制声音进入、保持和消退的过程,使反馈能衔接动作,而不是突然出现或中断。
这里映射的是传感信号的变化,声音并非对肌肉力量的定量读数。
握紧和松手分别触发准备好的短音效,让玩家听见操作的结果。
发射分支使用 speed 2,收回分支使用 speed -2.。改变播放方向和速度,让射出与收回听起来不同。
正常声塔保留较明亮、规律的脉冲;被蛛网包裹后,音色变暗并加入细微质感变化,同时保留方向提示所需的清晰度。
09 / Direction
远处声塔之间的夹角较小,左右方向不易分辨。独立的引导声源在需要选择方向时提供更明确的提示,并在玩家接近目标后逐渐与声塔汇合。
01 / 问题

声塔离得远,左右方向不容易分清。
02 / 引入

需要选边时,让引导声源出现。
03 / 移动

玩家向前摆荡,引导位置跟着调整。
04 / 汇合

快到目标时,引导声源与声塔汇合。
引导声在选择左右的短暂窗口里播放,让玩家多一个方向线索,不必只靠远处声塔之间很小的角度差异。
引导声源的位置随玩家与声塔的距离关系连续变化。在接近、对齐或经过目标时,两者逐渐汇合,让方向提示自然衔接。
Apple 的空间音频渲染接口与 HRTF 方案用于表现声源方位;游戏逻辑负责决定引导声源何时出现、放在哪里,以及怎样随玩家移动。
接口参考:Apple 空间音频渲染
图示呈现引导声源的位置关系。具体角度与过渡参数需结合设备和用户体验调整。
10 / Distance
离目标还有多远?是在靠近,还是已经荡过去了?音量、音色和细微的音高变化一起提供线索,让摆荡的过程也能被听见。
距离增加时逐渐减弱,提供远近的基本线索。
远处的声音减少高频,近处则更明亮。
通过细微的音高变化提示接近与远离,参数平滑过渡。
01 / 音量与音色

距离变化,同时改变音量和高频成分。
02 / 运动与音高

依据相对运动,加入细微的音高变化。
通过距离衰减,让较远的声源更轻;衰减方式需要与游戏尺度和背景声音一起调整。
远处声源减少高频,音色更暗。让距离不只依赖响度,也能通过音色变化被识别。
根据玩家与声源的相对速度,细微调整播放速率,以多普勒式变化辅助表达摆荡中的运动。
对音量和滤波参数做连续过渡,减少快速运动中突兀的声音变化。
图示说明距离与运动的声音映射,参数效果仍需通过听觉测试确认。
11 / System Integration
传感器识别握持状态,固定在前臂上的手机追踪手臂朝向。Max/MSP 处理信号与声音,再将动作传给游戏,连接起瞄准、发射与摆荡的完整过程。
手机固定于前臂,相对校准姿态追踪抬臂与方向变化。
握持状态与手臂姿态共同决定发射时机。
把传感器、Max/MSP 和游戏接通,让身体动作能及时得到回应。
手机固定在前臂上,通过 IMU 和基准姿态校准,计算抬臂与方向变化。姿态数据通过 UDP 以约 30 Hz 发送,再与 MMG 的握持判断配合。
Max 使用 node.script 运行本地脚本,将动作消息转成游戏可接收的键盘事件。右侧按钮分支发送 press_w,左侧按钮分支发送 press_q,两路消息分别交给对应脚本处理。
这版实现依赖 node-key-sender 及其 Java 运行环境来发送系统键盘事件。串口采集与游戏键盘输入分别处理,搭建时需要逐段检查。
对象说明:Node for Max
约 30 Hz 是姿态数据发送频率;整体响应延迟与运行稳定性需另行测试。
12 / What Comes Next
SonicWEB 将肌肉信号、手臂动作和声音整合为一个可玩的原型。测试也显示,用户差异、佩戴位置和手臂运动都会影响信号,成为后续需要解决的问题。
如果它不只判断一次握紧,而是持续记录肌肉的变化呢?这就需要更稳定的定位和贴合方式,也要让不同时间的记录能够比较。后来的 MyoSense,沿着这个问题继续往下做。
项目使用 MMG、姿态追踪与空间声音探索体感游戏。现阶段主要成果是系统整合和交互原型,稳定性与跨用户体验仍需进一步验证。
材料、尺寸与频段的描述基于项目中的试验观察,其适用范围仍需进一步测试。