Síntesis Karplus-Strong
Cada cuerda es una delay line con feedback filtrado.
El algoritmo simula físicamente cómo vibra una cuerda real.
Excitation → [Delay L samples] → Output
↑ │
└──── Lowpass ←──────┘
× feedback
y[n] = (y[n-L] + y[n-L-1]) / 2 × g
- L = sample_rate / frequency (determina el pitch)
- g ≈ 0.99 (controla el decay)
- El lowpass simula pérdida de energía en agudos
12 Cuerdas = 12 Pitch Classes
Las 12 notas de la escala cromática occidental, cada una con su propia delay line:
| Nota | Índice | Freq (Oct 3) |
| C | 0 | 130.81 Hz |
| E | 4 | 164.81 Hz |
| G | 7 | 196.00 Hz |
| B | 11 | 246.94 Hz |
128 Voces (Polifonía)
Máximo de excitaciones simultáneas. Cada vez que pulsas una cuerda
o la resonancia la activa, consume una voz.
- Voice stealing: cuando se agotan, reutiliza la más antigua
- Prioridad: inactivas → releasing → oldest
- 128 es suficiente para ~10 excitaciones por cuerda
Karplus-Strong vs Ecuación de Onda
Existen dos filosofías para simular cuerdas vibrantes:
| Aspecto | Ecuación de Onda (PDE) | Karplus-Strong |
| Modelo | ∂²y/∂t² = c² ∂²y/∂x² | y[n] = avg(y[n-L]) × g |
| Datos | N puntos por cuerda | L samples de delay |
| Costo | O(N) por sample | O(1) por sample |
| Visual | Forma de onda real | Solo energía |
Ecuación de onda: Físicamente exacta. Discretiza la cuerda en
200+ puntos y calcula cada uno. Costoso pero preciso.
Karplus-Strong (este synth): Truco de 1983. Una cuerda vibrante
suena como un delay con filtro lowpass. Solo guardas L samples
(L = sample_rate / frequency). Eficiente y suena realista.
Analogía: Simular agua
PDE: Resolver Navier-Stokes (físicamente correcto)
Karplus-Strong: Grabar agua real y reproducirla (suena igual, mucho más barato)
Resonancia Simpática
Cuando una cuerda vibra, transfiere energía a las demás según su
relación interválica. Es el mismo fenómeno
que ocurre en un sitar, piano con pedal sostenuto, o arpa.
Matriz de Acoplamiento 12×12
Los intervalos consonantes (armónicos compartidos) tienen mayor acoplamiento:
| Intervalo | Semitonos | Acoplamiento |
| Unísono | 0 | 0.00 |
| 5ª justa | 7 | 0.85 |
| 4ª justa | 5 | 0.80 |
| 3ª mayor | 4 | 0.60 |
| 3ª menor | 3 | 0.55 |
| Tritono | 6 | 0.20 |
| 2ª menor | 1 | 0.10 |
Toca Do (C) y observa cómo Sol (G) y Fa (F) empiezan a vibrar sutilmente.
Física del Acoplamiento
excitation[target] += signal[source] × coupling × scale
La señal de salida de cada cuerda se inyecta como excitación en las demás,
multiplicada por el coeficiente de acoplamiento. Las frecuencias no resonantes
se atenúan naturalmente en la delay line.
FDN Reverb (Schroeder/Moorer)
Red de delays con feedback para simular reflexiones en un espacio acústico.
Algoritmo clásico usado en reverbs digitales desde los años 60.
Input → Lowpass → [8 Comb ∥] → [4 Allpass →] → Output
↓
┌───────────────┐
│ Comb 1: 1557 │ ─┐
│ Comb 2: 1617 │ │
│ Comb 3: 1491 │ ├→ Σ → Allpass chain
│ ... │ │
│ Comb 8: 1116 │ ─┘
└───────────────┘
(tiempos en samples)
Filtros Comb (Paralelo)
- 8 por canal con delays de tiempos primos
- Evita resonancias en frecuencias específicas
- Crea la densidad y "cola" del reverb
- Feedback 0.7-0.98 según room_size
Filtros Allpass (Serie)
- 4 por canal, delays más cortos
- Difunden el sonido sin colorear
- Rompen patrones repetitivos de los combs
Parámetros
| Parámetro | Efecto |
| Mix | Proporción wet/dry |
| Room Size | Largo de la cola (feedback) |
| Damping | Absorción de agudos |
Analizador de Espectro (FFT)
Visualización en tiempo real de las frecuencias presentes en el audio.
Usa la Transformada Rápida de Fourier.
Señal temporal → FFT → Magnitudes por frecuencia
┌─────────────────────────────────────┐
│ ▃ ▅ █ ▆ ▂ ▁ ▁ ▂ ▁ ▁ ▁ ▁ ▁ ▁ ▁ ▁ │
│ 100 500 1k 2k 4k 8k 16k │ Hz
└─────────────────────────────────────┘
Cómo Leerlo
- Izquierda = graves (bajas frecuencias)
- Derecha = agudos (altas frecuencias)
- Altura = intensidad (dB)
Qué Observar
Al tocar una cuerda verás:
- Pico fundamental: la nota que tocaste
- Armónicos: picos en múltiplos enteros (2×, 3×, 4×...)
- Resonancia simpática: picos de otras cuerdas vibrando
El patrón de armónicos define el timbre: por qué un piano
suena diferente a una guitarra tocando la misma nota.
Por qué estos valores
Cada preset emula las características acústicas de un instrumento real
ajustando 4 parámetros clave:
Piano
Damping bajo (0.51) — Las cuerdas del piano tienen fieltro que
amortigua rápido. Sympathy baja (0.2) — El apagador limita la
resonancia entre cuerdas. Reverb sutil (15%) — Sonido directo, de sala pequeña.
Harp
Damping alto (0.91) — Cuerdas al aire, vibran libremente.
Sympathy media (0.5) — Las cuerdas resuenan entre sí naturalmente.
Brightness alta (0.8) — Sonido cristalino, rico en armónicos.
Guitar
Damping medio (0.71) — Sustain moderado, decay natural.
Sympathy mínima (0.1) — Cuerdas separadas, poca interacción.
Brightness media (0.5) — Balance entre cuerpo y brillo.
Sitar
Sympathy alta (0.7) — Las cuerdas simpáticas (taraf) son la
esencia del sitar. Brightness máxima (0.9) — Sonido nasal,
metálico. El buzzing característico viene de la resonancia cruzada.
Bell
Damping muy alto (0.96) — Las campanas resuenan largamente.
Brightness máxima (0.95) — Armónicos brillantes.
Inharmonicidad — Los parciales no son múltiplos exactos,
creando el timbre metálico característico.
Pad
Damping máximo (1.0) — Sustain infinito, el sonido no decae.
Sympathy máxima (0.9) — Todas las cuerdas resuenan creando
texturas densas. Reverb alto (60%) — Atmósfera envolvente.
Brightness baja (0.4) — Sonido suave, sin estridencias.
Tabla de Referencia
| Preset | Sustain | Brillo | Simpatía | Reverb |
| Piano | Corto | Medio | Baja | 15% |
| Harp | Largo | Alto | Media | 30% |
| Guitar | Medio | Medio | Mínima | 20% |
| Sitar | Medio | Muy alto | Alta | 25% |
| Bell | Muy largo | Máximo | Media | 40% |
| Pad | Infinito | Bajo | Máxima | 60% |