// supercollider · síntesis sustractiva · cuaderno abierto
Sesión 01 · Pad sustractivo y sus expansiones
Laboratorio de Síntesis con SC
El punto de partida del cuaderno técnico
Esta primera sesión fija el vocabulario que luego se expande hacia la rítmica, la granularidad y la arquitectura temporal: ProxySpace, control en vivo y patches pensados como procesos abiertos.
Esta primera sesión arranca con un objetivo simple: construir un ~pad en ProxySpace a partir de ruido filtrado. En el proceso aparecen cuestiones más ricas de lo previsto: cómo controlar arrays dentro de NodeProxy, cómo obtener paneo realmente independiente por voz, qué cambia al decorrelacionar las fuentes de ruido y cómo una síntesis inicialmente sustractiva empuja casi sola hacia la resonancia y la organización armónica en tiempo real.
Punto de partida
La sesión comienza con un banco de filtros BPF excitados por BrownNoise. A nivel de escucha, el interés está en producir un pad inestable, respirado y ligeramente granular. A nivel técnico, el patch se convierte pronto en una excusa excelente para revisar varias cosas fundamentales de SuperCollider: qué ocurre cuando un array vive en sclang y no en scsynth, cómo se distribuyen las voces en estéreo y cómo pequeñas modulaciones lentas cambian por completo la sensación de profundidad.
Lo más valioso del proceso no es solo el sonido final, sino la cadena de decisiones: por qué var funciona donde arg falla en NodeProxy, por qué Pan2 más .flop es más preciso que Splay para este caso, y por qué una misma estructura armónica puede abrirse luego hacia Klank, Ringz y Tdef sin rehacer la lógica del patch desde cero.
Seis hallazgos que ordenan la sesión
1. Arrays en ProxySpace
var sirve para arrays fijos. \notes.kr([...]) sirve para arrays modificables en tiempo real. Ese giro organiza el resto del patch.
2. Paneo por voz
Splay no resuelve bien el movimiento independiente. Pan2 y Mix(sig.flop[n]) sí lo hacen con claridad.
3. Ruido decorrelacionado
Varias fuentes de ruido independientes limpian la mezcla y dejan emerger mejor los centros tonales de cada filtro.
4. Modulación lenta
Las frecuencias de LFO basadas en Fibonacci dan una irregularidad organizada, menos mecánica y menos sincronizada.
5. Resonancia
El mismo material armónico puede pasar de BPF a Klank y Ringz, cambiando más la física del sonido que la idea musical.
6. Armonía móvil
Con Tdef el patch deja de ser una foto y se vuelve proceso: la armonía entra como capa temporal sin recompilar el NodeProxy.
El patch base que queda de la sesión
Esta es la versión que mejor resume la fase sustractiva del estudio. Mantiene el pad sobre ruido filtrado, incorpora control armónico en tiempo real y ya deja abiertas las variaciones futuras sin rehacer la arquitectura del parche.
~pad = {
var sig, pans, amp, fib, src, notes;
notes = \notes.kr([60, 67, 72, 76, 79, 83]);
fib = [1, 2, 3, 5, 8, 13] * (0.08 / 13);
pans = LFNoise1.kr(Array.fill(6, { rrand(0.05, 0.3) })).range(-1, 1);
amp = LFNoise1.kr(fib).range(0, 1);
src = BrownNoise.ar({ 0.1 } ! 6) + BrownNoise.ar(0.05);
src = src + SinOsc.ar(notes.midicps, 0, 0.02);
sig = BPF.ar(src, notes.midicps, 0.005, 1);
sig = sig * amp * 3;
sig = Pan2.ar(sig, pans);
sig = [Mix(sig.flop[0]), Mix(sig.flop[1])];
};
El uso de \notes.kr es la pieza clave para poder mover la armonía desde fuera del NodeProxy.
A partir de ahí, Tdef permite ciclar acordes sin recompilar. Ese paso es importante porque convierte un patch tímbrico en un objeto estructural: ya no solo diseña color, también organiza recorrido armónico.
~chords = [
[60, 67, 72, 76, 79, 83],
[57, 64, 69, 72, 76, 81],
[53, 60, 65, 69, 72, 77],
[55, 62, 67, 71, 74, 79]
];
Tdef(\armonia, {
var i = 0;
loop {
~pad.set(\notes, ~chords[i % ~chords.size]);
i = i + 1;
8.wait;
}
}).play;
Expansiones dentro de la misma sesión
Aunque la sesión nace como síntesis sustractiva, el propio material empuja hacia otra pregunta: qué pasa si en lugar de filtrar una fuente continua dejamos que el sonido resuene como cuerpo? Ahí entran Klank y Ringz. No aparecen como capítulo independiente, sino como prolongación natural del mismo problema.
Con Klank, la energía se acumula y decae. Con Ringz más Dust, el comportamiento ya no se parece a un pad clásico, sino a una nube de golpes microscópicos y resonancias espaciadas. El interés de dejar estas versiones dentro de la misma sesión es precisamente mostrar continuidad: misma lógica de alturas, otra física del sonido.
~padRes = {
var notes, pans, amp, fib, src, rings, sig;
notes = [40, 45, 60, 67, 72, 76, 79, 83];
fib = [1, 2, 3, 5, 8, 13, 21, 34] * (0.08 / 34);
pans = LFNoise1.kr(Array.fill(8, { rrand(0.05, 0.3) })).range(-1, 1);
amp = LFNoise1.kr(fib).range(0, 1);
rings = LFNoise1.kr(Array.fill(8, { rrand(0.1, 0.4) })).range(0.5, 6.0);
src = Dust.ar({ rrand(1.0, 8.0) } ! 8, 0.3);
sig = Ringz.ar(src, notes.midicps, rings);
sig = sig * amp * 0.4;
sig = Pan2.ar(sig, pans);
sig = [Mix(sig.flop[0]), Mix(sig.flop[1])];
};
La sesión deja una idea de método: estudiar un patch no es fijarlo, sino someterlo a variaciones que revelen su estructura.
Por dónde seguir
La siguiente ampliación natural de esta sesión podría ir por tres caminos: trabajar mejor el comportamiento del filtro y sus envolventes, separar una sesión específica de resonadores, o convertir este mismo ~pad en material para composición lenta y transiciones de larga duración.
- hacer una versión centrada solo en
rq, barridos y envolventes de filtro; - abrir una sesión propia para
KlankyRingzcomo síntesis por resonancia; - llevar este patch hacia una pieza más estable con cambios armónicos, capas y automatización.