Leccion 08 — Proyecto Final: Arreglo Completo Multicapa (version Strudel)
Objetivo
Este es el cierre del curso. Al terminar habras integrado todo lo aprendido en las Lecciones 00-07 en un arreglo con al menos dos secciones contrastantes que se alternan automaticamente, y habras disenado — con libertad creativa propia — una tercera seccion original. Este es el momento en que dejas de tocar patrones sueltos y empiezas a componer y dirigir un arreglo cubano completo.
Concepto: el arreglo por secciones
Ninguna cancion cubana real suena igual de principio a fin. Un tema tipico alterna:
- Una seccion intima ("verso"/son): textura ligera, pocos elementos — clave (L01), tumbao de conga (L02), guiro y maracas (L03), bongo tocando el martillo suave (L04).
- Una seccion energica de cierre ("montuno"/mambo/songo): textura densa — el bongo cambia a campana (L04), se anade cascara de timbal y cajon (L07), y aparecen redobles que anuncian cambios.
Esta alternancia de densidad instrumental es el arreglo. Un buen arreglista cubano no compone "una textura fija que dura toda la cancion": compone un recorrido de tension y descanso, y el oyente/bailador siente ese recorrido como la forma misma de la cancion.
Como programar esto en Strudel: .every()
Ya usaste .every(N, x => B) en la Leccion 07 (el redoble cada 4 compases). La misma tecnica,
aplicada a capas completas en vez de a un solo redoble, es lo que necesitas para alternar entre
una Seccion A y una Seccion B:
$: <patron Seccion A>.every(4, x => <patron Seccion B>)
Esto significa: "toca el patron de la Seccion A en cada compas, EXCEPTO que cada 4 compases ese
compas se reemplaza por el patron de la Seccion B". Repitiendo esta idea en cada capa que deba
cambiar, logras que todo el arreglo entre en "modo montuno" simultaneamente cada 4 compases.
(La funcion x => B ignora el patron de entrada y devuelve B — equivale al const $ B de Tidal.)
El arreglo de esta leccion: Son montuno <-> Mambo/Songo
Seccion A ("son montuno"), sonando la mayoria del tiempo:
| Capa | Patron | Origen |
|---|---|---|
| clave | <[68 ~ ~ 68 ~ ~ 68 ~] [~ ~ 68 ~ 68 ~ ~ ~]> |
Leccion 01 |
| tumbao de conga | 89 89 89 90 89 89 90 91 (con swing) |
Leccion 02 |
| guiro | 62 ~ 63 ~ 62 ~ 73 ~ |
Leccion 03 |
| maracas | 69 70 69 70 69 70 69 70 |
Leccion 03 |
| bongo (martillo) | 28 41 28 41 36 41 28 41 (con swing) |
Leccion 04 |
Seccion B ("mambo/songo"), cada 4to compas:
| Capa | Cambia a | Origen |
|---|---|---|
| bongo -> campana | 53 ~ 52 53 ~ 52 53 ~ |
Leccion 04, variante "con tip" |
| cascara (capa nueva, solo en B) | 17 17 23 17 17 17 23 17 |
Leccion 07 |
| redoble (capa nueva, solo en B) | 65 65 65 65 66 66 66 66 |
Leccion 07 |
Clave, tumbao, guiro y maracas siguen sonando igual en ambas secciones — son el "suelo" constante.
Lo que cambia entre A y B es la capa de bongo/campana (que se transforma con .every(4, ...)) y la
aparicion puntual de cascara + redoble (que en la Seccion A estan en silence y solo "aparecen" en
el compas de la Seccion B).
Ejemplo de codigo
arreglo_dos_secciones.strudel — las 7 capas completas
// ~100 bpm, tempo de son
setcps(0.42)
// ===== Capas constantes: el "suelo" del arreglo =====
// clave de son 3-2 (L01)
$: s("<[clave ~ ~ clave ~ ~ clave ~] [~ ~ clave ~ clave ~ ~ ~]>")
// tumbao de conga (L02)
$: s("conga:0 conga:0 conga:0 conga:4 conga:0 conga:0 conga:4 conga:28").swingBy(1/8, 8)
// guiro (L03)
$: s("guiro:1 ~ guiro:0 ~ guiro:1 ~ guiro:0 ~").gain(0.6)
// maracas (L03)
$: s("shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8").gain(0.5)
// ===== Seccion A: bongo martillo. Seccion B (cada 4 compases): campana =====
$: s("bongo:0 bongo:14 bongo:0 bongo:14 bongo:6 bongo:14 bongo:0 bongo:14").swingBy(1/8, 8)
.every(4, x => s("cowbell ~ cowbell:3 cowbell ~ cowbell:3 cowbell ~"))
// ===== Capas que SOLO aparecen en la Seccion B =====
// cascara (L07)
$: silence.every(4, x => s("woodblock:3 woodblock:3 woodblock:5 woodblock:3 woodblock:3 woodblock:3 woodblock:5 woodblock:3"))
// redoble (L07)
$: silence.every(4, x => s("bongo:26 bongo:26 bongo:26 bongo:26 bongo:12 bongo:12 bongo:12 bongo:12"))
Las 4 capas constantes son los mismos patrones exactos de las Lecciones 01-03. Las 3 restantes dan
forma a la alternancia, con 2 usos distintos de .every(4, x => B):
- Transformacion (bongo/campana): el patron base (martillo) se reemplaza por B (campana) cada 4to compas. Nunca hay silencio: siempre suena algo, solo cambia CUAL de las 2 capas.
- Aparicion (cascara, redoble): en vez de un patron base real, parten de
silence— no suenan NADA durante 3 compases de cada 4, y "aparecen" solo en el 4to compas.
Evaluando con Ctrl+Enter, oiras 3 compases de son montuno seguidos de 1 compas de mambo/songo, en
bucle de 4 compases.
Por que la Seccion B siempre cae en el mismo lado de la clave
Este arreglo mezcla 2 ciclos de duracion distinta: la clave alterna cada 2 compases (lado de 3 /
lado de 2), y la transicion de seccion ocurre cada 4 compases via .every(4, ...). Como 4 es
multiplo de 2, la relacion NO es aleatoria:
Compas 1: lado de 3 -> Seccion A o B
Compas 2: lado de 2 -> Seccion A
Compas 3: lado de 3 -> Seccion A o B
Compas 4: lado de 2 -> Seccion A
.every(4, ...) dispara la Seccion B 1 de cada 4 compases — pero SIEMPRE en un compas de "lado de
3", nunca de "lado de 2", porque todo multiplo de 4 es tambien multiplo de 2. Si cambiaras every(4)
por every(3) (no multiplo de 2), la Seccion B empezaria a caer en lados de clave distintos cada
vez — un buen experimento para entender por que los arreglistas cubanos casi siempre usan multiplos
de 2 compases para sus transiciones.
Este es tambien el momento de tocar como director: mutea/desmutea capas con _ (_$:) mientras
el patron suena, simulando entradas y salidas de instrumentos (por ejemplo, entra solo con clave +
tumbao, deja que se establezca el son, y luego ve incorporando guiro, maracas, bongo... hasta el
arreglo completo).
Ejercicios
- Un quinto simplificado en el cierre. Anade una tercera capa de conga (Conga 3: Open Right =
103, Open Left = 102, Bass = 107) que solo suene en la Seccion B, usando la misma
tecnica de
silence.every(4, ...)que la cascara y el redoble. - Introduccion mas larga. Cambia la Seccion A de 3 a 7 compases (que la Seccion B aparezca cada
8 en vez de cada 4): cambia
.every(4, ...)por.every(8, ...)en todas las capas relevantes. - (Ejercicio abierto, el mas importante del curso.) Disena tu propia Seccion C — por
ejemplo, un "mambo/moña" instrumental de cierre con todas las capas fuertes, mas una capa de
vibraslap (nota 9) marcando un unico golpe de "corte" al final de cada 8 compases, integrada
con
.every()y/o.whenmod(). (El vibraslap es un resorte metalico en U con una bola de madera y una camara con dientes sueltos: se golpea la bola contra la palma y produce un "traqueteo" seco, ideal como golpe de puntuacion.) Tienes libertad total: la unica condicion es que tu solucion sea codigo Strudel funcional y bien comentado. Ensolucion_ejercicios/ejercicio_3_solucion.strudelhay una solucion posible (no la unica) a modo de inspiracion — compara despues de intentarlo.
Para cerrar el curso
Vuelve a escuchar mentalmente el recorrido completo: desde el pulso desnudo y "El Manisero" (L00), pasando por la tension organizadora de la clave (L01), la textura intima del son de Buena Vista Social Club (L02-04), la improvisacion libre del quinto en la rumba (L05), la resolucion bailable del cha-cha-cha (L06), y la energia urbana del songo de Los Van Van (L07) — hasta llegar aqui, donde tu mismo decides cuando entra cada capa y como se transforma el arreglo. Eso es, en esencia, lo que hace un arreglista cubano. Ya tienes las herramientas conceptuales y tecnicas para seguir explorando por tu cuenta — el resto es practica y oido.
Ejemplos de codigo
Pulsa ▶ Tocar aqui para abrir el editor de Strudel y reproducir el patron directamente en el navegador (usa los sonidos nativos de Strudel, no hace falta instalar nada). O Copia el codigo y pegalo en strudel.cc.
// Leccion 08 - Proyecto final: arreglo de 2 secciones (Son montuno <-> Mambo/Songo)
// Integra: clave (L01), tumbao de conga (L02), guiro+maracas (L03), bongo/campana (L04),
// cascara+redoble (L07).
//
// Uso: Ctrl+Enter reproduce las 7 capas. Mutear una: pon "_" delante ("_$:"). Detener: Ctrl+.
//
// Estructura: 3 compases de "Seccion A" (son montuno) + 1 compas de "Seccion B" (mambo/songo),
// en bucle de 4 compases (.every(4, ...)).
setcps(0.42) // ~100 bpm, tempo de son
// ===== Capas constantes: suenan igual en Seccion A y Seccion B (el "suelo" del arreglo) =====
$: s("<[clave ~ ~ clave ~ ~ clave ~] [~ ~ clave ~ clave ~ ~ ~]>") // clave de son 3-2 (Leccion 01)
$: s("conga:0 conga:0 conga:0 conga:4 conga:0 conga:0 conga:4 conga:28").swingBy(1/8, 8) // tumbao de conga (Leccion 02)
$: s("guiro:1 ~ guiro:0 ~ guiro:1 ~ guiro:0 ~").gain(0.6) // guiro (Leccion 03)
$: s("shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8").gain(0.5) // maracas (Leccion 03)
// ===== Seccion A: bongo en martillo. Seccion B (cada 4 compases): campana de montuno =====
$: s("bongo:0 bongo:14 bongo:0 bongo:14 bongo:6 bongo:14 bongo:0 bongo:14").swingBy(1/8, 8)
.every(4, x => s("cowbell ~ cowbell:3 cowbell ~ cowbell:3 cowbell ~"))
// A: martillo de bongo / B: campana con tip (Leccion 04)
// ===== Capas que SOLO aparecen en la Seccion B (silence el resto del tiempo) =====
$: silence.every(4, x => s("woodblock:3 woodblock:3 woodblock:5 woodblock:3 woodblock:3 woodblock:3 woodblock:5 woodblock:3")) // cascara (Leccion 07)
$: silence.every(4, x => s("bongo:26 bongo:26 bongo:26 bongo:26 bongo:12 bongo:12 bongo:12 bongo:12")) // redoble (Leccion 07)
Soluciones de los ejercicios
Pulsa ▶ Tocar aqui para abrir el editor de Strudel y reproducir el patron directamente en el navegador (usa los sonidos nativos de Strudel, no hace falta instalar nada). O Copia el codigo y pegalo en strudel.cc.
// Leccion 08 - Ejercicio 1: anadir un "quinto" simplificado (Conga 3) solo en la Seccion B
// Misma tecnica que la cascara/redoble: silence.every(4, x => <patron>)
//
// Uso: Ctrl+Enter. Mutear una capa: pon "_" delante. Detener: Ctrl+.
setcps(0.42)
$: s("<[clave ~ ~ clave ~ ~ clave ~] [~ ~ clave ~ clave ~ ~ ~]>")
$: s("conga:0 conga:0 conga:0 conga:4 conga:0 conga:0 conga:4 conga:28").swingBy(1/8, 8)
$: s("guiro:1 ~ guiro:0 ~ guiro:1 ~ guiro:0 ~").gain(0.6)
$: s("shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8").gain(0.5)
$: s("bongo:0 bongo:14 bongo:0 bongo:14 bongo:6 bongo:14 bongo:0 bongo:14").swingBy(1/8, 8)
.every(4, x => s("cowbell ~ cowbell:3 cowbell ~ cowbell:3 cowbell ~"))
$: silence.every(4, x => s("woodblock:3 woodblock:3 woodblock:5 woodblock:3 woodblock:3 woodblock:3 woodblock:5 woodblock:3"))
$: silence.every(4, x => s("bongo:26 bongo:26 bongo:26 bongo:26 bongo:12 bongo:12 bongo:12 bongo:12"))
// Conga 3 ("quinto" simplificado): solo suena en el compas de la Seccion B, dando color de cierre.
// Patron sincopado sencillo: Open Right(`conga:14`) - Open Left(`conga:16`) - Bass(`conga:10`)
$: silence.every(4, x => s("conga:14 ~ conga:16 conga:10 ~ conga:16 conga:14 ~")) // quinto (solo Seccion B)
// Leccion 08 - Ejercicio 2: introduccion mas larga (Seccion B cada 8 compases en vez de 4)
// Cambio unico: .every(4, ...) -> .every(8, ...) en todas las capas relevantes.
//
// Uso: Ctrl+Enter. Mutear una capa: pon "_" delante. Detener: Ctrl+.
setcps(0.42)
$: s("<[clave ~ ~ clave ~ ~ clave ~] [~ ~ clave ~ clave ~ ~ ~]>")
$: s("conga:0 conga:0 conga:0 conga:4 conga:0 conga:0 conga:4 conga:28").swingBy(1/8, 8)
$: s("guiro:1 ~ guiro:0 ~ guiro:1 ~ guiro:0 ~").gain(0.6)
$: s("shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8").gain(0.5)
$: s("bongo:0 bongo:14 bongo:0 bongo:14 bongo:6 bongo:14 bongo:0 bongo:14").swingBy(1/8, 8)
.every(8, x => s("cowbell ~ cowbell:3 cowbell ~ cowbell:3 cowbell ~"))
$: silence.every(8, x => s("woodblock:3 woodblock:3 woodblock:5 woodblock:3 woodblock:3 woodblock:3 woodblock:5 woodblock:3"))
$: silence.every(8, x => s("bongo:26 bongo:26 bongo:26 bongo:26 bongo:12 bongo:12 bongo:12 bongo:12"))
// Leccion 08 - Ejercicio 3 (ABIERTO): una solucion posible, NO la unica correcta.
// Se anade una "Seccion C" (mambo/mona de cierre): un golpe de vibraslap de "corte" en el ultimo
// compas de cada bloque de 8, sobre las capas densas de la Seccion B.
//
// Decisiones de arreglo:
// 1. La Seccion C reutiliza las capas densas de la Seccion B (campana, cascara, redoble) para que
// el cierre se sienta como una intensificacion, no como algo nuevo.
// 2. Se anade una capa de vibraslap (sonido `vibraslap`) que SOLO suena en el compas 7 de cada bloque de 8
// (.whenmod(8, 7, ...)), marcando un unico "corte" justo antes de que el ciclo de 8 reinicie.
// 3. Se usa whenmod en vez de every porque necesitamos UN compas especifico (el ultimo, el 7 de 8),
// no "cada N compases" desde el compas 0. En Strudel, .whenmod(a, b, f) aplica f cuando
// (ciclo mod a) >= b -- igual que en Tidal.
//
// Uso: Ctrl+Enter. Mutear una capa: pon "_" delante. Detener: Ctrl+.
setcps(0.42)
$: s("<[clave ~ ~ clave ~ ~ clave ~] [~ ~ clave ~ clave ~ ~ ~]>")
$: s("conga:0 conga:0 conga:0 conga:4 conga:0 conga:0 conga:4 conga:28").swingBy(1/8, 8)
$: s("guiro:1 ~ guiro:0 ~ guiro:1 ~ guiro:0 ~").gain(0.6)
$: s("shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8 shaker_small shaker_small:8").gain(0.5)
// Bongo (Seccion A) <-> campana (Seccion B/C, cada 4 compases)
$: s("bongo:0 bongo:14 bongo:0 bongo:14 bongo:6 bongo:14 bongo:0 bongo:14").swingBy(1/8, 8)
.every(4, x => s("cowbell ~ cowbell:3 cowbell ~ cowbell:3 cowbell ~"))
$: silence.every(4, x => s("woodblock:3 woodblock:3 woodblock:5 woodblock:3 woodblock:3 woodblock:3 woodblock:5 woodblock:3")) // cascara (Seccion B/C)
$: silence.every(4, x => s("bongo:26 bongo:26 bongo:26 bongo:26 bongo:12 bongo:12 bongo:12 bongo:12")) // redoble (Seccion B/C)
// Seccion C: solo en el compas 7 de cada bloque de 8 (el ultimo antes de reiniciar), un golpe de
// vibraslap marca el "corte" final de la mona de cierre.
$: silence.whenmod(8, 7, x => s("vibraslap ~ ~ ~ ~ ~ ~ ~")) // vibraslap: corte de cierre