// real-time modal synthesis · webaudio
// 8 inharmonic partials · helmholtz body
// no samples · fully procedural
Physikalisch modelliert.
Keine Samples.
Acht inharmonische Partiale pro Note. Helmholtz-Körperresonanz. Nichtlineare Dämpfung, bei der Anschlagsstärke Klangfarbe und Sustain beeinflusst. Sympathetische Schwingung zwischen angeschlagenen und ruhenden Zungen. Jeder Klang entsteht in Echtzeit.
Latenz<8ms
Partiale/Note8
Abtastrate44.1k
Präzisionfloat32
Skalen26
Seitengewicht<30 KB
AufnahmeWAV · 2min
LizenzMIT
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),
}));
}