Skip to content

Commit 659b676

Browse files
committed
capítulo 9
1 parent 5f9f483 commit 659b676

File tree

6 files changed

+394
-0
lines changed

6 files changed

+394
-0
lines changed

etc/doc/tutorial/es/08-Data-Structures.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,9 @@ necesitamos considerar una estructura de datos muy sencilla - la lista.
1515
Mirémosla en mayor detalle. Cubriremos su forma básica y también el modo de
1616
utilizarlas para representar escalas y acordes.
1717

18+
19+
20+
21+
22+
23+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
9 Live Coding
2+
3+
# Live Coding
4+
5+
Uno de los aspectos más excitantes de Sonic Pi es que permite escribir
6+
y modificar código 'al vuelo' para hacer música, así como harías con
7+
una guitarra. Una ventaja de esto es que te da más retroalimentación
8+
mientras compones (corre un bucle sencillo (juega con él hasta que sea
9+
perfecto). Sin embargo, la mayor ventaja es poder ejecutar Sonic Pi en
10+
vivo en escena.
11+
12+
En esta sección cubriremos lo fundamental de tornar tu código estático de
13+
composiciones en ejecuciones dinámicas.
14+
15+
¡Prepárate!
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
9.1 Fundamentos de Live Coding
2+
3+
# Live Coding
4+
5+
Ya sabemos lo suficiente para comenzar a divertirnos en serio. En esta
6+
sección te mostraré cómo comenzar a crear composiciones musicales en vivo
7+
y convertirlas en ejecuciones. Para ello necesitamos 3 ingredientes:
8+
9+
* Habilidad para escribir código que haga sonidos - CHECK!
10+
* Habilidad de escribir funciones - CHECK!
11+
* Hbilidad de usar hilos (nominales) - CHECK!
12+
13+
¡Muy bien, comencemos! Hagamos nuestros primeros sonidos de códigos en vivo
14+
Primero necesitamos una función conteniendo el código que necesitamos tocar
15+
Comencemos con algo simple. También necesitamos llamadas en bucle a esa
16+
función en un hilo:
17+
```
18+
define :my_loop do
19+
play 50
20+
sleep 1
21+
end
22+
23+
in_thread(name: :looper) do
24+
loop do
25+
my_loop
26+
end
27+
end
28+
```
29+
30+
Si te parece complicado, vuelve a leer las secciones de funciones e hilos.
31+
No es tan complicado una vez entiendes bien esos conceptos.
32+
33+
Lo que tenemos es una función que toca la nota 50 y duerme por un pulso.
34+
Después definimos un hilo llamado `:looper` que bucle llamando `my_loop`
35+
repetidamente.
36+
37+
Si corres este código, escucharás la nota 50 una y otra vez...
38+
39+
## ¡Cambiandolo al vuelo!
40+
41+
Aquí es donde comienza la diversión. Mientras el código *aún corre*
42+
cambia 50 a otro número, digamos 55, y presiona Run otra vez. ¡Woah!
43+
¡cambió en vivo!
44+
45+
No añadió una nueva capa porque usamos hilos nombrados, los que sólo
46+
permiten un hilo por cada nombre. El sonido cambió porque *redefinimos*
47+
la función. LE dimos a `:my_loop`una nueva definición. CUando el hilo
48+
`:looper` bucleó, simplemente llamó la nueva definición.
49+
50+
Sigue cambiándolo, cambia la nora, el tiempo de pausa. ¿qué tal añadir un
51+
`use_synth`? Por ejemplo, esto:
52+
53+
```
54+
define :my_loop do
55+
use_synth :tb303
56+
play 50, release: 0.3
57+
sleep 0.25
58+
end
59+
```
60+
Ahora suena interesante, pero podemos mejorarlo, aún. En vez de tocar la
61+
misma nota, hagámoslo con un acorde:
62+
63+
```
64+
define :my_loop do
65+
use_synth :tb303
66+
play chord(:e3, :minor), release: 0.3
67+
sleep 0.5
68+
end
69+
```
70+
71+
¿tocamos notas del acorde al azar?:
72+
73+
```
74+
define :my_loop do
75+
use_synth :tb303
76+
play choose(chord(:e3, :minor)), release: 0.3
77+
sleep 0.25
78+
end
79+
```
80+
81+
o usando un valor de corte al azar:
82+
83+
```
84+
define :my_loop do
85+
use_synth :tb303
86+
play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
87+
sleep 0.25
88+
end
89+
```
90+
91+
Al final, añadamos un poco de batería:
92+
93+
```
94+
define :my_loop do
95+
use_synth :tb303
96+
sample :drum_bass_hard, rate: rrand(0.5, 2)
97+
play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
98+
sleep 0.25
99+
end
100+
```
101+
102+
¡Ahora está volviéndose excitante!
103+
104+
Sin embargo, antes de saltar y comenzar a Live Coding con funciones e
105+
hilos, lee la próxima sección sobre `live_loop` que cambiará la manera
106+
en la que codifiques con Sonic Pi para siempre...
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
9.2 Bucles en Vivo
2+
3+
# Bucles en Vivo
4+
5+
Bien, ésta sección del tutorial es la joya de la corona. Si leyeses
6+
sólo una sección, debería ser ésta. Si leíste la sección previa sobre
7+
los Fundamentos de Live Coding, `live_loop` es una manera simple de
8+
hacer exactamente eso, pero sin tener que escribir tanto.
9+
10+
Si no leíste la sección anterior, `live_loop` es como mejor se puede
11+
tocar con Sonic Pi.
12+
13+
Toquemos algo. Escribe el siguiente código en un buffer nuevo:
14+
15+
```
16+
live_loop :foo do
17+
play 60
18+
sleep 1
19+
end
20+
```
21+
22+
Presiona el botón de Run. Escucharás un beep básico en cada pulso. Nada
23+
muy divertido en ello. Sin embargo, todavía no presiones Stop. Cambia
24+
el `60` a `65` y presiona otra vez Run.
25+
26+
¡Woah Se cambió automáticamente sin perder un tan sólo pulso!¡Esto es Live
27+
Coding!
28+
29+
Hagámoslo más a bajo, sólo cambiemos el código un poco:
30+
```
31+
live_loop :foo do
32+
use_synth :prophet
33+
play :e1, release: 8
34+
sleep 8
35+
end
36+
```
37+
38+
Ahora aprieta Run
39+
40+
Movamos el punto de corte:
41+
42+
```
43+
live_loop :foo do
44+
use_synth :prophet
45+
play :e1, release: 8, cutoff: rrand(70, 130)
46+
sleep 8
47+
end
48+
```
49+
50+
Presiona Run otra vez.
51+
52+
Añadamos baterías:
53+
54+
```
55+
live_loop :foo do
56+
sample :loop_garzul
57+
use_synth :prophet
58+
play :e1, release: 8, cutoff: rrand(70, 130)
59+
sleep 8
60+
end
61+
```
62+
Cambiemos la nota de `e1` a `c1`:
63+
64+
```
65+
live_loop :foo do
66+
sample :loop_garzul
67+
use_synth :prophet
68+
play :c1, release: 8, cutoff: rrand(70, 130)
69+
sleep 8
70+
end
71+
```
72+
73+
Ahora deja de leerme y cambia lo que quieras por tu cuenta.
74+
¡Diviértete!
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
9.3 Múltiples Bucles en Vivo
2+
3+
# Múltiples Bucles en Vivo
4+
5+
Considera el siguiente bucle en vivo:
6+
7+
```
8+
live_loop :foo do
9+
play 50
10+
sleep 1
11+
end
12+
```
13+
Quizás te preguntas el por qué es importante el nombre `foo`, la respuesta
14+
es que es importante porque significa que este bucle es diferente de TODOS
15+
los otros.
16+
17+
*Nunca pueden haber dos bucles en vivo con el mismo nombre ejecutándose
18+
simultáneamente*
19+
20+
Esto significa que si queremos múltiples bucles concurrentes, debemos darles
21+
diferentes nombres:
22+
23+
```
24+
live_loop :foo do
25+
use_synth :prophet
26+
play :c1, release: 8, cutoff: rrand(70, 130)
27+
sleep 8
28+
end
29+
30+
live_loop :bar do
31+
sample :bd_haus
32+
sleep 0.5
33+
end
34+
```
35+
36+
Ahora puedes actualizar y cambiar cada bucle independientemente y
37+
funcionará siempre.
38+
39+
## Sincronizando bucles en vivo
40+
41+
Una cosa que ya habrás notado es que los bucles en vivo trabajan
42+
automáticamente automáticamente con el mecanismo de marca de hilos
43+
que exploramos anteriormente. Cada bucle en vivo genera un evento `cue`
44+
Gracias a ello podemos sincronizarlos para asegurar bucles sin pausa.
45+
46+
Considera este código mal sincronizado:
47+
48+
```
49+
live_loop :foo do
50+
play :e4, release: 0.5
51+
sleep 0.4
52+
end
53+
54+
live_loop :bar do
55+
sample :bd_haus
56+
sleep 1
57+
end
58+
```
59+
60+
Veamos si podemos arreglar el timing y sincronizar sin parar. Primero,
61+
arreglemos el bucle `:foo` para hacer el factor de sleep 1 a algo como
62+
`0.5`:
63+
64+
```
65+
live_loop :foo do
66+
play :e4, release: 0.5
67+
sleep 0.5
68+
end
69+
70+
live_loop :bar do
71+
sample :bd_haus
72+
sleep 1
73+
end
74+
```
75+
76+
Todavía no terminamos, pues notarás que los pulsos no se alinean correctamente.
77+
Esto se debe a que los bucles están desfasados *out of phase*. Arreglemos Esto
78+
sincronizándolos entre sí:
79+
80+
```
81+
live_loop :foo do
82+
play :e4, release: 0.5
83+
sleep 0.5
84+
end
85+
86+
live_loop :bar do
87+
sync :foo
88+
sample :bd_haus
89+
sleep 1
90+
end
91+
```
92+
93+
¡Wow, todo está sincronizado ahora y sin parar!
94+
95+
¡Ahora ve y codifica en vivo con bucles en vivo!

0 commit comments

Comments
 (0)