tonguedrum.app v1.4
// real-time modal synthesis · webaudio // 8 inharmonic partials · helmholtz body // no samples · fully procedural

物理モデリング。
サンプルではない。

1音につき8つの非調和倍音。Helmholtz 筐体共鳴。ベロシティがトーンとサステインに影響する非線形ダンピング。打撃された舌と静止した舌の間の共感振動。すべての音がリアルタイムで生成されます。

レイテンシー<8ms
倍音数/音8
サンプルレート44.1k
精度float32
スケール数26
ページ容量<30 KB
録音WAV · 2min
ライセンスMIT
synth/modal-bank.ts
// 8 modal partials of a struck steel tongue:
// (1,1) fundamental + detuned beating partner,
// (2,1) (3,1) (1,2) (4,1) overtones, (5,1) shimmer.
const MODAL_MODES = [
  { ratio: 1.000, amp: 1.00,  Q: 800, type: 'fundamental' },
  { ratio: 1.001, amp: 0.08,  Q: 900, type: 'beating' },
  { ratio: 2.005, amp: 0.24,  Q: 600, type: 'overtone' },
  { ratio: 2.012, amp: 0.04,  Q: 500, type: 'beating' },
  { ratio: 2.998, amp: 0.07,  Q: 400, type: 'overtone' },
  { ratio: 3.520, amp: 0.03,  Q: 350, type: 'edge' },
  { ratio: 4.015, amp: 0.025, Q: 300, type: 'overtone' },
  { ratio: 5.98,  amp: 0.008, Q: 250, type: 'shimmer' },
];

function strike(note, velocity) {
  return MODAL_MODES.map((m) => ({
    freq:    note.freq * m.ratio,
    gain:    velocity * m.amp,
    Q:       m.Q,
    damping: nonlinear(velocity),
  }));
}