Módulo 3.2: Generación de Señales Básicas (`[cycle~]`, `[phasor~]`, `[saw~]`, `[noise~]`), Tablas de Onda y Anti-Aliasing
“En matemáticas, una onda de diente de sierra tiene un salto instantáneo vertical con infinitos armónicos; en audio digital, los infinitos armónicos rebotan contra el límite de Nyquist y destruyen tu timbre. Quien no comprende el aliasing, programa generadores de ruido en lugar de sintetizadores.”
— David Creasey, Audio Processes: Musical Analysis, Modification, Synthesis
1. Fundamento Acústico: Series de Fourier y el Espectro Armónico
(Inspirado en Miller Puckette, Theory and Technique of Electronic Music, y Cipriani & Giri, Electronic Music and Sound Design, Vol. 1)
Jean-Baptiste Joseph Fourier demostró en 1822 que cualquier señal periódica continua puede descomponerse en una suma de funciones sinusoidales puras cuyas frecuencias son múltiplos enteros () de la frecuencia fundamental ():
El ADN Espectral de las Formas de Onda Clásicas:
1.2. Síntesis Aditiva de Fourier: El Dilema Arquitectónico Escalar vs. Multicanal ([mc.*~])
La síntesis aditiva es la implementación computacional directa del teorema de Fourier:
Cualquier timbre acústico o sintético puede modelarse como una superposición de componentes sinusoidales simples (parciales), donde cada parcial cuenta con su propia frecuencia , amplitud instantánea y fase inicial .
El Problema del Paradigma Escalar Clásico:
Durante tres décadas, construir un sintetizador aditivo de tan solo 16 parciales en Max requería instanciar 16 objetos [cycle~], 16 multiplicadores [*~], 16 envolventes o generadores de control y una red de suma con más de 90 conexiones de cables (patrón observable en los parches clásicos de Max 4/5). Este enfoque adolece de serios problemas de ingeniería de software:
- Inflexibilidad topológica: Duplicar el número de parciales a 32 o 64 exige duplicar físicamente las cajas y cables en el lienzo gráfico.
- Costo de mantenimiento insostenible: Modificar dinámicamente las relaciones de frecuencia o aplicar envolventes complejas exige mapeos masivos mediante enrutadores como
[route]o matrices de conexiones.
La Revolución Multichannel en Max ([mc.cycle~] y [mc.*~]):
El subsistema Multichannel (MC) introducido en Max 8 transforma un circuito de 90 objetos en una arquitectura elegante de 3 objetos:
- Generación Simultánea de Parciales: Con
[mc.cycle~ @chans 16], Max gestiona 16 osciladores independientes dentro de un único cable virtual multicanal. - Distribución de Frecuencias Armónicas: Al enviar el mensaje
harmonic 1 $1, el objeto calcula instantáneamente una serie armónica perfecta: - Ponderación Espectral en Bloque: Un único objeto
[mc.*~]recibe un vector de 16 amplitudes desde un[multislider]mediante el mensajeprepend applyvalues, modulando la energía de cada armónico individualmente. - Timbres Inarmónicos Complejos (Campanas y Metales):
Para sintetizar cuerpos resonantes inarmónicos (campanas de iglesia, barras de vibráfono o placas de acero analizadas por John Chowning y Jean-Claude Risset), basta con reemplazar el mensaje
harmonicpor una lista arbitraria de frecuencias relativas:values 110. 303.6 594. 982.3 1475. 2040. 2700. 3450. 4280. 5200.Esta capacidad de mutar la estructura modal de un cuerpo resonante en tiempo real sin alterar la topología del parche constituye uno de los saltos de productividad más trascendentes en la historia de Max.
2. El Peligro del Aliasing y Osciladores con Banda Limitada (Band-Limited)
En el mundo matemático analógico, las ondas cuadradas y de sierra tienen esquinas infinitamente afiladas. En el dominio digital, una discontinuidad vertical infinita genera armónicos que sobrepasan con creces la frecuencia de Nyquist ().
¿Qué pasa cuando un armónico supera a Nyquist?
Si tocas una nota aguda de sierra a :
- 1º armónico: (OK)
- 2º armónico: (OK)
- 3º armónico: (OK)
- 4º armónico: (OK)
- 5º armónico: ¡SUPERA NYQUIST!
En lugar de desaparecer, esa energía rebota como un espejo: Y el 6º armónico () rebotará en . El resultado son decenas de frecuencias espurias inarmónicas que suenan como chirridos metálicos sucios y desagradables.
La Diferencia Crucial entre [phasor~] y [saw~]:
[phasor~]NO TIENE BANDA LIMITADA (Naive Sawtooth): Es una rampa matemática lineal de a que se reinicia abruptamente a . Es el mejor reloj de fase del mundo para modular buffers o síntesis granular, pero si lo escuchas directamente como oscilador sonoro en notas medias/altas, destruirá tus agudos con aliasing masivo.[saw~]y[rect~]SÍ TIENEN BANDA LIMITADA: Utilizan algoritmos de atenuación armónica (como tablas de ondas de múltiples resoluciones o algoritmos PolyBLEP) para eliminar los armónicos que exceden Nyquist antes de que reboten.
3. Under the Hood (Max C SDK): Tablas de Onda y Acumuladores de Fase
(Basado en simpwave~.c del Max SDK)
¿Cómo genera [cycle~] una sinusoide continua con costo computacional mínimo?
En lugar de llamar a la costosa función trascendente matemática sin() de la librería de C 48.000 veces por segundo, Max utiliza una Wavetable (Tabla de Onda) precalculada de 512 o 4096 puntos en memoria RAM estática.
// Lógica interna de simpwave~ en el Max SDKtypedef struct _simpwave { t_pxobject ob; double phase; // Acumulador de fase normalizado (0.0 a 1.0) double phase_step; // Salto de fase por muestra: (frecuencia / samplerate) double table[512]; // Muestras precalculadas de un ciclo de onda} t_simpwave;
void simpwave_perform64(t_simpwave *x, t_object *dsp64, double **ins, long numins, double **outs, long numouts, long sampleframes, long flags, void *userparam){ t_double *out = outs[0]; int n = sampleframes; double ph = x->phase; double step = x->phase_step;
while (n--) { // 1. Interpolar valor en la tabla int index = (int)(ph * 512.0); *out++ = x->table[index]; // Lectura directa en O(1) de memoria RAM
// 2. Avanzar el acumulador de fase ph += step; if (ph >= 1.0) ph -= 1.0; // Envolver de 1.0 a 0.0 (Wrap) } x->phase = ph; // Guardar fase para el siguiente bloque}El Acumulador de Fase: El Motor Universal de Síntesis
El salto de fase por muestra está gobernado por una fórmula fundamental: Si y , en cada muestra la fase avanza:
Teoría Formal de Interpolación en Tablas de Onda (Curtis Roads, CMT 2023)
En la segunda edición de The Computer Music Tutorial (The MIT Press, 2023), Curtis Roads formaliza por qué el truncamiento entero directo ((int)index) es inaceptable en síntesis profesional de estudio: produce ruido de cuantización de fase y distorsión armónica espuria.
Para leer una posición fraccionaria (donde es la parte entera y la fracción de muestra):
- Truncamiento (Zero-Order Hold / Vecino más cercano): Genera saltos escalonados que degradan la relación señal-a-ruido (SNR) a menos de 40 dB.
- Interpolación Lineal (First-Order):
Es el método estándar en objetos como
[cycle~](con tabla de 512 puntos). Atenúa significativamente los componentes espurios, elevando el piso de ruido a ~70 dB. - Interpolación Cúbica y Hermite (Splines de Tercer Orden):
Utilizada en
[gen~]y samplers de alta gama, pondera 4 muestras consecutivas () para asegurar la continuidad de la primera derivada (tangente suave). Elimina virtualmente todo aliasing audible, garantizando un piso dinámico superior a 96 dB (grado CD de 16-bit) incluso con transposiciones extremas.
Consideraciones Técnicas en la Generación de Señales
- Fase Inicial Cosenoidal en
[cycle~](Amplitud +1.0):- Por definición matemática en la arquitectura de Max,
[cycle~]evalúa una función coseno: una fase de corresponde a una amplitud instantánea de . Si se inicializa la señal desde silencio absoluto reseteando la fase a cero sin rampa, se generará una discontinuidad brusca (click transitorio). Para iniciar la oscilación en cruce por cero equivalente a una función seno, debe aplicarse un desfase de tres cuartos de ciclo ().
- Por definición matemática en la arquitectura de Max,
- Distinción entre Generadores de Fase y Osciladores de Audio:
- Por definición arquitectónica,
[phasor~]es una señal rampa de control temporal o índice de fase, no un oscilador de audio de banda limitada. Debe emplearse para indexar tablas de ondas ([2d.wave~],[wave~]), temporizar ventanas granulares o modular filtros; para reproducción audible de ondas sierra con supresión de aliasing debe utilizarse[saw~].
- Por definición arquitectónica,
- Discontinuidad por Sincronización Dura (Hard-Sync):
- Reiniciar la fase de un oscilador sinusoidal de manera instantánea mediante un pulso de sincronía genera una discontinuidad en la derivada que introduce componentes inarmónicos espurios. La implementación de sincronización dura de alta fidelidad exige el empleo de técnicas de suavizado de bordes o formulaciones PolyBLEP en
[gen~].
- Reiniciar la fase de un oscilador sinusoidal de manera instantánea mediante un pulso de sincronía genera una discontinuidad en la derivada que introduce componentes inarmónicos espurios. La implementación de sincronización dura de alta fidelidad exige el empleo de técnicas de suavizado de bordes o formulaciones PolyBLEP en
4. Leyes de Paneo de Potencia Constante: La Solución Coseno/Seno (Christopher Dobrian)
En la distribución estéreo y multicanal de señales digitales, uno de los errores más extendidos consiste en aplicar un paneo puramente lineal (amplitud constante):
Como formaliza Christopher Dobrian en Techniques and Software for Octophonic Composition y en Computer Music Programming (CMP):
El Problema de la Caída de 3 dB en el Centro Estéreo
Cuando una fuente se posiciona en el centro del panorama ():
- Cada altavoz recibe una amplitud de (atenuación de ).
- El oído humano percibe la sonoridad de fuentes acústicas en un recinto según la suma cuadrática de potencias acústicas (energía acústica total), no la suma directa de amplitudes:
- Una potencia acústica de representa una pérdida neta de . El resultado psicoacústico es que cualquier sonido que viaje de un extremo al otro parece “hundirse” o alejarse en el centro.
La Ley de Potencia Constante (Constant-Power Law)
Para que la potencia total percibida permanezca matemáticamente inmutable en cualquier posición del panorama (), Dobrian implementa la relación trigonométrica de cuarto de ciclo:
En el centro exacto (, ángulo ):
Implementación Óptima en Max (Zero-CPU Overhead)
Calcular funciones trigonométricas trascendentes muestra a muestra consumiría ciclos de CPU innecesarios. Dobrian propone dos arquitecturas canónicas en Max:
- Un solo
[cycle~]en fase fija: Usar un oscilador[cycle~]con frecuencia , desplazando su fase de entrada en el rango para el canal izquierdo y para el canal derecho. - Tabla de Transferencia Precalculada: Cargar 512 puntos de un cuarto de onda senoidal en una
[table]o[buffer~], logrando lecturas instantáneas en memoria.
5. 4 Escenarios del Mundo Real
Abre el parche interactivo complementario:
book/patches/modulo-03/laboratorio_08_osciladores.maxpat
Escenario 1: El Test Auditivo de Aliasing ([phasor~] vs [saw~])
- El Problema: Quieres demostrar experimentalmente por qué el aliasing destruye la música.
- La Solución: Conectar un barrido de frecuencias de a a un
[phasor~]y a un[saw~]. Con[phasor~], al subir la frecuencia se escucha claramente cómo armónicos fantasma descienden en sentido contrario (aliasing). Con[saw~], el sonido permanece puro y brillante.
Escenario 2: Generación de Pulso Variable (PWM) con [phasor~] y comparador
- El Problema: Quieres el sonido clásico de sintetizador de los 80 (Pulse Width Modulation) modulando el ancho de pulso de una onda cuadrada.
- La Solución: Conectar
[phasor~]a un operador de umbral[>~ 0.5]. Modulando el valor de comparación de a con un LFO lento, el ancho de pulso muta continuamente de agudo y nasal a grueso.
Escenario 3: Síntesis de Percusión (Snare Drum) con [noise~] y Envolvente
- El Problema: Crear el sonido de redoblante de una caja de ritmos analógica tipo TR-808 sin usar samples en disco.
- La Solución: Ráfagas de ruido blanco
[noise~]multiplicadas por una envolvente exponencial rápida[line~]de 150 ms, mezcladas con un golpe de seno grave descendente ([cycle~]).
Escenario 4: Tabla de Onda Personalizada con [cycle~ mi_buffer]
- El Problema: La sinusoide estándar de
[cycle~]es demasiado simple y no tiene armónicos. - La Solución: Cargar un ciclo de forma de onda rica en un
[buffer~ mi_onda]y llamar a[cycle~ mi_onda]. El objeto adopta inmediatamente el nuevo timbre sin consumo adicional de CPU.
Escenario 5: Banco Aditivo Armónico e Inarmónico en 3 Objetos con Multichannel
- El Problema: Diseñar un motor aditivo de 10 armónicos/inarmónicos sin poblar el parche con decenas de osciladores individuales ni sufrir una maraña inmanejable de conexiones.
- La Solución: Implementar
[mc.cycle~ @chans 10]alimentado por el mensajeharmonic 1 $1para modo armónico (sierra/cuadrada por suma de Fourier) o una lista de frecuencias inarmónicasvalues 110. 303.6 594. ...para timbres metálicos de campana, ponderando cada canal con[mc.*~]y unmultisliderde 10 barras antes de reducir a mono con[mc.mixdown~ 1 @autogain 1].
5. 3 Desafíos de Ingeniería de Laboratorio
Realiza estos ejercicios utilizando el parche interactivo laboratorio_08_osciladores.maxpat:
Ejercicio 1: El Generador PWM Libre de Discontinuidades
- Objetivo: Construye un oscilador de pulso con modulación de ancho (PWM).
- Desafío: Usa dos ondas
[saw~]en desfase relativo restadas entre sí ([-~]), o modula el atributo de ciclo de[rect~]. Compara el resultado espectral contra el PWM naive hecho con[>~].
Ejercicio 2: El Sintetizador de Viento / Mar con Ruido Filtrado
- Objetivo: Simula el sonido del oleaje del mar.
- Desafío: Toma
[noise~]y pásalo a través de un filtro resonante[reson~]o[lores~]. Modula la frecuencia de corte muy lentamente (0.1 Hz) usando un[cycle~ 0.1]escalado entre y .
Ejercicio 3: Fase Cero Senoidal vs Cosenoidal
- Objetivo: Demuestra la fase inicial de
[cycle~]. - Desafío: Conecta
[cycle~]a un[scope~]. Envía un mensaje0.al inlet derecho de fase y observa dónde arranca la onda. Luego envía0.75y observa cómo se convierte en una onda senoidal pura que nace en cero sin producir click de inicio.
Ejercicio 4: Campana Inarmónica Aditiva con [mc.cycle~]
- Objetivo: Sintetizar una campana inarmónica clásica de Risset mediante un banco multicanal.
- Desafío: Utiliza
[mc.cycle~ @chans 10]con las relaciones de frecuencia inarmónicas de Risset: . Modula las amplitudes con el multislider y experimenta cómo el timbre muta de un espectro armónico claro a un cuerpo metálico denso.
Resumen de Principios Arquitectónicos
- Fourier Gobierna la Síntesis: Toda forma de onda compleja es una suma de sinusoides. El timbre depende de qué armónicos existen y con qué amplitud relativa ( en sierra y cuadrada).
- Aliasing es Inevitable si no hay Banda Limitada: Las esquinas matemáticas perfectas no existen en digital; usa
[saw~]y[rect~]para audio y reserva[phasor~]para modulación y fase. - Wavetables en RAM para Alta Velocidad: Los osciladores en C recorren buffers indexados por un acumulador de fase
step = f0 / fs. - Cuidado con la Fase Inicial:
[cycle~]es un coseno (amplitud 1.0 en ); compensa con fase para arranques suaves desde cero.