盛夏声景 · 实时物理合成

一脚踢出了
整个盛夏。

竹棒划过热风,松香与绳子每圈摩擦三十多次。短促脉冲不断敲响纸膜和竹筒,旋转再把它们揉成一声忽近忽远的「哇——」。抓住玩具画圈,听见力、速度与方向怎样塑造蝉声。

按住竹棒或竹蝉画圈 · 玩具可以甩到整个视口
01 / 万物皆可挂

今天知了值班,明天按钮上天。

换知了

皮肤会直接装到正在运动的物理体上,速度和声音不中断。

换木棍

棍子也只是 DOM。红色吊环标出绳子的精确起点。

MOTION-MODULATED AUDIO

声音也能换,但还得听手腕的。

上传内容只在当前浏览器内解码。速度管变调,张紧度管音量,旋转相位管远近,滤波器随甩动打开。

物理合成器工作中 · 声音池可加入 8 段本地音频 · 文件不会离开浏览器
02 / 一段录音里的两种时间

一圈三十三次摩擦,听见的却是一声悠长的「哇——」。

从真实声学结构压缩出的实时模型

参数描述一次具体录音状态下的有效声学行为,让浏览器用少量节点重建宏观音色。

ROTATION2.367 Hz

约 0.423 秒转一圈,控制盛夏里忽近忽远的慢包络。

STICK–SLIP≈ 78 Hz

每 12.9 ms 左右一次主要摩擦事件,间隔 CV 约 0.25。

MODE I1506.37 Hz

第一膜面有效模态,Q ≈ 10.49,短促地被脉冲反复敲响。

MODE II1760.85 Hz

第二膜面—空气有效模态,Q ≈ 10.62。

01 · 手腕与绳

一圈,三十多次摩擦

旋转建立张力。涂松香的接触点连续经历粘住、蓄力、滑开与复位。

78 / 2.367 ≈ 33 events / turn
02 · 不规则激励

每次都略有不同

脉冲间隔带着约 25% 抖动,摩擦宽带填入细小毛刺,让声音保持自然活性。

renewal impulses · CV ≈ 0.25
03 · 膜与竹筒

直达声里,混进一截空心回响

膜面声先经过 1863.85 Hz 辐射高通;另一支在 108.86 mm 竹筒内传播、损耗并往返反射,再由管口反相叠回。

L / c = 0.317 ms · round trip = 0.635 ms
04 · 盛夏的远近

转一圈,声音呼吸一次

一次与二次旋转调制叠加,模拟张力、耦合和辐射方向共同造成的「哇——」起伏。

AM₁ = .66 · AM₂ = .35

为什么听起来更像真的

共振衰减只有几毫秒,声音靠每秒约 78 次摩擦持续重燃。小膜辐射高通压住 300–800 Hz 的浑浊低频;反射 0.40、损耗 1.50、耦合 0.45 的弱竹筒路径,则把空心感放进相位与短脉冲尾里。

03 / 带一只竹知了回去

挂进任何网页,夏天就开始了。

默认 renderer、绳系物理与拟合声学模型开箱即玩。知了 DOM、竹棒 DOM、连接 socket、声音、renderer 和物理参数都可以独立替换。

pnpm add zhuzhiliao

import {
  mountBambooCicada,
  SynthCicadaVoice,
} from 'zhuzhiliao';

const voice = new SynthCicadaVoice({
  friction: 1.2,
  membraneTension: 1.1,
  tubeLength: 140,
});

const button = document.querySelector('#summer-button')!;

mountBambooCicada({
  voice: () => voice,
  physics: { ropeLength: 132 },
  parts: {
    cicada: {
      source: button,
      socket: { x: .5, y: 0 },
    },
  },
});