Inicio / Leccion 00

Leccion 00 — Fundamentos: Pulso y Entorno (version Strudel)

Objetivo

Al terminar esta leccion podras: (1) calcular el setcps correcto de Strudel a partir de cualquier tempo en bpm, y (2) disparar por MIDI cualquier instrumento del kit EZdrummer Latin Cuban Percussion, reconociendo de oido las articulaciones basicas (abierto, tapado, bajo) de cada familia.

Concepto

Pulso, compas y subdivision

Toda la musica cubana que vas a programar en este curso esta en compas de 4/4: cuatro tiempos por compas, y cada tiempo se subdivide en dos corcheas ("y"). Eso da 8 corcheas por compas, que es la unidad que vamos a usar constantemente para escribir patrones, por ejemplo:

posicion: 1   2   3   4   5   6   7   8
corchea:  1   &   2   &   3   &   4   &
tiempo:   1       2       3       4

Cuando en este curso veas una notacion como X..X..X., cada caracter es una de esas 8 posiciones: X es un golpe, . es silencio.

Ojo: posicion no es lo mismo que tiempo

Esta es una confusion muy comun al empezar. A lo largo del curso vas a leer frases como "el golpe cae en la posicion 4" — eso NO significa "en el tiempo 4". Son 2 cosas distintas:

  • Tiempo son los 4 pulsos principales del compas (1, 2, 3, 4) — lo que cuentas con el pie al bailar.
  • Posicion es el indice de las 8 corcheas de la tabla de arriba — una numeracion mas fina que incluye tanto los tiempos como las "y" que caen entre ellos.

Cada tiempo ocupa 2 posiciones: el tiempo en si, y su "y" inmediatamente despues. Formula rapida:

  • Si la posicion es impar (1, 3, 5, 7), cae exactamente sobre un tiempo: tiempo = (posicion + 1) / 2. Ej.: posicion 5 -> tiempo (5+1)/2 = tiempo 3.
  • Si la posicion es par (2, 4, 6, 8), cae en la "y" de un tiempo: tiempo = posicion / 2. Ej.: posicion 4 -> "y" del tiempo 4/2 = "y" del tiempo 2, NO el tiempo 4 ni el tiempo 3.

Este ultimo ejemplo (posicion 4 = "y" del tiempo 2) es exactamente el primer tono abierto del tumbao de conga que vas a estudiar en la Leccion 02.

La relacion cps / bpm

Strudel (como Tidal) no piensa en "bpm" (beats per minute) sino en cps (cycles per second): cuantos ciclos completos suenan por segundo. En este proyecto usamos la convencion 1 ciclo = 1 compas de 4/4. Como un compas tiene 4 tiempos, y bpm mide tiempos por minuto:

cps = bpm / 60 / 4  =  bpm / 240

Ejemplos:

bpm cps Genero de referencia
80 0.333 bolero / son muy lento
100 0.417 (aprox. 0.42) son tradicional (tempo base de este curso)
130 0.542 mambo / songo rapido

En Strudel esto se escribe con setcps, y puedes dejarle a JavaScript la division en vez de redondear a mano: setcps(100/60/4) es exactamente igual que setcps(0.4166...). (Alternativa equivalente: setcpm(100/4), cycles per minute = bpm/4.)

Disparar una nota MIDI

El patron de salida que vas a usar en TODO este curso es siempre el mismo:

$: note("68").midichan(1).midi('TidalMIDI')

note(...) recibe una secuencia de numeros de nota MIDI (usa ~ para silencio), .midichan(1) selecciona el canal MIDI 1 (equivale al midichan 0 de Tidal, que es 0-indexado), y .midi('TidalMIDI') envia por WebMIDI al puerto virtual TidalMIDI que llega a EZdrummer. El numero de nota es el que determina que instrumento y que articulacion suena — por eso el mapa LATIN_CUBAN_MIDI_MAP.md (raiz del proyecto) es tu referencia constante durante todo el curso.

El prefijo $: declara un patron; si pones varias lineas $: suenan a la vez (son las capas del arreglo). Ctrl+Enter evalua y reproduce todo el documento; Ctrl+. detiene todo.

Escucha y analisis: "El Manisero" (The Peanut Vendor, Moises Simons, 1930)

"El Manisero" fue el primer gran exito mundial de un ritmo cubano: la version instrumental de Don Azpiazu y su Havana Casino Orchestra (grabada en 1930) desato la primera "fiebre de rumba" en Estados Unidos y Europa, mucho antes de que existieran el mambo o la salsa. La cancion original es un pregon — el canto callejero de un vendedor ambulante de mani ("¡Mani, mani, manisero, que rico el mani!") tal como se escuchaba en las calles de La Habana.

Lo que nos interesa de "El Manisero" para esta leccion es su base ritmica: el bajo y la percusion tocan una celula de 5 golpes en 8 corcheas conocida como cinquillo cubano:

X . X X . X X .
1 2 3 4 5 6 7 8

Es una celula simetrica (corchea-semicorchea-corchea-semicorchea-corchea, duraciones 2+1+2+1+2): se lee igual de adelante hacia atras que al reves.

Escucha la grabacion (por ejemplo la version de Don Azpiazu) prestando atencion solo al bajo/tumbadora: notaras que el patron no cae "parejo" sobre los 4 tiempos — tras el golpe inicial (posicion 1) hay dos grupos de dos golpes pegados (posiciones 3-4 y 6-7). Esa irregularidad es la firma sonora de la musica cubana desde el siglo XIX (el cinquillo viene de la contradanza y la habanera), y es el ancestro directo de la sincopa que en la Leccion 01 vas a estudiar de forma mas refinada: la clave.

El archivo codigo_ejemplo/02_cinquillo_manisero.strudel te deja escuchar exactamente esa celula, aislada, tocada con claves.

Ejemplo de codigo

00_disparo_instrumentos.strudel — un disparo por instrumento/articulacion

setcps(0.42)

// claves (Hit) - nota 68   <-- ACTIVA por defecto
$: note("68").midichan(1).midi('TidalMIDI')
// campana / cowbell 1 shank - nota 53
_$: note("53").midichan(1).midi('TidalMIDI')
// conga 2, golpe de bajo (Bass) - nota 91
_$: note("91").midichan(1).midi('TidalMIDI')
// ...y asi hasta 12 lineas, una por cada familia de instrumento del kit

Cada linea dispara UNA sola nota MIDI hacia EZdrummer. A diferencia de Tidal (donde se evalua una linea a la vez con Shift+Enter), en Strudel Ctrl+Enter evalua TODO el documento de una vez — pero solo suenan las lineas que NO empiezan por _. Por eso 11 de las 12 lineas vienen muteadas con el prefijo _ (_$:) y solo la de las claves esta activa: al evaluar oiras las claves. Para oir otro instrumento aislado, pon _ delante de la linea activa y quitaselo a la que quieras, y pulsa Ctrl+Enter. Asi comparas timbres de uno en uno.

01_pulso_y_cps.strudel — el mismo patron a 3 tempos distintos

// 80 bpm -> cps = 80/240 = 0.333...
setcps(80/60/4)
// 100 bpm (tempo del resto del curso)
// setcps(100/60/4)
// 130 bpm
// setcps(130/60/4)

// clave (misma en los 3 tempos)
$: note("68 ~ ~ 68 ~ 68 ~ ~").midichan(1).midi('TidalMIDI')

El patron de clave (68 ~ ~ 68 ~ 68 ~ ~) es identico en los 3 casos; lo unico que cambia es cual setcps esta activo. Como en Strudel todos los setcps del documento se ejecutan (gana el ultimo), deja uno solo sin comentar y comenta los otros dos con //, luego Ctrl+Enter. Ve cambiando cual esta activo para sentir como cambia la velocidad del ciclo sin cambiar ni una nota del patron.

02_cinquillo_manisero.strudel — el cinquillo con claves

setcps(100/60/4)

// cinquillo con claves: X.XX.XX.
$: note("68 ~ 68 68 ~ 68 68 ~").midichan(1).midi('TidalMIDI')

note("68 ~ 68 68 ~ 68 68 ~") es la celula de cinquillo completa en una sola secuencia de 8 corcheas: 68 dispara la clave (Hit), ~ es silencio explicito. Evalua con Ctrl+Enter.

Ejercicios

  1. Programa el cinquillo (X.XX.XX.) pero con maracas (nota 69) en vez de claves, a 90 bpm.
  2. Calcula y escribe el setcps correcto para una pieza a 96 bpm, y dispara un patron de 4 golpes de cajon (nota 10, bajo abierto) a ese tempo.
  3. Combina por primera vez 2 instrumentos sonando simultaneamente: clave (nota 68) tocando solo en las posiciones 1 y 5 de un compas de 8 corcheas, y maracas (nota 69) tocando las 8 corcheas completas, usando dos capas (dos lineas $:).

Soluciones en solucion_ejercicios/ejercicio_1_solucion.strudel, ejercicio_2_solucion.strudel y ejercicio_3_solucion.strudel.

Ejemplos de codigo

Pulsa Copiar y pega en strudel.cc, o abre el editor interactivo aqui mismo. El sonido sale por WebMIDI a EZdrummer (.midi('TidalMIDI')); sin ese setup el editor evalua igual pero no suena.

00_disparo_instrumentos.strudel
// Leccion 00 - Disparo individual de cada familia de instrumento del kit Latin Cuban Percussion
// Notas MIDI verificadas contra LATIN_CUBAN_MIDI_MAP.md v3 (mapa oficial Toontrack, EZX-Keys.pdf)
// Requiere: loopMIDI (TidalMIDI) + EZdrummer escuchando TidalMIDI. Navegador Chrome/Edge (WebMIDI).
//
// Uso: al pulsar Ctrl+Enter suena SOLO la linea activa (la que NO empieza por "_"). Por defecto
// suenan las claves (68), una vez por ciclo. Para oir otro instrumento aislado: pon "_" delante de
// la linea activa y quitaselo al que quieras escuchar, luego Ctrl+Enter. Detener todo: Ctrl+.

setcps(0.42)

$: note("68").midichan(1).midi('TidalMIDI')    // claves (Hit) - nota 68   <-- ACTIVA por defecto
_$: note("53").midichan(1).midi('TidalMIDI')   // campana / cowbell 1 shank - nota 53
_$: note("91").midichan(1).midi('TidalMIDI')   // conga 2, golpe de bajo (Bass) - nota 91
_$: note("90").midichan(1).midi('TidalMIDI')   // conga 2, tono abierto (Open Right) - nota 90
_$: note("89").midichan(1).midi('TidalMIDI')   // conga 2, tono tapado / manoteo (Muted Right) - nota 89
_$: note("28").midichan(1).midi('TidalMIDI')   // bongo 1, tono abierto (Open Finger) - nota 28
_$: note("62").midichan(1).midi('TidalMIDI')   // guiro (Hit) - nota 62
_$: note("69").midichan(1).midi('TidalMIDI')   // maracas 1 (Beat) - nota 69
_$: note("10").midichan(1).midi('TidalMIDI')   // cajon, bajo abierto (Bass Open, "kick") - nota 10
_$: note("86").midichan(1).midi('TidalMIDI')   // cajon, palmada abierta (Slap Open, "snare") - nota 86
_$: note("21").midichan(1).midi('TidalMIDI')   // timbal 1, tono abierto (Open) - nota 21
_$: note("65").midichan(1).midi('TidalMIDI')   // redoble de timbal (Timbale 2 Roll) - nota 65

// Reto de oido: ve activando una linea a la vez (deja solo UNA sin "_"), cierra los ojos
// y nombra el instrumento y su articulacion (abierto/tapado/bajo) solo por el timbre.
01_pulso_y_cps.strudel
// Leccion 00 - Relacion entre cps (cycles per second) y bpm (beats per minute)
// Convencion de este proyecto: 1 ciclo = 1 compas de 4/4 -> cps = bpm / 60 / 4 = bpm / 240
// Notas MIDI verificadas contra LATIN_CUBAN_MIDI_MAP.md v3
//
// Uso: deja UN solo setcps sin comentar (los otros dos con "//") y pulsa Ctrl+Enter para oir
// el mismo patron de claves a esa velocidad. Cambia cual setcps esta activo para comparar.
// Detener todo: Ctrl+.

setcps(80/60/4)       // 80 bpm (son muy lento / bolero) = 0.333...
// setcps(100/60/4)   // 100 bpm (son tradicional tipico, tempo del resto del curso) = 0.4166...
// setcps(130/60/4)   // 130 bpm (songo/mambo rapido) = 0.5416...

$: note("68 ~ ~ 68 ~ 68 ~ ~").midichan(1).midi('TidalMIDI')   // clave (misma en los 3 tempos)

// Nota: setcps(0.42) es la forma abreviada de ~100 bpm; usar (bpm/60/4) es mas legible.
02_cinquillo_manisero.strudel
// Leccion 00 - El cinquillo cubano, celula ritmica de "El Manisero" (1930)
// Celula simetrica de 5 golpes en 8 corcheas: X.XX.XX. (posiciones 1,3,4,6,7 de 8)
//   = corchea-semicorchea-corchea-semicorchea-corchea (duraciones 2+1+2+1+2)
// Ancestro historico de la sincopa cubana que mas tarde se refina en la clave (Leccion 01)
// Notas MIDI verificadas contra LATIN_CUBAN_MIDI_MAP.md v3
//
// Uso: pega en strudel.cc y pulsa Ctrl+Enter. Detener todo: Ctrl+.

setcps(100/60/4)

$: note("68 ~ 68 68 ~ 68 68 ~").midichan(1).midi('TidalMIDI')   // cinquillo con claves: X.XX.XX.

// Escucha como el patron NO cae parejo sobre los 4 tiempos: tras el golpe inicial (posicion 1)
// hay dos grupos de 2 corcheas pegadas (posiciones 3-4 y 6-7) que generan el "tumbao"
// caracteristico que luego escucharas en la conga (Leccion 02). La celula es simetrica.

Soluciones de los ejercicios

Pulsa Copiar y pega en strudel.cc, o abre el editor interactivo aqui mismo. El sonido sale por WebMIDI a EZdrummer (.midi('TidalMIDI')); sin ese setup el editor evalua igual pero no suena.

ejercicio_1_solucion.strudel
// Solucion ejercicio 1 (Leccion 00)
// Enunciado: programar el cinquillo (X.XX.XX.) pero con maracas en vez de claves, a 90 bpm.
// Notas MIDI verificadas contra LATIN_CUBAN_MIDI_MAP.md v3

setcps(90/60/4)

$: note("69 ~ 69 69 ~ 69 69 ~").midichan(1).midi('TidalMIDI')   // cinquillo con maracas 1 (nota 69), 90 bpm
ejercicio_2_solucion.strudel
// Solucion ejercicio 2 (Leccion 00)
// Enunciado: calcular el setcps correcto para 96 bpm y disparar 4 golpes de cajon a ese tempo.
// Formula: cps = bpm / 60 / 4 = 96 / 60 / 4 = 0.4

setcps(96/60/4)   // = 0.4

$: note("10 10 10 10").midichan(1).midi('TidalMIDI')   // 4 golpes de cajon, bajo abierto (nota 10), a 96 bpm
ejercicio_3_solucion.strudel
// Solucion ejercicio 3 (Leccion 00)
// Enunciado: combinar clave (posiciones 1 y 5 de 8) con maracas tocando las 8 corcheas, en 2 capas.
// Notas MIDI verificadas contra LATIN_CUBAN_MIDI_MAP.md v3
//
// Uso: Ctrl+Enter reproduce las 2 capas a la vez. Mutear una: pon "_" delante ("_$:"). Parar: Ctrl+.

setcps(100/60/4)

$: note("68 ~ ~ ~ 68 ~ ~ ~").midichan(1).midi('TidalMIDI')   // clave en posiciones 1 y 5 de 8
$: note("69*8").midichan(1).midi('TidalMIDI')                // maracas en las 8 corcheas