Sonic Pi - en to es translation catalogue (857 entries)

en: 1 Welcome to Sonic Pi
es: 1 Bienvenido a Sonic Pi

en: Welcome friend :-)
es: Bienvenido amigo :-)

en: Welcome to Sonic Pi. Hopefully you're as excited to get started making your own sounds as I am to show you. It's going to be a really *fun* ride where you'll learn all about music, synthesis, programming, composition, performance and more.
es: Bienvenido a Sonic Pi. Espero que estés tan emocionado por comenzar a hacer tus propios sonidos como yo lo estoy de enseñarte a hacerlos. Será realmente *divertido*. Aprenderás sobre música, síntesis, programación, composición, interpretación y mucho más.

en: But wait, how rude of me! Let me introduce myself - I'm [Sam Aaron](https://twitter.com/samaaron) - the chap that created Sonic Pi. You can find me at [@samaaron](http://twitter.com/samaaron) on Twitter and I'd be more than happy to say hello to you. You might also be interested in finding out more about my [Live Coding Performances](https://youtube.com/samaaron) where I code with Sonic Pi live in front of audiences.
es: Pero espera, ¡qué maleducado soy! Deja que me presente - soy [Sam Aaron](http://twitter.com/samaaron) - el creador de Sonic Pi. Puedes encontrarme en Twitter [@samaaron](http://twitter.com/samaaron) y estaré encantado de saludarte. Quizás te interese saber más de mis [Performances de Live Coding](https://youtube.com/samaaron) donde programo en vivo y en directo con Sonic Pi.

en: If you have any thoughts, or ideas for improving Sonic Pi - please pass them on - feedback is so helpful. You never know, your idea might be the next big feature!
es: Si tienes algunas observaciones o ideas para mejorar Sonic Pi - por favor pásamelas -, los comentarios son bienvenidos. Nunca se sabe, ¡tu idea podría ser incluida como una importante funcionalidad!

en: This tutorial is divided up into sections grouped by category. Whilst I've written it to have an easy learning progression from start to finish, feel very free just to dip in and out of sections as you see fit. If you feel that there's something missing, do let me know and I'll consider it for a future version.
es: Este tutorial está dividido en secciones agrupadas por categoría. Lo he escrito para tener una fácil progresión de principio a fin, siéntete libre de saltar de una sección a otra cuanto te apetezca. Si piensas que hay algo que falta, házmelo saber y lo tendré en cuenta para versiones futuras.

en: Finally, watching others live code is a really great way to learn. I regularly stream live on [https://youtube.com/samaaron](http://youtube.com/samaaron) so please do drop by, say hi and ask me lots of questions :-)
es: Por último, observar a otros haciendo live-coding es una excelente manera de aprender. Yo lo hago regularmente en directo por [https://youtube.com/samaaron](https://youtube.com/samaaron), así que pásate por allí, salúdame y hazme muchas preguntas :-)

en: OK, let's get started...
es: OK, comencemos...

en: 1.1 Live Coding
es: 1.1 Live Coding (Programación en vivo)

en: Live Coding
es: Live Coding (Programación en vivo)

en: One of the most exciting aspects of Sonic Pi is that it enables you to write and *modify code live* to make music, just like you might perform live with a guitar. This means that given some practice you can take Sonic Pi on stage and gig with it.
es: Uno de los aspectos más excitantes de Sonic Pi es la posibilidad de escribir y modificar código para hacer música en directo, como lo harías al tocar una guitarra. Esto significa que con algo de práctica podrás usar Sonic Pi en directo.

en: Free your mind
es: Abre tu mente

en: Before we get into the real details of how Sonic Pi works in the rest of this tutorial, I'd like to give you an experience of what it's like to live code. Don't worry if you don't understand much (or any) of this. Just try to hold onto your seats and enjoy...
es: Antes de entrar en detalle de cómo funciona Sonic Pi, me gustaría enseñarte que es programar en directo. No te preocupes si no entiendes mucho (o nada) de esto. Simplemente siéntate y disfruta ...

en: A live loop
es: Un Bucle en Vivo

en: Let's get started, copy the following code into an empty buffer:
es: Para empezar, copia el siguiente código en un buffer vacío:

en: Now, press the `Run` button and you'll hear a nice fast bass drum beating away. If at any time you wish to stop the sound just hit the `Stop` button. Although don't hit it just yet... Instead, follow these steps:
es: Ahora, presiona el botón "Ejecutar" y escucharás una batería con un ritmo rápido. Si en cualquier momento deseas parar el sonido, sólo debes presionar el botón "Parar". Pero no lo pares, aún... antes sigue los siguientes pasos:

en: Make sure the bass drum sound is still running
es: Asegúrate que el sonido de batería sigue sonando

en: Change the `sleep` value from `0.5` to something higher like `1`.
es: Cambia el valor "sleep" de "0.5" a algo más alto, por ejemplo "1".

en: Press the `Run` button again
es: Presiona de nuevo el botón "Ejecutar"

en: Notice how the drum speed has changed.
es: Fíjate como ha cambiado la velocidad del bombo.

en: Finally, *remember this moment*, this is the first time you've live coded with Sonic Pi and it's unlikely to be your last...
es: Por último, *recuerda este momento*, esta es la primera vez que has programado en tiempo real con Sonic Pi y seguro que no será la última...

en: Ok, that was simple enough. Let's add something else into the mix. Above `sample :bd_haus` add the line `sample :ambi_choir, rate: 0.3`. Your code should look like this:
es: Ok, eso fue fácil. Añadamos algo a la mezcla. Encima de `sample :bd_haus` añade la línea `sample :ambi_choir, rate: 0.3`. Tu código debería ser así:

en: Now, play around. Change the rates - what happens when you use high values, or small values or negative values? See what happens when you change the `rate:` value for the `:ambi_choir` sample just slightly (say to `0.29`). What happens if you choose a really small `sleep` value? See if you can make it go so fast your computer will stop with an error because it can't keep up (if that happens, just choose a bigger `sleep` time and hit `Run` again).
es: Ahora vamos a jugar. Cambia valores, ¿qué pasa cuando usas valores altos, bajos o negativos? Mira lo que pasa cuando cambias el valor `rate:` por `:ambi_choir` ajústalo mínimamente (digamos a 0.29). ¿Qué pasa si pones un valor muy bajo para `sleep`? prueba a hacerlo sonar tan rápido que tu computadora se cuelgue con un error (si eso sucede, simplemente elige un valor más alto para `sleep` y presiona `Ejecutar` de nuevo).

en: Try commenting one of the `sample` lines out by adding a `#` to the beginning:
es: Intenta comentar una de las líneas del `sample`, añadiendo un `#` al comienzo:

en: Notice how it tells the computer to ignore it, so we don't hear it. This is called a comment. In Sonic Pi we can use comments to remove and add things into the mix.
es: ¿Te das cuenta como le dice al ordenador que lo ignore, y así no lo oímos? Esto se llama "comentar". En Sonic Pi podemos usar comentarios para quitar y añadir cosas a la mezcla.

en: Finally, let me leave you something fun to play with. Take the code below, and copy it into a spare buffer. Now, don't try to understand it too much other than see that there are two loops - so two things going round at the same time. Now, do what you do best - experiment and play around. Here are some suggestions:
es: Por último, te dejo con algo divertido con lo que jugar. Toma el siguiente código y cópialo en un buffer vacío. Por el momento no intentes comprender demasiado más que darte cuenta que hay dos bucles - lo que significa que hay dos eventos al mismo tiempo - experimenta y juega. Te dejo algunas sugerencias:

en: Try changing the blue `rate:` values to hear the sample sound change.
es: Prueba cambiando el valor en azul de `rate:` para escuchar cambios en el sample.

en: Try changing the `sleep` times and hear that both loops can spin round at different rates.
es: Prueba cambiando los tiempos de `sleep` y presta atención a cómo ambos bucles dan vueltas a diferentes valores.

en: Try uncommenting the sample line (remove the `#`) and enjoy the sound of the guitar played backwards.
es: Oberva que pasa quitando el comentario de la línea de ejemplo (quita `#`) y disfruta del sonido de la guitarra tocada al revés.

en: Try changing any of the blue `mix:` values to numbers between `0` (not in the mix) and `1` (fully in the mix).
es: Prueba cambiar cualquiera de los valores azules `mix:` a números entre `0` (no en la mezcla) y `1` (totalmente en la mezcla).

en: Remember to press `Run` and you'll hear the change next time the loop goes round. If you end up in a pickle, don't worry - hit `Stop`, delete the code in the buffer and paste a fresh copy in and you're ready to jam again. Making mistakes is how you'll learn the quickest...
es: Recuerda que debes presionar 'Ejecutar' para escuchar el cambio en el próximo bucle. Si termina siendo un lío, no te preocupes - dale a 'Parar', borra el código del buffer y pega una nueva copia del ejemplo para volver a empezar. Cometiendo errores es como aprenderás más rápidamente.

en: Now, keep playing and experimenting until your curiosity about how this all actually works kicks in and you start wondering what else you can do with this. You're now ready to read the rest of the tutorial.
es: Ahora, sigue tocando y experimentando hasta despertar tu curiosidad y te preguntes qué más puedes hacer. Ya estás listo para leer el resto del tutorial.

en: So what are you waiting for...
es: ¿A qué estás esperando?

en: 1.2 Exploring the Interface
es: 1.2 Explorando la interfaz

en: The Sonic Pi Interface
es: La interfaz de Sonic Pi

en: Sonic Pi has a very simple interface for coding music. Let's spend a little time exploring it.
es: Sonic Pi tiene una interfaz sencilla para programar música. Echemos un vistazo a esto.

en: ![Sonic Pi Interface](../../../etc/doc/images/tutorial/GUI.png)
es: ![La Interfaz de Sonic Pi](../../../etc/doc/images/tutorial/GUI.png)

en: *A* - Play Controls
es: *A* - Controles de Ejecución

en: *B* - Editor Controls
es: *B* - Controles de edición

en: *C* - Info and Help
es: *C* - Información y Ayuda

en: *D* - Code Editor
es: *D* - Editor de código

en: *E* - Prefs Panel
es: *E* - Panel de Preferencias

en: *F* - Log Viewer
es: *F* - Visor de Registros

en: *G* - Help System
es: *G* - Sistema de Ayuda

en: *H* - Scope Viewer
es: *H* - Visor de Registros

en: *I* - Cue Viewer
es: *I* - Visor de Cue

en: A. Play Controls
es: A. Controles de Ejecución

en: These pink buttons are the main controls for starting and stopping sounds. There's the *Run* button for running the code in the editor, *Stop* for stopping all running code, *Save* for saving the code to an external file and *Record* to create a recording (a WAV file) of the sound playing.
es: Estos botones rosados son los principales controles para comenzar y parar sonidos. El botón de *Ejecutar* sirve para iniciar la ejecución del código y *Parar* para parar todo código en Ejecución, *Guardar* para guardar el código a un archivo externo y *Grabar* para crear una grabación (archivo WAV) de los sonidos ejecutándose.

en: B. Editor Controls
es: B. Controles de edición

en: These orange buttons allow you to manipulate the code editor. The *Size +* and *Size -* buttons allow you to make the text bigger and smaller.
es: Estos botones naranjas te permiten manipular el editor de código. Los botones de *Tamaño +* y Tamaño -* te permiten aumentar y disminuir el tamaño del texto.

en: C. Info and Help
es: C. Información y Ayuda

en: These blue buttons give you access to information, help and preferences. The *Info* button will open up the information window which contains information about Sonic Pi itself - the core team, history, contributors and community. The *Help* button toggles the help system (*G*) and the *Prefs* button toggles the preferences window which allows you to control some basic system parameters.
es: Estos botones azules te dan acceso a información, ayuda y preferencias. El botón *Info* abre la ventana informativa, la cual contiene información del propio programa Sonic Pi - el equipo base, historia, contribuyentes y la comunidad. El botón de *Ayuda* muestra u oculta el sistema de ayuda y el botón *Preferencias* activa la ventana de preferencias, que te permite controlar algunos parámetros básicos del sistema.

en: D. Code Editor
es: D. Editor de código

en: This is the area where you'll write your code and compose/perform music. It's a simple text editor where you can write code, delete it, cut and paste, etc. Think of it like a very basic version of Word or Google Docs. The editor will automatically colour words based on their meaning in the code. This may seem strange at first, but you'll soon find it very useful. For example, you'll know something is a number because it is blue.
es: Esta es el área donde escribirás tu código y compondrás/ejecutarás música. Es un sencillo editor de texto donde puedes escribir, borrar, cortar, pegar, etc. Piensa que es una versión simplificada de Word o Google Docs. El editor colorea las palabras automáticamente, basado en su significado para el código. Al principio, esto puede parecer extraño, pero pronto lo encontrarás muy útil. Por ejemplo, sabrás que algo es un número, porque es de color azul.

en: E. Prefs Panel
es: E. Panel de Preferencias

en: Sonic Pi supports a number of tweakable preferences which can be accessed by toggling the *prefs* button in the Info and Help button set. This will toggle the visibility of the Prefs Panel which includes a number of options to be changed. Examples are forcing mono mode, inverting stereo, toggling log output verbosity and also a volume slider and audio selector on the Raspberry Pi.
es: Sonic Pi permite cambiar ciertos parámetros accesibles a través del botón *preferencias* . Este botón cambia la visibilidad del panel de preferencias, el cual incluye un número de opciones a ser cambiadas. Por ejemplo forzar el modo mono, invertir el estéreo, cambiar a vista/no vista de la bitácora, mando de volumen y un selector de audio para la Raspberry Pi.

en: F. Log Viewer
es: F. Visor de Log

en: When you run your code, information about what the program is doing will be displayed in the log viewer. By default, you'll see a message for every sound you create with the exact time the sound was triggered. This is very useful for debugging your code and understanding what your code is doing.
es: Cuando ejecutas un código, el visualizador del log muestra información de lo que está haciendo el programa. Predeterminado está el que veas un mensaje por cada sonido que crees con el tiempo exacto al que fue disparado el sonido. Esto es muy útil para depurar código y entender qué es lo que está haciendo.

en: G. Help System
es: G. Sistema de ayuda

en: One of the most important parts of the Sonic Pi interface is the help system which appears at the bottom of the window. This can be toggled on and off by clicking on the blue *Help* button. The help system contains help and information about all aspects of Sonic Pi including this tutorial, a list of available synths, samples, examples, FX and a full list of all the functions Sonic Pi provides for coding music.
es: Finalmente, una de las partes más importantes de la interfaz de Sonic Pi es el sistema de ayuda que aparece en la parte baja de la ventana. Esta puede ser activada o desactivada al apretar el botón azul «Ayuda». El sistema de ayuda contiene información de todos los aspectos de Sonic Pi incluído este tutorial, listado de sintetizadores disponibles, muestras (samples), ejemplos, efectos y una lista de todas las funciones que Sonic Pi provee para codificar música.

en: H. Scope Viewer
es: H. Visor Osciloscópico

en: The scope viewer allows you to see the sound you're hearing. You can easily see that the saw wave looks like a saw and that the basic beep is a curvey sine wave. You can also see the difference between loud and quiet sounds by the size of the lines. There are 3 scopes to play with - the default is a combined scope for the left and right channels, there is a stereo scope which draws a separate scope for each channel. Finally there is a Lissajous curve scope which will show the phase relationship between the left and right channels and allows you to draw pretty pictures with sound (https://en.wikipedia.org/wiki/Lissajous_curve).
es: El visor de alcance le permite ver el sonido que esta escuchando. Usted puede ver fácilmente que la onda de la sierra parece una sierra y que el pitido básico es una curva de onda senoidal. También puede ver la diferencia entre sonidos fuertes y silenciosos por el tamaño de las líneas. Hay 3 alcances para jugar - el defecto es un alcance combinado para los canales izquierdos y derechos, hay un alcance estéreo que dibuja un alcance separado para cada canal. Finalmente hay un alcance de curva Lissajous que mostrará la relación de fase entre los canales izquierdo y derecho y le permitirá dibujar imágenes bonitas con sonido (https://en.wikipedia.org/wiki/Lissajous_curve).

en: I. Cue Viewer
es: I. Visor de Cue

en: All internal and external events (called cues in Sonic Pi) are automatically logged in the Cue Viewer. For example, if you have a MIDI controller connected and press one of its buttons, you'll see a new cue event in the Cue Viewer telling you the name of the controller and which button you pressed. Once you've mastered the basics of making and producing sounds, you'll start to want to cue sounds or whole sections of sounds based on events such as these. A cue event is just an indication that something happened. For example, every time a live loop spins round, it sends a cue event out which is logged in the Cue Viewer. Also, external events such as MIDI messages from connected MIDI equipment and OSC messages from other programs or computers are also displayed in the Cue Viewer. It is also possible to directly generate cue events using the `cue` function. Anything that appears in the Cue Viewer can be used to trigger something happening. This is covered in more detail in Sections 10 to 12 of this tutorial.
es: Todos los eventos internos y externos (llamados cues en Sonic PI) son registrados automáticamente en el Visor Cue. Por ejemplo si tiene un controlador MIDI conectado y presione uno de sus botones, verá un nuevo evento cue en el Visor Cue que le dará el nombre del controlador y del botó que presionó. Una vez haya dominado lo básico de crear y producir sonidos, querrá registrar sonidos o selecciones completas de sonidos basado en eventos como esos. Un evento cue es solo una indicación de que ha ocurrido algo. Por ejemplo, cada vez que un ciclo vivo da la vuelta, envía un evento cue que es registrado en el Visor de Cue. También los eventos externos como mensajes MIDI de equipo MIDI conectado y mensajes OSC de otros programas o computadores se presentan en el Visor Cue. También es posible generar directamente eventos cue usando la función `cue`. Cualquier cosa que aparezca en el Visor Cue puede usarse para iniciar que algo ocurra. Esto se cubre en más detalle en la Secciones 10 a 12 de este tutorial.

en: 1.3 Learning through Play
es: 1.3 Aprender jugando

en: Learning through Play
es: Aprender jugando

en: Sonic Pi encourages you to learn about both computing and music through play and experimentation. The most important thing is that you're having fun, and before you know it you'll have accidentally learned how to code, compose and perform.
es: Sonic Pi te incita a aprender computación y música a través del juego y la experimentación. Lo más importante es que te diviertas y sin darte cuenta, estarás aprendiendo a programar, componer y reproducir.

en: There are no mistakes
es: No hay errores

en: Whilst we're on this subject, let me just give you one piece of advice I've learned over my years of live coding with music - *there are no mistakes, only opportunities*. This is something I've often heard in relation to jazz but it works equally well with live coding. No matter how experienced you are - from a complete beginner to a seasoned live coder, you'll run some code that has a completely unexpected outcome. It might sound insanely cool - in which case run with it. However, it might sound totally jarring and out of place. It doesn't matter that it happened - what matters is what you do next with it. Take the sound, manipulate it and morph it into something awesome. The crowd will go *wild*.
es: Hablando de eso, déjame darte un consejo, aprendido a través de mis años programando música en vivo: «no hay errores, sólo oportunidades». Esto es algo que he escuchado a menudo en relación al jazz, pero funciona igualmente bien en el live-coding. No importa lo experimentado que seas -de completo principiante a un experimentado *Algoraver*, alguna vez ejecutarás código que salga de manera inesperada. Puede que suene increíblemente bien, en cuyo caso continúa con él. O puede que suene mal o fuera de lugar. Pero no importa– Lo que importa es lo que hagas con él. Toma el sonido, manipúlalo y conviértelo en algo alucinante. El público se volverá *loco*.

en: Start Simple
es: Inicio simple

en: When you're learning, it's tempting to want to do amazing things *now*. However, just hold that thought and see it as a distant goal to reach *later*. For now, instead think of the *simplest* thing you could write which would be fun and rewarding that's a small step towards the amazing thing you have in your head. Once you have an idea about that simple step, then try and build it, play with it and then see what new ideas it gives you. Before long you'll be too busy having fun and making real progress.
es: Cuando estás aprendiendo es tentador querer hacer cosas *ya*. Sin embargo, mantén ese deseo como un objetivo para *después*. Por ahora, piensa en *lo más simple* que puedas escribir sea divertido y satisfactorio, que sea un simple paso para ese increíble objetivo que tienes en mente. Una vez tengas una idea de ese simple paso, intenta y constrúyelo, juega y mira qué nuevas ideas te trae. En poco tiempo estarás demasiado ocupado divirtiéndote y teniendo un progreso real.

en: Just make sure to share your work with others!
es: Sólo asegúrate de compartir tu trabajo con los demás!

en: 2 Synths
es: 2 Sintetizadores

en: Synths
es: Sintetizadores

en: OK, enough of the intros - let's get into some sound.
es: De acuerdo, ya esta bien de introducciones - hagamos algo de sonido.

en: In this section we'll cover the basics of triggering and manipulating synths. Synth is short for synthesiser which is a fancy word for something which creates sounds. Typically synths are quite complicated to use - especially analog synths such as Eurorack modules connected together by a mess of wires. However, Sonic Pi gives you much of that power in a very simple and approachable manner.
es: En esta sección cubriremos las bases de desencadenar y manipular un sintetizador, que no es más que una palabra rebuscada para algo que produce sonidos. Típicamente los sintetizadores son bastante complicados de usarse - especialmente los análogos con tantos cables para unir los módulos. Sin embargo, Sonic-Pi te da mucho de ese poder en una manera mucho más sencilla.

en: Don't be fooled by the immediate simplicity of Sonic Pi's interface. You can get very deep into very sophisticated sound manipulation if that's your thing. Hold on to your hats...
es: No te confundas con la sencillez del interfaz de Sonic-Pi. Puedes llegar a manipular con mucha profundidad el sonido, si eso te interesa. Mantente atento...

en: 2.1 Your First Beeps
es: 2.1 Tus primeros Sonidos

en: Your First Beeps
es: tus primeros Sonidos

en: Take a look at the following code:
es: Dale una mirada al siguiente código:

en: This is where it all starts. Go ahead, copy and paste it into the code window at the top of the app (the big white space under the Run button). Now, press Run...
es: Así comienza todo. Adelante, copia y pega en la ventana superior de la aplicación (ese espacio grande en blanco debajo del botón Ejecutar) Ahora, presiona 'Ejecutar'...

en: Beep!
es: Sonido!

en: Intense. Press it again. And again. *And again...*
es: Intenso. Presiónalo otra vez, otra vez, otra vez y *otra vez...*

en: Can you hear the difference? Try a lower number:
es: ¿Escuchas la diferencia? Intenta con un número menor:

en: So, lower numbers make lower pitched beeps and higher numbers make higher pitched beeps. Just like on a piano, the keys at the lower part of the piano (the left hand side) play lower notes and the keys on the higher part of the piano (the right hand side) play higher notes.
es: Los números bajos crean sonidos más graves, mientras que los altos crean sonidos más agudos. Exactamente como en un piano, las teclas en la parte baja del piano (a la izquierda) hacen sonar notas más graves, y las teclas de la parte alta del piano (a la derecha) hacen sonar notas más agudas.

en: It turns out that the C of the 4th octave (C in English notation) is identified by the number 60. `play 60` therefore plays the C of the 4th octave. To play the next piano key to the right, you have to add 1 to 60 and then type `play 61`, which in this case is the black key of the C sharp. To play the D, the next key to the right, `play 62`.
es: Resulta que el do de la cuarta octava (C en la notación inglesa) está identificado por el número 60. Por eso, `play 60` hace sonar el do de la cuarta octava. Para hacer sonar la siguiente tecla hacia la derecha, tienes que sumar 1 a 60 y entonces escribir `play 61`, que en este caso es la tecla negra del do sostenido (o el re bemol). Para hacer sonar un re, sería la correspondiente tecla hacia la derecha, y debes escribir `play 62`.

en: *Don't worry* if this means nothing to you - it didn't to me when I first started. All that matters right now is that you know that *low numbers make lower beeps* and *high numbers make higher beeps*.
es: *No te preocupes* si nada de esto significa algo para tí, que así fue también cuando yo comenzaba. Lo que importa es que sepas que *los números menores significan sonidos más graves que los números mayores*.

en: Chords
es: Acordes

en: Playing a note is quite fun, but playing many at the same time can be even better. Try it:
es: Si tocar una nota es divertido, tocar varias al mismo tiempo lo es aún más. Pruébalo:

en: Jazzy! So, when you write multiple `play`s, they all play at the same time. Try it for yourself - which numbers sound good together? Which sound terrible? Experiment, explore and find out for yourself.
es: Jazzy! cuando escribes múltiples `play`s, todos se tocan al mismo tiempo. compruébalo tú mismo - ¿cuáles suenan bien juntos, cuales suenan mal?, experimenta y encuentra por tí mismo.

en: Melody
es: Melodía

en: So, playing notes and chords is fun - but how about a melody? What if you wanted to play one note after another and not at the same time? Well, that's easy, you just need to `sleep` between the notes:
es: Si tocar notas y acordes es divertido, pero ¿que tal una melodía? ¿qué tal si queremos tocar notas en diferentes momentos? ¡Fácil! sólo debes poner un `sleep` entre las notas:

en: How lovely, a little arpeggio. So what does the `1` mean in `sleep 1`? Well it means the *duration of the sleep*. It actually means sleep for one beat, but for now we can think about it as sleeping for 1 second. So, what if we wanted to make our arpeggio a little faster? Well, we need to use shorter sleep values. What about a half i.e. `0.5`:
es: ¡qué adorable pequeño arpegio! Entonces, ¿qué significa el `1` en `sleep 1`? Bien, significa la *duración de la interrupción*. Realmente significa esperar por un pulso, aunque por ahora podemos pensar que significa detenerse por espacio de 1 segundo. Así, ¿cómo haríamos para que el arpegio suene más rápido? Bueno, necesitaríamos usar valores de 'sleep' menores. ¿qué tal, por ejemplo `0.5`:

en: Notice how it plays faster. Now, try for yourself, change the times - use different times and notes.
es: ¿Notaste que se ejecutaron más rápido? ahora prueba tú mismo cambiando los valores, usando diferentes tiempos y notas.

en: One thing to try is in-between notes such as `play 52.3` and `play 52.63`. There's absolutely no need to stick to standard whole notes. Play around and have fun.
es: Una cosa a probar es tocar notas como `play 52.3` y `play 52.63`. No hay necesidad alguna de usar notas enteras. Toca, prueba y diviértete.

en: Traditional Note Names
es: Nombres tradicionales de las notas

en: For those of you that already know some musical notation (don't worry if you don't - you don't need it to have fun) you might want to write a melody using note names such as C and F# rather than numbers. Sonic Pi has you covered. You can do the following:
es: Para aquellos de vosotros que poseáis conocimientos de notación musical (no importa si no, no es absolutamente necesario para divertirte) quizás quieras escribir una melodía usando nombres de notas como C y F# en vez de números. Sonic Pi tiene todo eso cubierto. Puedes hacer lo siguiente:

en: Remember to put the colon `:` in front of your note name so that it goes pink. Also, you can specify the octave by adding a number after the note name:
es: Recuerda poner los dos puntos ':' delante del nombre de la nota, para que se ponga color rosa. también puedes especificar la octava, añadiendo un número delante de la nota:

en: If you want to make a note sharp, add an `s` after the note name such as `play :Fs3` and if you want to make a note flat, add a `b` such as `play :Eb3`.
es: Si quieres hacer una nota aguda, añádele una 's' al nombre de la nota así:`play :Fs3` y si quieres hacer una nota plana, añádele una `b` así `play :Eb3`.

en: There's also a handy shortcut for a rest (a musical way of saying not to play anything instead of a note) using `:r`, `:rest` or `nil`.
es: También hay un práctico atajo para un descanso (una forma musical de decir que no se toque nada en lugar de una nota) usando `:r`, `:rest` o `nil`.

en: 2.2 Synth Options
es: 2.2 Opciones de Sintetizador

en: Synth Options: Amp and Pan
es: Opciones de Sintetizador: Amp y Pan

en: As well as allowing you to control which note to play or which sample to trigger, Sonic Pi provides a whole range of options to craft and control the sounds. We'll be covering many of these in this tutorial and there's extensive documentation for each in the help system. However, for now we'll introduce two of the most useful: *amplitude* and *pan*. First, let's look at what options actually are.
es: Asimismo como Sonic Pi te permite controlar cuál nota tocar o cuál muestra desencadenar, también provee un completo rango de opciones para pulir y controlar los sonidos. En este tutorial cubriremos muchos de estos y existe una gran documentación para cada uno en el sistema de ayuda. Sin embargo, por ahora introduciremos dos de los más útiles: *amplitude* y *pan*. Miremos primero cuales son las opciones.

en: Options
es: Opciones

en: Sonic Pi supports the notion of options (or opts for short) for its synths. Opts are controls you pass to `play` which modify and control aspects of the sound you hear. Each synth has its own set of opts for finely tuning its sound. However, there are common sets of opts shared by many sounds such as `amp:` and envelope opts (covered in another section).
es: Sonic Pi apoya la noción de opciones (opts, abreviando) para sus sintetizadores. Opts son controles que pasas a `play` los cuales modifican y controlan aspectos del sonido que oyes. Cada sintetizador tiene su propio set de opts para sintonizar su sonido. Sin embargo, hay sets comunes de opts que comparten muchos, como `amp:` y sobre opts (cubiertas en otra sección).

en: Opts are passed to calls to `play` by using a comma `,` and then the name of the opt such as `amp:` (don't forget the colon `:`) and then a space and the value of the opt. For example:
es: Los opts se pasan a las llamadas a `play` por medio del uso de una coma `,` y después el nombre del opt, tal como `amp:` (no olvides los dos puntos `:`) y después un espacio y el valor del opt. Ejemplo:

en: (Note that `cheese:` isn't a valid opt, we're just using it as an example).
es: (Nota que `cheese:` no es un opt válido, lo usamos sólo como ejemplo).

en: You can pass multiple opts by separating them with a comma:
es: Puedes pasar múltiples opts separados por comas:

en: The order of the opts doesn't matter, so the following is identical:
es: El orden de los opts no importa, el siguiente será igual al anterior:

en: Opts that aren't recognised by the synth are just ignored (like `cheese` and `beans` which are clearly ridiculous opt names!)
es: Si un Opt no es reconocido por el sintetizador, simplemente es ignorado (como en el caso de `cheese` y `beans` ¡los cuales son nombres ridículos, obviamente!)

en: If you accidentally use the same opt twice with different values, the last one wins. For example, `beans:` here will have the value 2 rather than 0.5:
es: Si accidentalmente utilizas el mismo opt dos veces con diferentes valores, el último gana. Por ejemplo, `beans:` aquí tendrá el valor de 2 y no el de 0.5:

en: Many things in Sonic Pi accept opts, so just spend a little time learning how to use them and you'll be set! Let's play with our first opt: `amp:`.
es: Muchas cosas en Sonic Pi aceptan opts, sólo debes pasar tiempo aprendiendo cómo usarlas e irás bien. Ejecutemos nuestro primer opt: `amp:`.

en: Amplitude
es: Amplitud

en: Amplitude is a computer representation of the loudness of a sound. A *high amplitude produces a loud sound* and a *low amplitude produces a quiet sound*. Just as Sonic Pi uses numbers to represent time and notes, it uses numbers to represent amplitude. An amplitude of 0 is silent (you'll hear nothing) whereas an amplitude of 1 is normal volume. You can even crank up the amplitude higher to 2, 10, 100. However, you should note that when the overall amplitude of all the sounds gets too high, Sonic Pi uses what's called a compressor to squash them all to make sure things aren't too loud for your ears. This can often make the sound muddy and strange. So try to use low amplitudes, i.e. in the range 0 to 0.5 to avoid compression.
es: Amplitud es una representación computarizada del volumen de un sonido. Una *alta amplitud produce un sonido de alto volumen* y *baja amplitud produce sonido de bajo volumen*. Así como Sonic Pi utiliza números para representar tonos y tiempos, usa números para representar la amplitud. Una amplitud de 0 es silencio (escucharás nada) y amplitud de 1 es volumen normal. Puedes utilizar volumen a amplitudes mayores a 2, 10, 100. Sin embargo, debes tener en cuenta que cuando la amplitud de todos los sonidos se vuelve muy alta, Sonic Pi utiliza un compresor para asegurar que no lleguen a tan alto que dañen tus oídos. Esto puede hacer que los sonidos sean extraños. Intenta con amplitudes bajas, por ejemplo en el rango de 0 to 0.5 para evitar compresión.

en: Amp it up
es: Amplifícalo

en: To change the amplitude of a sound, you can use the `amp:` opt. For example, to play at half amplitude pass 0.5:
es: Para cambiar la amplitud de un sonido, utiliza el opt `amp:`. Por ejemplo, para tocar a la mitad de la amplitud cámbialo a 0.5:

en: To play at double amplitude pass 2:
es: Para hacerlo al doble de amplitud 2:

en: The `amp:` opt only modifies the call to `play` it's associated with. So, in this example, the first call to play is at half volume and the second is back to the default (1):
es: El opt `amp:` sólo modifica la llamada para el `play` al que está asociado. Así, en este ejemplo, la primera llamada para tocar es a mitad de volumen y la segunda es a la predeterminada (1):

en: Of course, you can use different `amp:` values for each call to play:
es: Por supuesto que puedes usar diferentes valores de `amp:` para cada llamada a play:

en: Panning
es: Paneo

en: Another fun opt to use is `pan:` which controls the panning of a sound in stereo. Panning a sound to the left means that you hear it out of the left speaker, and panning it to the right means you hear it out of your right speaker. For our values, we use a -1 to represent fully left, 0 to represent center and 1 to represent fully right in the stereo field. Of course, we're free to use any value between -1 and 1 to control the exact positioning of our sound.
es: Otro concepto divertido de usar es el paneo `pan:` el cual controla el paneo de un sonido en estéreo. Panear un sonido a la izquierda, significa que lo escucharás en la bocina izquierda, panearlo a la derecha, significa que lo escucharás de la bocina derecha. Para nuestros valores, tenemos -1 para representar completamente a la izquierda, 0 para representar el centro y 1 para representar completamente a la derecha. Claro, eres libre de usar cualquier valor en medio de -1 y 1 para controlar la posición exacta de tu sonido.

en: Let's play a beep out of the left speaker:
es: Toquemos un sonido desde la bocina izquierda:

en: Now, let's play it out of the right speaker:
es: ahora que salga de la bocina derecha:

en: Finally let's play it back out of the center of both (the default position):
es: Finalmente, pongámoslo de nuevo al centro (predeterminado):

en: Now, go and have fun changing the amplitude and panning of your sounds!
es: ¡Ahora diviértete cambiando las amplitudes y paneos de tus sonidos!

en: 2.3 Switching Synths
es: 2.3 Cambiando Sintetizadores

en: Switching Synths
es: Cambiando Sintetizadores

en: So far we've had quite a lot of fun making beeps. However, you're probably starting to get bored of the basic beep noise. Is that all Sonic Pi has to offer? Surely there's more to live coding than just playing beeps? Yes there is, and in this section we'll explore some of the exciting range of sounds that Sonic Pi has to offer.
es: Hasta ahora nos hemos divertido mucho sólo con sonidos. Sin embargo, de seguro ya comienzas a cansarte del sonido básico de pitidos. ¿es eso todo lo que Sonic-Pi tiene para ofrecer? Tiene que haber más que tocar pitidos. Sí, hay mucho más y lo exploraremos en esta sección con el impresionante rango de sonidos que Sonic Pi tiene para ofrecer.

en: Sonic Pi has a number of different instruments it calls synths (which is *short for synthesisers*). Whereas samples represent pre-recorded sounds, synths are capable of generating new sounds depending on how you control them (which we'll explore later in this tutorial). Sonic Pi's synths are very powerful and expressive and you'll have a lot of fun exploring and playing with them. First, let's learn how to select the current synth to use.
es: Sonic Pi cuenta con varios instrumento llamados synths (una abreviación de *sintetizadores*). Mientras que los muestreos representan sonidos pre-grabados, los sintetizadores son capaces de generar nuevos sonidos dependiendo de cómo los controles (lo cual exploraremos más adelante en el tutorial). Los sintetizadores de Sonic Pi son poderosos y expresivos, y seguro que te divertirás tocando y explorándolos. Primero, aprendamos a seleccionar el synth que queremos usar.

en: Buzzy saws and prophets
es: Sierras y Profetas

en: A fun sound is the *saw wave* - let's give it a try:
es: Un sonido divertido es el de la *onda sierra* - probémoslo:

en: Let's try another sound - the *prophet*:
es: Probemos otro sonido - *prophet*:

en: How about combining two sounds. First one after another:
es: ¿Qué tal si combinamos ambos sonidos? Pongamos uno después del otro:

en: Now multiple sounds at the same time (by not sleeping between successive calls to `play`):
es: Ahora múltiples sonidos al mismo tiempo (al no dormir entre llamados sucesivos a `play`):

en: Notice that the `use_synth` command only affects the following calls to `play`. Think of it like a *big switch* - new calls to `play` will play whatever synth it's currently pointing to. You can move the switch to a new synth with `use_synth`.
es: Debes notar que el comando `use_synth` sólo afecta a las siguientes llamadas a `play`. Piensa en él como un *gran conmutador* - nuevas llamadas a `play` tocarán el sintetizador que esté en uso. Puedes cambiar el conmutador a un nuevo sintetizador con `use_synth`.

en: Discovering Synths
es: Descubriendo Sintetizadores

en: To see which synths Sonic Pi has for you to play with take a look at the Synths option in the menu at the bottom of this help screen (between Examples & Fx). There are over 20 to choose from. Here are a few of my favourites:
es: Para saber qué sintetizadores tiene Sonic Pi, échale un vistazo a la opción Sintetizadores en el menú al final de esta pantalla de ayuda (entre Ejemplos y Efectos). Hay más de 20 entre los que elegir. Aquí están algunos de mis favoritos:

en: Now play around with *switching synths during your music*. Have fun combining synths to make new sounds as well as using different synths for different sections of your music.
es: Ahora prueba a *cambiar los sintetizadores durante la ejecución de tu música*. Diviértete combinando sintetizadores para hacer nuevos sonidos así como utilizando diferentes sintetizadores para diferentes secciones de tu música.

en: 2.4 Duration with Envelopes
es: 2.4 Duración con Envolventes

en: Duration with Envelopes
es: Duración con Envolventes

en: In an earlier section, we looked at how we can use the `sleep` command to control when to trigger our sounds. However, we haven't yet been able to control the duration of our sounds.
es: En una sección anterior, vimos cómo utilizar el comando `sleep` para controlar cuándo disparar sonidos. Sin embargo, aún no hemos podido controlar la duración de nuestros sonidos.

en: In order to give us a simple, yet powerful means of *controlling the duration* of our sounds, Sonic Pi provides the notion of an *ADSR amplitude envelope* (we'll cover what ADSR means later in this section). An amplitude envelope offers two useful aspects of control:
es: Con el fin de darnos una simple pero poderosa manera de *controlar la duración* de nuestros sonidos, Sonic Pi proporciona el concepto de una *envolvente de amplitud ADSR* (más adelante en esta sección trataremos qué significa ADSR). Una envolvente de amplitud ofrece el control de dos aspectos muy útiles:

en: control over the duration of a sound
es: control sobre la duración del sonido

en: control over the amplitude of a sound
es: control sobre la amplitud del sonido

en: Duration
es: Duración

en: The duration is the length the sound lasts for. A longer duration means that you hear the sound for longer. Sonic Pi's sounds all have a controllable amplitude envelope, and the total duration of that envelope is the duration of the sound. Therefore, by controlling the envelope you control the duration.
es: La duración es la longitud del sonido. Una mayor duración significa que escucharás el sonido por más tiempo. Todos los sonidos de Sonic Pi tienen una envolvente de control de la amplitud, y la duración total de la envolvente es la duración del sonido. Por lo tanto, al controlar la envolvente controlas la duración.

en: The ADSR envelope not only controls duration, it also gives you *fine control over the amplitude of the sound*. All audible sounds start and end silent and contain some non-silent part in-between. Envelopes allow you to slide and hold the amplitude of non-silent parts of the sound. It's like giving someone instructions on how to turn up and down the volume of a guitar amplifier. For example you might ask someone to "start at silence, slowly move up to full volume, hold it for a bit, then quickly fall back to silence." Sonic Pi allows you to program exactly this behaviour with envelopes.
es: La envolvente ADSR no sólo controla la duración, también te permite control *fino de la amplitud del sonido*. Todos los sonidos audibles comienzan y terminan en silencio, conteniendo partes no-silentes en medio. Las envolventes permiten deslizar y mantener la amplitud de las partes no-silentes. Es como darle instrucciones a alguien sobre cómo subir y bajar el volumen del amplificador de una guitarra. Por ejemplo, puedes pedirle a alguien "comienza en silencio, lentamente llega a máximo volumen, manténlo por un momento y rápidamente vuelve a silencio". Sonic Pi te permite controlar exactamente esta conducta con los envolventes.

en: Just to recap, as we have seen before, an amplitude of 0 is silence and an amplitude of 1 is normal volume.
es: Recapitulando lo visto anteriormente, una amplitud de 0 es silencio y una amplitud de 1 es volumen normal.

en: Now, let us look at each of the parts of the envelopes in turn.
es: Ahora, veamos cada una de las partes de las envolventes.

en: Release Phase
es: Fase de Release (apagado del sonido)

en: The only part of the envelope that's used by default is the release time. This is the time it takes for the synth's sound to fade out. All synths have a release time of 1 which means that by default they have a duration of 1 beat (which at the default BPM of 60 is 1 second):
es: La única parte de la envolvente que es utilizada predeterminadamente es el release, que es el tiempo que le toma al sintetizador para apagar el sonido completamente. Todos los sintetizadores tienen un tiempo de release de 1, lo que significa que tienen una duración de un pulso (el cual por defecto es 1 segundo, si el BPM es 60):

en: The note will be audible for 1 second. Go ahead and time it :-) This is short hand for the longer more explicit version:
es: La nota será audible por 1 segundo. ¡Vamos, cronométralo! Esta es la manera abreviada de decir lo mismo que:

en: Notice how this sounds exactly the same (the sound lasts for one second). However, it's now very easy to change the duration by modifying the value of the `release:` opt:
es: ¡Observa que suenan exactamente igual los últimos dos comandos! Sin embargo, es ahora muy fácil cambiar la duración con tan sólo modificar el valor del `release:`:

en: We can make the synth sound for a very short amount of time by using a very small release time:
es: Podemos hacer que el sintetizador suene por un periodo de tiempo muy corto al poner un valor de release muy pequeño:

en: The duration of the release of the sound is called the *release phase* and by default is a linear transition (i.e. a straight line). The following diagram illustrates this transition:
es: La duración del apagado del sonido es lo que llamamos *fase de release* y por defecto es una transición lineal. El siguiente diagrama ilustra esta transición:

en: ![release envelope](../../../etc/doc/images/tutorial/env-release.png)
es: ![Fase de liberación de la envolvente](../../../etc/doc/images/tutorial/env-release.png)

en: The vertical line at the far left of the diagram shows that the sound starts at 0 amplitude, but goes up to full amplitude immediately (this is the attack phase which we'll cover next). Once at full amplitude it then moves in a straight line down to zero taking the amount of time specified by `release:`. *Longer release times produce longer synth fade outs.*
es: La línea vertical en la izquierda del diagrama muestra que el sonido comienza con amplitud 0, pero llega a amplitud completa (esto es el ataque, que cubriremos próximamente). Una vez que la amplitud es máxima, se mueve en línea recta hacia abajo hasta llegar a 0, tomando el tiempo que para ello se especificó en `release:`. * Cuanto más largos son los tiempos de liberación, más tiempo le toma al sintetizador desvanecerse.*

en: You can therefore change the duration of your sound by changing the release time. Have a play adding release times to your music.
es: Puedes, por tanto, cambiar la duración de tu sonido, cambiando el tiempo de release. Prueba a añadir tiempos de release a tu música.

en: Attack Phase
es: Fase de Ataque

en: By default, the *attack phase* is 0 for all synths which means they move from 0 amplitude to 1 immediately. This gives the synth an initial percussive sound. However, you may wish to fade your sound in. This can be achieved with the `attack:` opt. Try fading in some sounds:
es: Por defecto, la *fase de ataque* es 0 para todos los sintetizadores, lo que significa que pasan inmediatamente de amplitud 0 a 1. Ésto le da al sintetizador un sonido inicial percutivo. Sin embargo, podrías desear que el sonido se inicie gradualmente. Esto se logra con el operador `attack:`. Prueba hacerlo con varios sonidos:

en: You may use multiple opts at the same time. For example for a short attack and a long release try:
es: Puedes utilizar varios operadores al mismo tiempo. Por ejemplo para un ataque corto y un release largo, prueba:

en: This short attack and long release envelope is illustrated in the following diagram:
es: Este ataque corto y largo release queda ilustrado en el siguiente diagrama:

en: ![attack release envelope](../../../etc/doc/images/tutorial/env-attack-release.png)
es: ![Fases de ataque y liberación de la envolvente](../images/tutorial/env-attack-release.png)

en: Of course, you may switch things around. Try a long attack and a short release:
es: También puedes invertirlo, prueba ahora con un ataque largo y un release corto:

en: ![long attack short release envelope](../../../etc/doc/images/tutorial/env-long-attack-short-release.png)
es: ![envolvente con ataque largo y liberación corta](../../../etc/doc/images/tutorial/env-long-attack-short-release.png)

en: Finally, you can also have both short attack and release times for shorter sounds.
es: Finalmente, puedes poner el ataque y release cortos, para obtener sonidos cortos.

en: ![short attack short release envelope](../../../etc/doc/images/tutorial/env-short-attack-short-release.png)
es: ![envolvente con ataque corto y liberación corta](../../../etc/doc/images/tutorial/env-short-attack-short-release.png)

en: Sustain Phase
es: Fase de Sustain

en: In addition to specifying attack and release times, you may also specify a sustain time to control the *sustain phase*. This is the time for which the sound is maintained at full amplitude between the attack and release phases.
es: Adicionalmente a especificar los tiempos de ataque y release, también puedes especificar el tiempo de sustain para controlar la *fase de sustain*. Este es el tiempo en el cual el sonido está en su máxima amplitud entre las fases de ataque y release.

en: ![ASR envelope](../../../etc/doc/images/tutorial/env-attack-sustain-release.png)
es: ![envolvente ASR](../../../etc/doc/images/tutorial/env-attack-sustain-release.png)

en: The sustain time is useful for important sounds you wish to give full presence in the mix before entering an optional release phase. Of course, it's totally valid to set both the `attack:` and `release:` opts to 0 and just use the sustain to have absolutely no fade in or fade out to the sound. However, be warned, a release of 0 can produce clicks in the audio and it's often better to use a very small value such as 0.2.
es: El sustain es útil para sonidos que quieras resaltar en la mezcla, antes de entrar a la fase opcional de release. Por supuesto, es totalmente válido poner las opciones `attack:` y `release:` a 0; de esta forma el sonido aparecerá y desaparecerá de golpe. Sin embargo, ten en cuenta que un release de 0 puede producir clicks en el audio, por lo que se recomienda usar un valor muy pequeño como 0.2.

en: Decay Phase
es: Fase de Decaimiento (Decay)

en: For an extra level of control, you can also specify a decay time. This is a phase of the envelope that fits between the attack and sustain phases and specifies a time where the amplitude will drop from the `attack_level:` to the `decay_level:` (which unless you explicitly set it will be set to the `sustain_level:`). By default, the `decay:` opt is 0 and both the attack and sustain levels are 1 so you'll need to specify them for the decay time to have any effect:
es: También puedes especificar el tiempo de decaimiento (decay) para tener un mayor control de tu sonido. Esta fase se encuentra entre el ataque y el sostenimiento (sustain), y simboliza el tiempo que tarda la amplitud en bajar dede el nivel de ataque (`attack_level:`) hasta el nivel de decay (`decay_level:`); el `decay_level:` tiene por defecto el mismo valor que el nivel de sostenimiento (`sustain_level:`), pero puedes ponerle el valor que tú quieras. Por defecto, la opción `decay:` vale 0 y los niveles de ataque y sustain valen 1, así que tendrás que cambiar dichos valores para que el tiempo de decaimiento haga efecto:

en: ![ADSR envelope](../../../etc/doc/images/tutorial/env-attack-decay-sustain-release.png)
es: ![envolvente ADSR](../../../etc/doc/images/tutorial/env-attack-decay-sustain-release.png)

en: Decay Level
es: Nivel de Decaimiento

en: One last trick is that although the `decay_level:` opt defaults to be the same value as `sustain_level:` you can explicitly set them to different values for full control over the envelope. This allows you to to create envelopes such as the following:
es: Un último truco... aunque la opción `decay_level:` está predeterminada a tener el mismo valor que el `sustain_level:` puedes ser explícit@ y asignarles diferentes valores para tener un control total del envolvente. Esto te permitirá crear envolventes como el siguiente:

en: ![ASR envelope](../../../etc/doc/images/tutorial/env-decay-level.png)
es: ![envolvente ASR](../../../etc/doc/images/tutorial/env-decay-level.png)

en: It's also possible to set the `decay_level:` to be higher than `sustain_level:`:
es: También es posible poner el `decay_level:` más alto que el `sustain_level:`:

en: ![ASR envelope](../../../etc/doc/images/tutorial/env-decay-level-2.png)
es: ![envolvente ASR](../../../etc/doc/images/tutorial/env-decay-level-2.png)

en: ADSR Envelopes
es: Envolventes ADSR

en: So to summarise, Sonic Pi's ADSR envelopes have the following phases:
es: Para resumir, las envolventes ADSR de Sonic Pi tienen las siguientes fases:

en: *attack* - time from 0 amplitude to the `attack_level`,
es: *ataque* - tiempo que tarda la amplitud en pasar de 0 al `attack_level`,

en: *decay* - time to move amplitude from `attack_level` to `decay_level`,
es: *decaimiento (decay)* - tiempo que tarda la amplitud en pasar del `attack_level` al `decay_level`,

en: *sustain* - time to move the amplitude from `decay_level` to `sustain_level`,
es: *sostenimiento (sustain)* - tiempo que tarda la amplitud en pasar del `decay_level` al `sustain_level`,

en: *release* - time to move amplitude from `sustain_level` to 0
es: *release* - tiempo que tarda la amplitud en pasar del `sustain_level` a 0

en: It's important to note that the duration of a sound is the summation of the times of each of these phases. Therefore the following sound will have a duration of 0.5 + 1 + 2 + 0.5 = 4 beats:
es: Es importante recalcar que la duración de un sonido es la sumatoria de los tiempos de todas las fases. Por tanto, el siguiente sonido tendrá una duración de 0.5 + 1 + 2 + 0.5 = 4 pulsos:

en: Now go and have a play adding envelopes to your sounds...
es: Ahora ve a jugar con envolventes en tus sonidos...

en: 3 Samples
es: 3 Muestras

en: Samples
es: Muestras

en: Another great way to develop your music is to use pre-recorded sounds. In great hip-hop tradition, we call these pre-recorded sounds *samples*. So, if you take a microphone outside, go and record the gentle sound of rain hitting canvas, you've just created a sample.
es: Otra gran manera de desarrollar tu música es usando sonidos pre-grabados. En la gran tradición del hip-hop, llamamos a estos sonidos pre-grabados *sampleos*. Así que si tomas un micrófono afuera y grabas el sonido de la lluvia golpeando la tela, ya creaste un sampleo.

en: Sonic Pi lets you do lots of fun things with samples. Not only does it ship with 130 public domain samples ready for you to jam with, it lets you play and manipulate your own. Let's get to it...
es: Sonic Pi te deja hacer muchas y divertidas cosas con las muestras. No sólo viene con cerca de 90 muestras de dominio libre para que ser utilizados, sino que te deja manipular los tuyos. Veamos...

en: 3.1 Triggering Samples
es: 3.1 Disparando muestras

en: Triggering Samples
es: Disparando muestras

en: Playing beeps is only the beginning. Something that's a lot of fun is triggering pre-recorded samples. Try it:
es: Tocar con pitidos (beeps) es sólo el principio. Por ejemplo, puedes probar algo realmente divertido, que es lanzar samples pre-grabados. Inténtalo:

en: Sonic Pi includes many samples for you to play with. You can use them just like you use the `play` command. To play multiple samples and notes just write them one after another:
es: Sonic Pi incluye muchos samples con los que puedes tocar. Utiliza el comando `play` para dispararlos. Para tocar varios samples y notas, sólo tienes que escribirlos uno detrás del otro:

en: If you want to space them out in time, use the `sleep` command:
es: Si quieres distribuirlos en el tiempo, usa el comando `sleep`:

en: Notice how Sonic Pi doesn't wait for a sound to finish before starting the next sound. The `sleep` command only describes the separation of the *triggering* of the sounds. This allows you to easily layer sounds together creating interesting overlap effects.
es: ¿Notas que Sonic Pi no espera a finalizar un sonido para comenzar el siguiente? El comando `sleep` sólo describe la separación de los sonidos *disparados*. Esto te permite hacer capas de sonidos fácilmente, creando interesantes efectos de capas superpuestas.

en: Discovering Samples
es: Descubriendo las muestras

en: There are two ways to discover the range of samples provided in Sonic Pi. First, you can use this help system. Click on Samples in the menu at the bottom of this help screen, choose your category and then you'll see a list of available sounds.
es: Tienes dos formas de ver el rango de las muestras incluidas en Sonic Pi. Primero, puedes utilizar este sistema de ayuda. Pulsa sobre Muestras en el menú al final de la pantalla de ayuda, elige una categoria, y verás una lista de sonidos disponibles.

en: Alternatively you can use the *auto-completion system*. Simply type the start of a sample group such as: `sample :ambi_` and you'll see a drop-down of sample names appear for you to select. Try the following category prefixes:
es: También puedes usar el *sistema para auto completar*. Sólo tienes que escribir el comienzo de un grupo de samples que empiecen por el mismo nombre; por ejemplo, `sample :ambi_`. Te saldrá un menú con nombres de samples disponibles, que puedes seleccionar. Prueba con los prefijos de las siguientes categorías:

en: Now start mixing samples into your compositions!
es: ¡Ahora puedes comenzar a mezclar muestras en tus composiciones!

en: 3.2 Sample Parameters
es: 3.2 Parámetros de muestreo

en: Sample Parameters: Amp and Pan
es: Parámetros de Sample: Amplitud y Pan

en: As we saw with synths, we can easily control our sounds with parameters. Samples support exactly the same parameterisation mechanism. Let's revisit our friends `amp:` and `pan:`.
es: Como ya vimos con los sintetizadores, podemos controlar con facilidad nuestros sonidos con parámetros. Las muestras permiten exactamente el mismo mecanismo de parametrización. Veamos a nuestros viejos conocidos `amp:` y `pan:`.

en: Amping samples
es: Amplificando samples

en: You can change the amplitude of samples with exactly the same approach you used for synths:
es: Puedes cambiar la amplitud de los samples igual que la amplitud de los sintetizadores:

en: Panning samples
es: Paneando los Samples

en: We're also able to use the `pan:` parameter on samples. For example, here's how we'd play the amen break in the left ear and then half way through play it again through the right ear:
es: También podemos utilizar el parámetro `pan:` para los samples. En el siguiente ejemplo, el amen break suena primero en el oído izquierdo, y a la mitad, pasa al oído derecho:

en: Note that 0.877 is half the duration of the `:loop_amen` sample in seconds.
es: Fíjate en que 0.877 es justo la mitad de la duración (en segundos) del sample `:loop_amen` .

en: Finally, note that if you set some synth defaults with `use_synth_defaults` (which we will discuss later), these will be ignored by `sample`.
es: Finalmente, nota que si seteas algunos sintetizadores por defecto con `use_synth_defaults` (que discutiremos luego), estos serán ignorados por `sample`.

en: 3.3 Stretching Samples
es: 3.3 Estirando Samples

en: Stretching Samples
es: Estirando Samples

en: Now that we can play a variety of synths and samples to create some music, it's time to learn how to modify both the synths and samples to make the music even more unique and interesting. First, let's explore the ability to *stretch* and *squash* samples.
es: Ahora que ya podemos tocar una variedad de sintetizadores y samples para crear música, es tiempo de aprender a modificar tanto los sintetizadores como los samples para hacer la música incluso más interesante y única. Primero, exploremos la habilidad de *estirar* y *aplastar* los samples.

en: Sample Representation
es: Representación de Samples

en: Samples are pre-recorded sounds stored as numbers which represent how to move the speaker cone to reproduce the sound. The speaker cone can move in and out, and so the numbers just need to represent how far in and out the cone needs to be for each moment in time. To be able to faithfully reproduce a recorded sound the sample typically needs to store many thousands of numbers per second! Sonic Pi takes this list of numbers and feeds them at the right speed to move your computer's speaker in and out in just the right way to reproduce the sound. However, it's also fun to change the speed with which the numbers are fed to the speaker to change the sound.
es: Los Samples son sonidos pregrabados guardados como números que representan cómo mover los conos de los parlantes para reproducir sonidos. Estos conos se pueden mover hacia dentro y hacia afuera, así que los números sólo deben representar ese movimiento en cada momento dado. Para poder reproducir fielmente un sonido, el sample debe guardar miles de números por segundo! Sonic Pi toma esta lista de números y los alimenta a la velocidad correcta para mover los parlantes de tu ordenador a la velocidad correcta para reproducir el sonido. Sin embargo, también es divertido cambiar la velocidad a la que los números son alimentados al parlante para cambiar el sonido.

en: Changing Rate
es: Cambiando la Velocidad

en: Let's play with one of the ambient sounds: `:ambi_choir`. To play it with the default rate, you can pass a `rate:` opt to `sample`:
es: Vamos a cambiar uno de los sonidos ambientales: `:ambi_choir`. Para la modificación de la velocidad por defecto, se puede agregar `rate:` a la `sample`:

en: This plays it at normal rate (1), so nothing special yet. However, we're free to change that number to something else. How about `0.5`:
es: Esto lo ejecuta a tiempo normal (1), nada especial. Sin embargo, podemos cambiar ese número por algo más. ¿Qué tal a `0.5`?:

en: Woah! What's going on here? Well, two things. Firstly, the sample takes twice as long to play, secondly the sound is an octave lower. Let's explore these things in a little more detail.
es: ¡Woah! ¿qué sucedió? Bueno, dos cosas: Primero, el sample se ejecutó en el doble del tiempo; Segundo, sonó una octava más grave. Exploremos todo esto en más detalle.

en: Let's stretch
es: Estiremos

en: A sample that's fun to stretch and compress is the Amen Break. At normal rate, we might imagine throwing it into a *drum 'n' bass* track:
es: Un sample que es divertido estirar y comprimir es el Amen Break. A velocidad normal, podemos imaginar ponerlo en una pista de *drum 'n' bass*:

en: However by changing the rate we can switch up genres. Try half speed for *old school hip-hop*:
es: Sin embargo, cambiando la velocidad podemos cambiar géneros. Intenta con la mitad de la velocidad para algo de "hip hop de la vieja escuela":

en: If we speed it up, we enter *jungle* territory:
es: Si lo aceleramos, entramos al territorio de *jungle*:

en: Now for our final party trick - let's see what happens if we use a negative rate:
es: Vamos a nuestro último truco - veamos qué sucede si utilizamos una velocidad negativa:

en: A Simple Explanation of Sample Rate
es: Velocidad de Sample: Una explicación sencilla

en: A useful way to think of samples is as springs. Playback rate is like squashing and stretching the spring. If you play the sample at rate 2, you're *squashing the spring* to half its normal length. The sample therefore takes half the amount of time to play as it's shorter. If you play the sample at half rate, you're *stretching the spring* to double its length. The sample therefore takes twice the amount of time to play as it's longer. The more you squash (higher rate), the shorter it gets, the more you stretch (lower rate), the longer it gets.
es: Una manera útil de pensar en samples es comparándolos con resortes. Piensa en la velocidad de ejecución como "estirar" o "comprimir" el resorte. Si tocas a velocidad 2 estás *comprimiendo el resorte* a la mitad de su tamaño, por tanto le toma la mitad del tiempo en ejecutarse, ya que es más corto. Si ejecutas el sample a la mitad de velocidad, estás en efecto *alargando el resorte*, por tanto estás doblando su tamaño y el tiempo que le toma ejecutarse. Entre más comprimas (mayor velocidad), más corto se vuelve, entre más estires (menor velocidad), más largo se vuelve.

en: Compressing a spring increases its density (the number of coils per cm) - this is similar to the sample sounding *higher pitched*. Stretching the spring decreases its density and is similar to the sound having a *lower pitch*.
es: Comprimir un resorte incrementa su densidad (el número de "vueltas" por cm.) - esto es similar al sample sonando más *agudo*. Estirar el resorte disminuye su densidad y es similar al sonido siendo más *grave*.

en: The Maths Behind Sample Rate
es: La matemática detrás de la velocidad de sample

en: (This section is provided for those that are interested in the details. Please feel free to skip it...)
es: (Esta sección es para aquellos interesados en los detalles. Eres libre de saltártela...)

en: As we saw above, a sample is represented by a big long list of numbers representing where the speaker should be through time. We can take this list of numbers and use it to draw a graph which would look similar to this:
es: Como hemos visto, un sample está representado por una larga lista de números representando donde debe de estar el parlante a través del tiempo. Podemos tomar este listado de números y usarlo para dibujar un gráfico que sería similar a:

en: ![sample graph](../../../etc/doc/images/tutorial/sample.png)
es: ![gráfica de muestra](../../../etc/doc/images/tutorial/sample.png)

en: You might have seen pictures like this before. It's called the *waveform* of a sample. It's just a graph of numbers. Typically a waveform like this will have 44100 points of data per second (this is due to the Nyquist-Shannon sampling theorem). So, if the sample lasts for 2 seconds, the waveform will be represented by 88200 numbers which we would feed to the speaker at a rate of 44100 points per second. Of course, we could feed it at double rate which would be 88200 points per second. This would therefore take only 1 second to play back. We could also play it back at half rate which would be 22050 points per second taking 4 seconds to play back.
es: Quizás hayas visto imágenes parecidas a esa. Se llaman "forma de onda" de un sampleo. Simplemente es la graficación de números. Típicamente una forma de onda como ésta tendrá 44100 puntos por segundo de datos (esto es debido al teorema de sampleo de Nyquist-Shannon) Así que si el sampleo dura 2 segundos, la forma de onda será representada por 88200 números, alimentándo al altavoz a una velocidad de 44100 puntos por segundo. Claro, podemos también alimentarlos a una velocidad doble, que sería de 88200 puntos por segundo, lo cual tomaría sólo 1 segundo para ser tocado. También podríamos tocarlo a la mitad de velocidad, lo que daría 22050 puntos por segundo tomando 4 segundos de tiempo de ejecución.

en: The duration of the sample is affected by the playback rate:
es: La duración del sampleo es afectada por la velocidad de ejecución:

en: Doubling the playback rate halves the playback time,
es: Doblando la velocidad de reproducción se reduce a la mitad el tiempo de ejecución,

en: Halving the playback rate doubles the playback time,
es: cortando a la mitad la reproducción, doblamos el tiempo de ejecución,

en: Using a playback rate of one fourth quadruples the playback time,
es: usando una velocidad de ejecución de 1/4, cuadruplicamos el tiempo de reproducción,

en: Using a playback rate of 1/10 makes playback last 10 times longer.
es: El uso de una velocidad de reproducción de 1/10, hace que la reproducción dure 10 veces más.

en: We can represent this with the formula:
es: Podemos representar esto con la fórmula:

en: new_sample_duration = (1 / rate) * sample_duration
es: nuevo_sample_ = (1 / velocidad) * duración_sample

en: Changing the playback rate also affects the pitch of the sample. The frequency or pitch of a waveform is determined by how fast it moves up and down. Our brains somehow turn fast movement of speakers into high notes and slow movement of speakers into low notes. This is why you can sometimes even see a big bass speaker move as it pumps out super low bass - it's actually moving a lot slower in and out than a speaker producing higher notes.
es: Cambiando la velocidad de ejecución se afecta el tono del muestreo. La frecuencia o tono de una onda está determinada por cuán rápido se mueve hacia arriba y hacia abajo. De alguna manera, nuestro cerebro toma los movimientos rápidos de los parlantes a notas agudas, igualmente, torna movimientos lentos de los parlantes en notas graves. Por eso es que puedes ver los parlantes de bajos moverse cuando están dando notas muy bajas, porque en realidad sí se están moviendo adentro/afuera del parlante mucho más lentamente que al producir notas altas.

en: If you take a waveform and squash it it will move up and down more times per second. This will make it sound higher pitched. It turns out that doubling the amount of up and down movements (oscillations) doubles the frequency. So, *playing your sample at double rate will double the frequency you hear it*. Also, *halving the rate will halve the frequency*. Other rates will affect the frequency accordingly.
es: Si tomas una forma de onda y la comprimes en el eje de las "x"(tiempo), se moverá más veces por segundo hacia arriba y hacia abajo, lo que producirá un sonido más agudo. Significa que doblando la cantidad de movimientos verticales (oscilaciones) se dobla la frecuencia. Así: *tocar tu onda sonora al doble de velocidad, doblará la frecuencia a la que la escuchas*. Asimismo, *reduciendo la velocidad a la mitad, también reduce la frecuencia a la mitad*. En consecuencia, cambios en las velocidades afectarán la frecuencia.

en: 3.4 Enveloped Samples
es: 3.4 Onda de muestra con envolvente

en: Enveloped Samples
es: Envolventes para samples

en: It is also possible to modify the *duration* and *amplitude* of a sample using an ADSR envelope. However, this works slightly differently to the ADSR envelope available on synths. Sample envelopes only allow you to reduce the amplitude and duration of a sample - and never to increase it. The sample will stop when either the sample has finished playing or the envelope has completed - whichever is first. So, if you use a very long `release:`, it won't extend the duration of the sample.
es: Es posible modificar la *duración* y *amplitud* de una onda muestral (sample) usando un envolvente acústico del tipo ADSR. sin embargo, este funciona un tanto diferente al envolvente acústico ADSR de los sintetizadores (synths), ya que los envolventes acústicos para ondas muestral sólo te permiten reducir la amplitud y duración de una onda sonora, pero nunca incrementarlos. La onda muestral terminará su ejecución ya sea cuando se acabe o cuando el envolvente lo haga, lo que suceda primero. Así que si utilizas un "desvanecimiento"(release) largo, ello no extenderá la duración de la onda muestral.

en: Amen Envelopes
es: Envolventes Acústicos para Amen

en: Let's return to our trusty friend the Amen Break:
es: Volvamos a nuestro amigo, el Amen Break:

en: With no opts, we hear the full sample at full amplitude. If we want to fade this in over 1 second we can use the `attack:` param:
es: Sin parámetros , escuchamos la onda muestral a su amplitud total. Si quisiéramos aparecerla dentro de 1 segundo, podemos utilizar el parámetro `attack:`:

en: For a shorter fade in, choose a shorter attack value:
es: Para un aparecimiento más corto, elegiríamos un valor de ataque menor:

en: Auto Sustain
es: Sustain Automático

en: Where the ADSR envelope's behaviour differs from the standard synth envelope is in the *sustain* value. In the standard synth envelope, the sustain defaulted to 0 unless you set it manually. With samples, the sustain value defaults to an *automagical* value - the time left to play the rest of the sample. This is why we hear the full sample when we pass no defaults. If the attack, decay, sustain and release values were all 0 we'd never hear a peep. Sonic Pi therefore calculates how long the sample is, deducts any attack, decay and release times and uses the result as your sustain time. If the attack, decay and release values add up to more than the duration of the sample, the sustain is simply set to 0.
es: Donde el envolvente acústico ADSR difiere en su conducta con el de un sintetizador es en el valor del sostenimiento *sustain*. En el envolvente acústico del sintetizador, el sostenimiento está predeterminado a 0 a menos que lo cambies manualmente. Con ondas muestrales, el valor predeterminado de sustain está en *automágico* el tiempo que resta para terminar el resto de la onda. A ello se debe que podamos escuchar la onda muestra completa cuando nocambiamos los parámetros por defecto. Si los valores de ataque, decaimiento,sostenimiento y desvanecimiento fueran 0, nunca escucharíamos ningún sonido de la onda. Por eso Sonic Pi calcula qué tan larga es la onda muestra, deduce su ataque, decaimiento y tiempo de desvanecimiento, para utilizar esa sumatoria como tiempo de sostenimiento. Si los valores de ataque, decaimiento y desvanecimiento son mayores al tiempo de la onda muestra,sencillamente el sostenimiennto de vuelve 0.

en: Fade Outs
es: Apagando (desaparición)

en: To explore this, let's consider our Amen break in more detail. If we ask Sonic Pi how long the sample is:
es: Para explorar esto, consideremos nuestra pista Amen break en detalle. Si le preguntamos a Sonic Pi cuán largo es el sample:

en: It will print out `1.753310657596372` which is the length of the sample in seconds. Let's just round that to `1.75` for convenience here. Now, if we set the release to `0.75`, something surprising will happen:
es: Imprimirá `1.753310657596372` que es el tamaño del sample en segundos. Consideremos redondearlo a `1.75` por conveniencia. Ahora, si seteamos el release a `0.75`, algo sorprendente pasará:

en: It will play the first second of the sample at full amplitude before then fading out over a period of 0.75 seconds. This is the *auto sustain* in action. By default, the release always works from the end of the sample. If our sample was 10.75 seconds long, it would play the first 10 seconds at full amplitude before fading out over 0.75s.
es: Ejecutará el primer segundo del sample a amplitud completa antes de desvanecerse por un periodo de 0.75 segundos. Esto es el *auto sustain* en acción. Predeterminado, el release siempre trabaja al final del sample. si tu sample fuera 10.75 segundos de largo, ejecutaría los primeros 10 segundos a completa amplitud antes de comenzar a desvanecerse por los 0.75 segundos finales.

en: Remember: by default, `release:` fades out at the end of a sample.
es: Recuerda: por defecto, "desvanecimiento"(release) :se desvanece al final de un sample.

en: Fade In and Out
es: Fade In y Fade Out

en: We can use both `attack:` and `release:` together with the auto sustain behaviour to fade both in and out over the duration of the sample:
es: Podemos utilizar tanto el `attack:` como el `release:` juntos con el auto sustain para aparecer y desvanecer en la duración del sample:

en: As the full duration of the sample is 1.75s and our attack and release phases add up to 1.5s, the sustain is automatically set to 0.25s. This allows us to easily fade the sample in and out.
es: Como la duración total del sampleo + ataque + release suman 1.5s, el sostenido queda automáticamente en 0.25s. Esto nos permite aparecer y desvanecer el sampleo con facilidad.

en: Explicit sustain
es: Sostenido explícito

en: We can easily get back to our normal synth ADSR behaviour by manually setting `sustain:` to a value such as 0:
es: Podemos fácilmente volver a los parámetros normales de nuestro ADSR de sintetizador al ajustar manualmente el `sostenido:` a un valor como 0:

en: Now, our sample only plays for 0.75 seconds in total. With the default for `attack:` and `decay:` at 0, the sample jumps straight to full amplitude, sustains there for 0s then releases back down to 0 amplitude over the release period - 0.75s.
es: Ahora bien, nuestra onda muestra suena por 0.75 en total. Los parámetros pre- determinados para "ataque (attack)" y "decaimiento(decay)": son 0, la onda muestra salta directamente aamplitud total por 0 segundos y después baja a amplitud 0 por un periodo de desvanecimiento de 0.75 segundos.

en: Percussive cymbals
es: Címbalos

en: We can use this behaviour to good effect to turn longer sounding samples into shorter, more percussive versions. Consider the sample `:drum_cymbal_open`:
es: Podemos utilizar este comportamiento con buenos resultados para convertir muestras más largas en versiones más cortas y percusivas. Considere la muestra `:drum_cymbal_open`:

en: You can hear the cymbal sound ringing out over a period of time. However, we can use our envelope to make it more percussive:
es: Puedes escuchar el sonido del platillo sonando durante un periodo de tiempo. Sin embargo, podemos utilizar nuestra envolvente para hacerlo más percusivo:

en: You can then emulate hitting the cymbal and then dampening it by increasing the sustain period:
es: Puedes emular el golpeo del platillo y después apagarlo, al incrementar el periodo de mantenido:

en: Partial Samples
es: Muestras parciales

en: This section will conclude our exploration of Sonic Pi's sample player. Let's do a quick recap. So far we've looked at how we can trigger samples:
es: Esta sección concluirá nuestra exploración del reproductor de muestras de Sonic Pi. Hagamos una rápida recapitulación. Hasta ahora hemos visto cómo podemos disparar muestras:

en: We then looked at how we can change the rate of samples such as playing them at half speed:
es: A continuación, analizamos cómo podemos cambiar la velocidad de las muestras, por ejemplo, reproduciéndolas a media velocidad:

en: Next, we looked at how we could fade a sample in (let's do it at half speed):
es: Después miramos como podíamos aparecer un pequeño sampleo (hagámoslo a media velocidad):

en: We also looked at how we could use the start of a sample percussively by giving `sustain:` an explicit value and setting both the attack and release to be short values:
es: También miramos como podíamos usar el comienzo de un sampleo percusivamente al darle a `mantenido:` un valor explícito y ajustar ambos el ataque y el release con valores cortos:

en: However, wouldn't it be nice if we didn't have to always start at the beginning of the sample? Wouldn't it also be nice if we didn't have to always finish at the end of the sample?
es: Sin embargo, ¿no sería bueno que no tuviéramos que empezar siempre por el principio de la muestra? ¿No sería bueno que no tuviéramos que terminar siempre al final de la muestra?

en: It is possible to choose an arbitrary starting point in the sample as a value between 0 and 1 where 0 is the start of the sample, 1 is the end and 0.5 is half way through the sample. Let's try playing only the last half of the amen break:
es: Es posible elegir un punto de inicio arbitrario en el sampleo con un valor entre 0 y 1, donde 0 es el punto de comienzo, 1 es el punto de final y 0.5 es la mitad del sampleo. Intentemos ejecutar únicamente la última mitad del sampleo de amen break:

en: How about the last quarter of the sample:
es: ¿Qué tal escuchar el último cuarto del sample?:

en: Choosing a finish point
es: Escogiendo punto de termino

en: Specifying start and finish
es: Especificando el comienzo y el final

en: Of course, we can combine these two to play arbitrary segments of the audio file. How about only a small section in the middle:
es: Por supuesto que podemos combinar dos para tocar segmentos del archivo de audio arbitrariamente. ¿Qué tal solo una pequeña sección en el medio?

en: Cool! It plays it backwards!
es: ¡Genial! ¡Lo reproduce al revés!

en: Combining with envelopes
es: Combinando con envolventes

en: Finally, we can combine all of this with our ADSR envelopes to produce interesting results:
es: Finalmente, podemos combinar todo esto con nuestras envolventes ADSR para producir resultados interesantes:

en: 3.6 External Samples
es: Muestras externas

en: External Samples
es: Muestras externas

en: Portability
es: Portabilidad

en: Local Samples
es: Muestras locales

en: 3.7 Sample Packs
es: 3.7 Paquetes de muestras

en: Sample Packs
es: Paquete de samples

en: **Note: this section of the tutorial covers the advanced topic of working with large directories of your own samples. This will be the case if you've downloaded or bought your own sample packs and wish to use them within Sonic Pi.**
es: **Nota: esta sección del tutorial cubre el tema avanzado de trabajar con grandes directorios de tus propias muestras. Este será el caso si has descargado o comprado tus propios paquetes de muestras y deseas utilizarlos dentro de Sonic Pi.**

en: **Feel free to skip this if you're happy working with the built-in samples.**
es: **Si te gusta trabajar con las muestras incluidas, puedes omitir esta parte.**

en: For example, say you have the following folder on your machine:
es: Por ejemplo, si tienes la siguiente carpeta en tu máquina:

en: When we look inside that folder we find the following samples:
es: Cuando miramos dentro de esa carpeta encontramos las siguientes muestras:

en: Typically in order to play the piano sample we can use the full path:
es: Normalmente, para reproducir la muestra del piano podemos utilizar la ruta completa:

en: However, both of these calls to sample requires us to *know* the names of the samples within our directory. What if we just want to listen to each sample in turn quickly?
es: Sin embargo, cada uno de estos llamados a sample requieren que sepamos los nombres de los samples en nuestro directorio. ¿Que tal si solo quisiéramos escuchar cada sample, uno tras otro, rápidamente?

en: We can even make a shortcut to our directory path using a variable:
es: Podemos incluso hacer un acceso directo a la ruta de nuestro directorio usando una variable:

en: Now, if we want to play the second sample in our directory, we just need to add 1 to our index:
es: Ahora, si queremos reproducir un segundo sample en nuestro directorio, sólo necesitamos añadir 1 a nuestro índice:

en: Notice that we no longer need to know the names of the samples in the directory - we just need to know the directory itself (or have a shortcut to it). If we ask for an index which is larger than the number of samples, it simply wraps round just like Rings. Therefore, whatever number we use we're guaranteed to get one of the samples in that directory.
es: Date cuenta de que ya no necesitamos saber los nombres de los samples en el directorio - solamente debemos conocer el directorio (o tener una abreviatura para él). Si requerimos un indice que es mas grande que el numero de samples, simplemente retornamos al principio del directorio como si fuera un anillo. De cualquier manera, sin importar el número de índice que usemos, esta garantizado que tendremos un sample del directorio.

en: Filtering Sample Packs
es: Filtrar paquetes de samples

en: Usually indexing is enough, but sometimes we need more power to sort and organise our samples. Luckily many sample packs add useful information in the filenames. Let's take another look at the sample file names in our directory:
es: Usualmente con indexarlos es suficiente, pero algunas veces necesitamos algo mas poderoso para organizar nuestros samples. Afortunadamente muchos paquetes de samples añaden información valiosa en los nombres de los archivos. Ahora miremos de nuevo los nombres de los samples en nuestro directorio:

en: Notice that in these filenames we have quite a bit of information. Firstly, we have the BPM of the sample (beats per minute) at the start. So, the piano sample is at 120 BPM and our first three melodies are at 100 BPM. Also, our sample names contain the key. So the guitar sample is in Bb and the melodies are in A#. This information is very useful for mixing in these samples with our other code. For example, we know we can only play the piano sample with code that's in 120 BPM and in the key of Bb.
es: Date cuenta de que en estos nombres de archivo tenemos bastante información. En primer lugar tenemos el BPM del sample (número de pulsaciones por minuto) al comienzo. Por lo tanto, el sample del piano está a 120 BPM y nuestras primeras tres melodías están a 100 BPM. Además, nuestros nombres de los samples contienen la clave musical. Por tanto, el sample de la guitarra está en Bb (si bemol) y las melodías están en A# (la sostenido). Esta información es muy útil para mezclar estos samples con el resto del código. Por ejemplo, sabemos que solamente podemos usar el sample del piano con código que está a 120 BPM y en la clave de Bb.

en: It turns out that we can use this particular naming convention of our sample sets in the code to help us filter out the ones we want. For example, if we're working at 120 BPM, we can filter down to all the samples that contain the string `"120"` with the following:
es: Podemos usar como convención esta nomenclatura de nuestros conjuntos de samples en el código para ayudarnos a filtrar los que queremos. Por ejemplo, si trabajamos a 120 BPM, podemos filtrar a todos los ejemplos que contienen la cadena `" 120 "` con lo siguiente:

en: This will play us the first match. If we want the second match we just need to use the index:
es: Ésto ejecutará el primer sample. Si queremos el segundo sample sólo necesitamos usar el índice:

en: Finally, we're still free to add our usual opts to the call to `sample`:
es: Por último, podemos añadir las opciones habituales al `sample`:

en: Sources
es: Fuentes

en: For example, take a look at the following code:
es: Por ejemplo, echemos un vistazo al siguiente código:

en: Here, we're combining the contents of the samples within two directories and adding a specific sample. If `"/path/to/my/samples/"` contained 3 samples and `"/path/to/my/samples2/"` contained 12, we'd have 16 potential samples to index and filter (3 + 12 + 1).
es: Aquí, combinamos el contenido de los samples dentro de dos directorios y añadiendo un sample específico. Si `"/path/to/my/samples/"` contiene 3 samples y `"/path/to/my/samples2/"` contiene 12, tenemos 16 samples potenciales para indexar y filtrar (3 + 12 + 1).

en: By default, only the sample files within a directory are gathered into the candidate list. Sometimes you might have a number of nested folders of samples you wish to search and filter within. You can therefore do a recursive search for all samples within all subfolders of a particular folder by adding `**` to the end of the path:
es: Por defecto, sólo los samples de un directorio se agrupan en una lista de candidatos. Es posible que tenga una serie de subcarpetas de samples en la que quieras buscar y filtrar. Por lo tanto, puedes realizar una búsqueda recursiva de todas los samples dentro de todas las subcarpetas de una carpeta determinada añadiendo `**` al final de la ruta:

en: Take care though as searching through a very large set of folders may take a long time. However, the contents of all folder sources are cached, so the delay will only happen the first time.
es: Ten cuidado ya que la búsqueda en un conjunto muy grande de carpetas puede tomar mucho tiempo. Sin embargo, el contenido de todas las fuentes de las carpetas se almacenan en el caché, por lo que el retraso sólo se producirá la primera vez.

en: Finally, note that the sources *must go first*. If no source is given, then the set of built-in samples will be selected as the default list of candidates to work with.
es: Por último, ten en cuenta que las fuentes *deben ir primero*. Si no se da ninguna fuente, entonces el conjunto de samples incorporados se seleccionará de la lista predeterminada de candidatos con los que trabajar.

en: Filters
es: Filtros

en: Once you have a list of candidates you may use the following filtering types to further reduce the selection:
es: Una vez que tienes una lista de candidatos deberías usar los siguientes tipos de filtros para reducir aún más la selección:

en: `"foo"` Strings will filter on substring occurrence within file name (minus directory path and extension).
es: `"foo"` Las cadenas filtrarán la ocurrencia de la subcadena dentro del nombre de archivo (menos la ruta del directorio y la extensión).

en: `/fo[oO]/` Regular Expressions will filter on pattern matching of file name (minus directory path and extension).
es: `/fo[oO]/` Regular Expresssions filtrará aquellos archivos cuyo nombre sea más parecido al del archivo especificado (en el nombre de archivo no se incluye su ruta ni su extensión de archivo).

en: `:foo` - Keywords will filter candidates on whether the keyword is a direct match of the filename (minus directory path and extension).
es: `:foo` - Keywords filtrará aquellos candidatos donde la palabra clave coincida directamente con el nombre de archivo (salvo la ruta y la extensión).

en: `lambda{|a| ... }` - Procs with one argument will be treated as a candidate filter or generator function. It will be passed the list of current candidates and must return a new list of candidates (a list of valid paths to sample files).
es: `lambda{|a| ... }` - Los procesos con un argumento serán tratados como un filtro candidato o como una función generadora. Se pasará la lista de candidatos actuales, y deberá devolver una lista nueva de candidatos (es decir, una lista de rutas válidas a archivos de samples).

en: `1` - Numbers will select the candidate with that index (wrapping round like a ring if necessary).
es: `1` - Los números seleccionarán el candidato cuyo índice coincida con dicho número (dando la vuelta como una estructura de anillo si hace falta).

en: For example, we can filter over all the samples in a directory containing the string `"foo"` and play the first matching sample at half speed:
es: Por ejemplo, podemos filtrar sobre todos las muestras en un directorio que contengan el string `"foo"` y ejecutar la primera muestra correspondiente a la mitad de su velocidad:

en: See the help for `sample` for many detailed usage examples. Note that the ordering of the filters is honoured.
es: Mira la sección de ayuda para `sample` donde encontrarás muchos ejemplos de uso detallados. Ten en cuenta que debes respetar el orden de los filtros.

en: Composites
es: Filtros y fuentes compuestos

en: Finally, you may use lists wherever you may place a source or filter. The list will be automatically flattened and the contents will be treated as regular sources and filters. Therefore the following calls to `sample` are semantically equivalent:
es: Finalmente, puedes usar listas dentro de una fuente o filtro. La lista será aplanada automáticamente, y sus contenidos serán tratados como fuentes y filtros normales y corrientes. Por tanto, las siguientes llamadas a `sample` son equivalentes sintácticamente:

en: Wrapping Up
es: Conclusión

en: This was an advanced section for people that need real power to manipulate and use sample packs. If most of this section didn't make too much sense, don't worry. It's likely you don't need any of this functionality just yet. However, you'll know when you do need it and you can come back and re-read this when you start working with large directories of samples.
es: Ésta es una sección avanzada pensada para gente que necesite manipular y usar paquetes de samples de forma eficiente. No te preocupes si no entiendes si esta sección. Es probable que no necesites ninguna de estas opciones ahora mismo. Cuando llegue el momento. verás si te hacen falta estas herramientas; siempre puedes volver y leer esta ayuda de nuevo cuando empieces a trabajar con directorios de samples muy grandes.

en: A great way to add some interest into your music is using some random numbers. Sonic Pi has some great functionality for adding randomness to your music, but before we start we need to learn a shocking truth: in Sonic Pi *random is not truly random*. What on earth does this mean? Well, let's see.
es: Una manera de añadir interés a tu música es usando números aleatorios. Sonic Pi tiene gran funcionalidad añadiendo aleatoriedad a la música, pero antes de comenzar, debemos aprender una verdad chocante: en Sonic Pi *no existe aleatoriedad real*. ¿Qué significa eso? Vamos a ver.

en: Haunted Bells
es: Campanas encantadas

en: Another fun example of randomisation is to modify the cutoff of a synth randomly. A great synth to try this out on is the `:tb303` emulator:
es: Otro buen ejemplo de aleatoriedad es modificar el momento de corte de un sintetizador, en forma aleatoria. Un gran synth en el que hacerlo es el emulador `:tb303`:

en: Consider the following:
es: Considera lo siguiente:

en: Let's hear what that sounds like:
es: Escuchemos como suena:

en: Sometimes you want to emulate a dice throw - this is a special case of `rrand_i` where the lower value is always 1. A call to `dice` requires you to specify the number of sides on the dice. A standard dice has 6 sides, so `dice(6)` will act very similarly - returning values of either 1, 2, 3, 4, 5, or 6. However, just like fantasy role-play games, you might find value in a 4 sided dice, or a 12 sided dice, or a 20 sided dice - perhaps even a 120 sided dice!
es: Alguna vez querrás emular el tiro de un dado. Para ello tenemos un caso especial de `rrand_i` donde el valor inferior será siempre 1. El uso de `dice` requiere que especifiques el número de lados del dado. Un dado estándard tiene 6 lados, así `dice(6)` actuará similarmente, dando valores de 1, 2, 3, 4, 5, or 6. Sin embargo, como en los juegos de role-play encontrarás necesidad de un dado de 4, 12, 20 o inclusive de 120 caras!

en: ==> Skipping thread creation: thread with name :amen already exists.
es: ==> Omitiendo creación de hilo: ya existe un hilo con el nombre :amen.

en: One way to help others understand what your code is doing is to write comments (as we saw in a previous section). Another is to use meaningful variable names. Look at this code:
es: Una forma de ayudar a otras personas a entender lo que hace tu código es escribir comentarios (como vimos en una sección anterior). Otra forma es utilizar nombres de variables significativos. Mira este código:

en: Warning: Variables and Threads
es: Advertencia: Variables e Hilos

en: Whilst variables are great for giving things names and capturing the results of things, it is important to know that they should typically only be used locally within a thread. For example, *don't do this*:
es: Si bien las variables son buenas para nombrar cosas y guardar los resultados de estas, es importante saber que, por lo general, solo deben usarse localmente dentro de un hilo. Por ejemplo, *no hagas esto*:

en: In the above example we assign a ring of numbers to a variable `a` and then used it within two separate `live_loop`s. In the first live loop every `0.5`s we sort the ring (to `(ring 1, 2, 3, 4, 5, 6)`) and then print it out to the log. If you run the code, you'll find that the printed list *is not always sorted!*. This may surprise you - especially that sometimes the list is printed as sorted, and sometimes it is not. This is called non-deterministic behaviour and is the result of a rather nasty problem called a race-condition. The problem is due to the fact that the second live loop is also manipulating the list (in this case shuffling it) and by the time the list is printed, sometimes it has just been sorted and sometimes it has just been shuffled. Both live loops are racing to do something different to the same variable and every time round a different loop 'wins'.
es: En el ejemplo anterior asignamos un anillo de números a una variable `a` y luego lo usamos dentro de dos` live_loop`s separados. En el primer bucle en vivo cada `0.5`s ordenamos el anillo (a` (ring 1, 2, 3, 4, 5, 6) `) y luego lo imprimimos en el registro. Si ejecuta el código, verá que ¡la lista impresa * no está siempre ordenada! *. Esto puede sorprenderle, especialmente que a veces la lista se imprime como ordenada, y otras no. Esto se llama comportamiento no determinista y es el resultado de un problema bastante desagradable llamado condición de raza. El problema se debe al hecho de que el segundo bucle en vivo también está manipulando la lista (en este caso, mezclándola) y para el momento en que se imprime la lista, a veces simplemente se ha ordenado y, a veces, se ha barajado. Ambos bucles en vivo están compitiendo para hacer algo diferente a la misma variable y cada vez que un ciclo diferente 'gana'.

en: You are free to use whatever name you'd like for your `cue` messages - not just `:tick`. You just need to ensure that any other threads are `sync`ing on the correct name - otherwise they'll be waiting for ever (or at least until you press the Stop button).
es: Eres libre de utilizar cualquier nombre que quieras a los mensajes de `cue` - no sólo `:tick`. Sólo debes asegurarte que los otros hilos estén `sync` sincronizándose en el nombre correcto - de otro modo se quedarán esperando por siempre (o hasta presionar el botón de Parar).

en: If all of this sounds a bit complicated, don't worry. Once you play around with it a little, it will all become quite clear. Before you do though, a simple analogy is that of guitar FX pedals. There are many kinds of FX pedals you can buy. Some add reverb, others distort etc. A guitarist will plug their guitar into one FX pedal - i.e. distortion -, then take another cable and connect (chain) a reverb pedal. The output of the reverb pedal can then be plugged into the amplifier:
es: Si todo suena un poco complicado, no te preocupes. Una vez juegues con esto, se aclarará. Antes de eso, una simple analogía es la de los pedales de efectos de una e-guitarra. Hay muchos pedales que puedes comprar. Algunos añaden reverberación, otros distorsión etc. Una guitarrista conecta su guitarra en un pedal, después a otro y así (cadena) La salida del pedal de reverberación termina siendo conectada al amplificador:

en: Guitar -> Distortion -> Reverb -> Amplifier
es: Guitarra -> Distorsión -> Reverberación -> Amplificador

en: Echo
es: Eco

en: wobble,
es: tambaleo,

en: reverb,
es: reverberación,

en: echo,
es: eco,

en: distortion,
es: distorsión

en: slicer
es: rebanador

en: This way we've lifted the `with_fx` out of the inner part of the `loop` and we're now creating a new reverb every 16 notes.
es: De esta forma, hemos sacado el `with_fx` fuera de la parte interna del `loop` y ahora estamos creando un nuevo reverb cada 16 notas.

en: This is such a common pattern that `with_fx` supports an opt to do exactly this but without having to write the `16.times` block:
es: Éste es un patrón tan común que `with_fx` ofrece una opción para hacer esto mismo, pero sin tener que escribir el bloque `16.times`:

en: Both the `reps: 16` and `16.times do` examples will behave identically. The `reps: 16` essentially repeats the code in the `do/end` block 16 times so you can use them both interchangeably and choose the one that feels best for you.
es: Ambos ejemplos, `reps: 16` y `16.times do`, tendrán el mismo comportamiento. Básicamente, el `reps: 16` repite el código dentro del bloque `do/end` 16 veces; así que puedes usar ambos de manera intercambiable, y utilizar aquel que te guste más.

en: Now have fun sliding things around for smooth transitions and flowing control...
es: Ve y diviértete deslizando todo para unas transiciones suaves y control fluído...

en: In this section we'll explore using lists to also represent chords and scales. First let's recap how we might play a chord. Remember that if we don't use `sleep`, sounds all happen at the same time:
es: Ahora también exploraremos listas que representan acordes y escalas. Primero repasemos cómo tocar un acorde. Recuerda que si no usamos `sleep`, todos los sonidos suceden al mismo tiempo:

en: Of course, you can also use the traditional note names instead of the MIDI numbers:
es: Por supuesto, puedes usar los nombres tradicionales de notas en vez de números MIDI:

en: Try running the code `puts [52, 55, 59][1]` and you'll see `55` pop up in the log. Change the index `1` to other indexes, try longer lists and think about how you might use a list in your next code jam. For example, what musical structures might be represented as a series of numbers...
es: Prueba con `puts [52, 55, 59][1]` y verás `55` en la bitácora. Cambia el índice `1` a otros índices, intenta con listas más largas en tu próximo código. Por ejemplo, estructuras musicales que podrían representarse como series de números...

en: We can now use our counter to access a note in our list:
es: Ahora podemos usar nuestro contador para acceder a una nota de nuestra lista:

en: 8.5 Ring Chains
es: 8.5 Cadenas de Anillos

en: Ring Chains
es: Cadenas de Anillos

en: In addition to the constructors such as `range` and `spread` another way of creating new rings is to manipulate existing rings.
es: Otra forma de crear nuevos anillos, además de con constructores como `range` y `spread`, es manipulando anillos existentes.

en: Chain Commands
es: Comandos de Cadenas

en: To explore this, take a simple ring:
es: Para explorar esta idea, mira el siguiente anillo:

en: What if we wanted it backwards? Well we'd use the chain command `.reverse` to take the ring and turn it around:
es: ¿Y si lo queremos de atrás a delante? Bueno, sólo tendríamos que usar el comando `.reverse` para coger el anillo y darle la vuelta:

en: Now, what if we wanted the first three values from the ring?
es: Ahora bien, ¿y si queremos los tres primeros valores del anillo?

en: Finally, what if we wanted to shuffle the ring?
es: Finalmente, ¿y si queremos mezclar (barajar) el anillo?

en: Multiple Chains
es: Cadenas Múltiples

en: This is already a powerful way of creating new rings. However, the *real* power comes when you chain a few of these commands together.
es: Por sí sola, ésta es una forma muy potente de crear nuevos anillos. Sin embargo, el *verdadero* poder viene cuando encadenas unos cuantos de estos comandos juntos.

en: How about shuffling the ring, dropping 1 element and then taking the next 3?
es: ¿Y qué me dices de desordenar el anillo, quitarle 1 elemento, y después coger los siguientes 3?

en: Let's take this in stages:
es: Veamos esto por pasos:

en: `(ring 10, 20, 30, 40, 50)` - our initial ring
es: `(ring 10, 20, 30, 40, 50)` - nuestro anillo inicial

en: `(ring 10, 20, 30, 40, 50).shuffle` - shuffles - `(ring 40, 30, 10, 50, 20)`
es: `(ring 10, 20, 30, 40, 50).shuffle` - lo desordenamos - `(ring 40, 30, 10, 50, 20)`

en: `(ring 10, 20, 30, 40, 50).shuffle.drop(1)` - drop 1 - `(ring 30, 10, 50, 20)`
es: `(ring 10, 20, 30, 40, 50).shuffle.drop(1)` - quitamos 1 - `(ring 30, 10, 50, 20)`

en: `(ring 10, 20, 30, 40, 50).shuffle.drop(1).take(3)` - take 3 - `(ring 30, 10, 50)`
es: `(ring 10, 20, 30, 40, 50).shuffle.drop(1).take(3)` - cogemos 3 - `(ring 30, 10, 50)`

en: Can you see how we can just create a long chain of these methods by just *sticking them together*. We can combine these in any order we want creating an extremely rich and powerful way of generating new rings from existing ones.
es: ¿Ves cómo hemos creado una cadena larga de estos métodos con sólo *unirlos*? Podemos combinarlos en el orden que queramos; ésta es una forma extremadamente rica y potente de generar nuevos anillos a partir de anillos existentes.

en: Immutability
es: Inmutabilidad

en: These rings have a powerful and important property. They are immutable which means that they can not change. This means that the chaining methods described in this section *do not change rings* rather they *create new rings*. This means you're free to share rings across threads and start chaining them within a thread knowing you won't be affecting any other thread using the same ring.
es: Estos anillos tienen una propiedad muy poderosa e importante. Son inmutables, es decir, no pueden cambiar. Esto significa que la cadena de métodos descrita en esta sección *no cambia anillos*, sino que *crea nuevos anillos*. Por eso, puedes compartir anillos entre distintos hilos con total libertad; puedes encadenarlos dentro de un hilo sabiendo que ningún otro hilo usando el mismo anillo se va a ver afectado.

en: Available Chain Methods
es: Métodos de Cadenas Disponibles

en: Here's a list of the available chain methods for you to play with:
es: Aquí tienes una lista de los métodos de cadenas disponibles, para que juegues con ellos:

en: `.reverse` - returns a reversed version of the ring
es: `.reverse` - devuelve una versión del anillo dado la vuelta

en: `.sort` - creates a sorted version of the ring
es: `.sort` - crea una versión ordenada del anillo

en: `.shuffle` - creates a shuffled version of the ring
es: `.shuffle` - crea una versión desordenada del anillo

en: `.pick(3)` - returns a ring with the results of calling `.choose` 3 times
es: `.pick(3)` - devuelve un anillo que es el resultado de llamar `.choose` 3 veces

en: `.take(5)` - returns a new ring containing only the first 5 elements
es: `.take(5)` - devuelve un anillo nuevo, que sólo contiene los primeros 5 elementos

en: `.drop(3)` - returns a new ring with everything but the first 3 elements
es: `.drop(3)` - devuelve un anillo nuevo con todos los elementos salvo los 3 primeros

en: `.butlast` - returns a new ring with the last element missing
es: `.butlast` - devuelve un anillo nuevo sin el último elemento

en: `.drop_last(3)` - returns a new ring with the last 3 elements missing
es: `.drop_last(3)` - devuelve un nuevo anillo sin los 3 últimos elementos

en: `.take_last(6)`- returns a new ring with only the last 6 elements
es: `.take_last(6)`- devuelve un anillo nuevo con sólo los últimos 6 elementos

en: `.stretch(2)` - repeats each element in the ring twice
es: `.stretch(2)` - repite cada elemento en el anillo dos veces

en: `.repeat(3)` - repeats the entire ring 3 times
es: `.repeat(3)` - repite el anillo entero 3 veces

en: `.mirror` - adds the ring to a reversed version of itself
es: `.mirror` - añade el anillo a una versión invertida del mismo

en: `.reflect` - same as mirror but doesn't duplicate middle value
es: `.reflect` - lo mismo que mirror, pero no duplica el valor del medio

en: `.scale(2)` - returns a new ring with all elements multiplied by 2 (assumes ring contains numbers only)
es: `.scale(2)` - devuelve un anillo nuevo con todos los elementos multiplicados por 2 (asume que el anillo sólo contiene números)

en: Then hit Run.
es: Ahora aprieta Run.

en: *There can never be two live loops running with the same name*.
es: *Nunca pueden haber dos bucles en vivo con el mismo nombre ejecutándose simultáneamente*.

en: One thing you might have already noticed is that live loops work automatically with the thread cue mechanism we explored previously. Every time the live loop loops, it generates a new `cue` event with the name of the live loop. We can therefore `sync` on these cues to ensure our loops are in sync without having to stop anything.
es: Una cosa que ya habrás notado es que los bucles en vivo trabajan automáticamente con el mecanismo de marca de hilos que exploramos anteriormente. Cada bucle en vivo genera un evento `cue` Gracias a ello podemos sincronizarlos para asegurar bucles sin pausa.

en: We're not quite finished yet though - you'll notice that the beats don't quite line up correctly. This is because the loops are *out of phase*. Let's fix that by syncing one to the other:
es: Todavía no terminamos, pues notarás que los pulsos no se alinean correctamente. Esto se debe a que los bucles están desfasados *out of phase*. Arreglemos esto sincronizándolos entre sí:

en: 9.4 Ticking
es: 9.4 Ticado

en: Ticking
es: Ticado

en: This is equivalent to:
es: Esto es equivalente a:

en: Don't make it too complicated
es: No lo compliques tanto

en: Take a look at the documentation for `tick` where there are many useful examples and happy ticking!
es: Mira la documentación de `tick`, donde tienes muchos ejemplos.

en: Sonic Pi's solution to the problem of easily working with global variables in a deterministic way is through a novel system it calls Time State. This might sound complex and difficult (in fact, in the UK, programming with multiple threads and shared memory is typically a university level subject). However, as you'll see, just like playing your first note, *Sonic Pi makes it incredibly simple to share state across threads* whilst still keeping your programs *thread-safe and deterministic*.
es: La solución de Sonic Pi al problema de trabajar fácilmente con variables globales de forma determinista es a través de un novedoso sistema que denomina Time State. Esto puede sonar complejo y difícil (de hecho, en el Reino Unido, programar con múltiples hilos y memoria compartida suele ser una asignatura de nivel universitario). Sin embargo, como verás, al igual que cuando tocas tu primera nota, *Sonic Pi hace que sea increíblemente sencillo compartir el estado entre hilos* sin dejar de mantener tus programas *seguros y deterministas*.

en: 10.1 Set and Get
es: 10.1 Set y Get

en: Set and Get
es: Set y Get

en: the information we want to store,
es: los datos que queremos almacenar,

en: We can use any name for our key. If information has already been stored with that key, our new `set` will override it:
es: Podemos utilizar cualquier nombre para nuestra clave. Si esta clave ya tiene datos almacenados, nuestro nuevo `set` tendrá primacía:

en: print get[:intensity] #=> prints 3000
es: print get[:intensity] #=> imprime 3000

en: The nice thing about using `get` and `set` across threads like this is that it will always produce the same result every time you hit run. Go on, try it. See if you get the following in your log:
es: Lo bueno de usar `get` y `set` entre hilos de esta manera es que siempre va a producir el mismo resultado cada vez que ejecutas el código. Adelante, intentalo. Verás lo siguiente en tu bitácora:

en: Try running it a few times - see, it's the same every time. This is what we call deterministic behaviour and it's really very important when we want to share our music as code and know that the person playing the code is hearing exactly what we wanted them to hear (just like playing an MP3 or internet stream sounds the same for all listeners).
es: Intenta correrlo unas cuantas veces - ¿Lo ves? Es el mismo resultado cada vez. Esto es lo que llamamos comportamiento determinista y es bastante importante cuando compartimos nuesta música como código y saber que la persona que está ejecutando el código está escuchando exactamente lo que quisimos que escuchara (justo como cuando reproducimos un MP3 o una transmisión por internet, todos los oyentes escuchan lo mismo).

en: A Simple Deterministic State System
es: Un Sistema de Estados Determinista Simple

en: Back in Section 5.6 we discussed why using variables across threads can lead to random behaviour. This stops us from being able to reliably reproduce code such as this:
es: Ya en la Sección 5.6 discutimos por qué el uso de variables entre hilos puede conducir a un comportamiento aleatorio. Esto nos impide poder reproducir de manera fiable un código como este:

en: Let's take a look at how this might look using `get` and `set`:
es: Echemos un vistazo a cómo se vería esto usando `get` y` set`:

en: Notice how this code is pretty much identical to the version using a variable before it. However when you run the code, it behaves as you would expect with any typical Sonic Pi code - *it does the same thing every time* in this case thanks to the Time State system.
es: Nota como este código es casi identico a la versión donde se utiliza una variable antes de. Sin embargo cuando corres el código, se comporta como esperarías de cualquier código típico de Sonic Pi -*hace exactamente lo mismo cada vez*- en este caso gracias al sistema de Time State.

en: Therefore, when sharing information across live loops and threads, use `get` and `set` instead of variables for deterministic, reproducible behaviour.
es: Siendo así, cuando compartimos información entre live loops e hilos, es preferible usar `get` y `set` en vez de variables para un comportamiento determinista y reproducible.

en: 10.2 Sync
es: 10.2 Sincronización (Sync)

en: Sync
es: Sincronización (Sync)

en: Section 5.7 introduced the functions `cue` and `sync` when dealing with the issue of synchronising threads. What it didn't explain was that it is the Time State system which provides this functionality. It just so happens that `set` is actually a variation of `cue` and is built on top of the same core functionality which is to insert information into the Time State system. Additionally, `sync` is also designed in such a way that it works seamlessly with Time State - any information that we plan to store in Time State we can sync on. In other words - *we `sync` on events yet to be inserted into Time State*.
es: La sección 5.7 introdujo las funciones `cue` y `sync` para lidiar con el problema de sincronización de hilos. Lo que no explicó fue que es el sistema Time State es quien provee esta funcionalidad. Resulta que `set` es solo una variante de `cue` y está construido sobre la misma funcionalidad base la cual es insertar información en el sistema Time State. Adicionalmente, `sync` tambien está diseñado de tal manera que funcione sin líos con Time State - podemos sincronizarnos conrespecto a cualquier información que planeemos almacenar en Time State. En otras palabras  - *Usamos `sync` sobre eventos prontos a insertarse en Time State*.

en: Waiting for Events
es: Esperando eventos

en: Let's take a quick look at how to use `sync` to wait for new events to be added to Time State:
es: Echemos un vistazo rápido de como usar `sync` para esperar a que nuevos eventos sean agregados a Time State:

en: In this example first we create a thread which waits for a `:foo` event to be added to the Time State. After this thread declaration we sleep for 2 beats and then `set` `:foo` to be `1`. This then releases the `sync` which then moves to the next line which is to trigger the `:ambi_lunar_land` sample.
es: En este ejemplo primero creamos un hilo que espera a que un evento `:foo` sea añadido al Estado de Tiempo. Después de la declaración de este hilo, dormimos durante 2 tiempos y luego `set`-emos `:foo` a `1`. Esto libera el `sync` que pasa a la siguiente línea que es la de activar la muestra `:ambi_lunar_land`.

en: Note that `sync` always waits for *future events* and that it will block the current thread waiting for a new event. Also, it will inherit the logical time of the thread which triggered it via `set` or `cue` so it may also be used to sync time.
es: Ten en cuenta que `sync` siempre espera a *eventos futuros* y que va a bloquear el hilo de ejecución actual mientras espera al nuevo evento. Ademas, va a heredar el tiempo lógico del hilo que lo usó mediante `set` o `cue`de tal manera de que puede ser usado para sincronizar tiempo.

en: Passing values into the Future
es: Pasar valores hacia el futuro

en: In the example above we set `:foo` to `1` which we did nothing with. We can actually get this value from the thread calling `sync`:
es: En el ejemplo anterior hemos puesto `:foo` a `1` con el que no hemos hecho nada. En realidad podemos obtener este valor del hilo que llama a `sync`:

en: When getting and setting information into the Time State, it's possible to use more complex keys than basic symbols such as `:foo` and `:bar`. You can also use URL style strings called paths such as `"/foo/bar/baz"`. Once we start working with paths, we can then start taking advantage of Sonic Pi's sophisticated pattern matching system to `get` and `sync` with 'similar' rather than 'identical' paths. Let's take a look.
es: Al obtener y establecer información en el Estado de Tiempo, es posible utilizar claves más complejas que los símbolos básicos como `:foo` y `:bar`. También se pueden utilizar cadenas de estilo URL llamadas rutas como `"/foo/bar/baz"`. Una vez que empecemos a trabajar con rutas, podemos empezar a aprovechar el sofisticado sistema de concordancia de patrones de Sonic Pi para `get` (obtener) y `sync` (sincronizar) con rutas similares en lugar de idénticas. Echemos un vistazo.

en: However, it wouldn't match the following:
es: Sin embargo, esto no sería igual lo siguiente:

en: You can also place the `*` at the start of the segment to specify the last characters of a segment: `"/foo/*zz/baz"` which will match any 3 segment `cue` or `set` where the first segment is `foo`, the last is `baz` and the middle segment ends with `zz` such as `"cue "/foo/whizz/baz"`.
es: También puede colocar el `*` al principio del segmento para especificar los últimos caracteres de un segmento: `"/foo/*zz/baz"` que coincidirá con cualquier `cue` o `set` de 3 segmentos donde el primer segmento sea `foo`, el último sea `baz` y el segmento del medio termine con `zz` como `"cue "/foo/whizz/baz"`.

en: Matching Nested Path Segments
es: Coincidiendo Segmentos de la Ruta Anidados

en: Matching Single Letters
es: Coincidiendo de a una Letra

en: You can use the `?` character to match against a single char such as `"/?oo/bar/baz"` which will match:
es: Puedes usar el caracter `?` para coincidir un caracter en particular como por ejemplo `"/?oo/bar/baz"` coincidirá con:

en: Matching Multiple Words
es: Coincidiendo Multiples Palabras

en: If you know that a segment may be one of a select number of words, you can use the `{` and `}` matchers to specify a list of choices such as `"/foo/{bar,beans,eggs}/quux"` which will only match the following:
es: Si sabe que un segmento puede ser uno de un número selecto de palabras, puede utilizar los comparadores `{` y `}` para especificar una lista de opciones como `"/foo/{bar,beans,eggs}/quux"` que sólo coincidirá con lo siguiente:

en: Matching Multiple Letters
es: Coincidiendo Multiples Letras

en: Combining Matchers
es: Combinando Algoritmos de Coincidencia

en: OSC Pattern Matching
es: Coincidencia de patrones OSC

en: In order to get information from an external MIDI device into Sonic Pi we first need to connect it to our computer. Typically this will be via a USB connection, although older equipment will have a 5-pin DIN connector for which you'll need hardware support for your computer (for example, some sound cards have MIDI DIN connectors). Once you've connected your device, launch Sonic Pi and take a look at the IO section of the Preferences panel. You should see your device listed there. If not, try hitting the 'Reset MIDI' button and see if it appears. If you're still not seeing anything, the next thing to try is to consult your operating system's MIDI config to see if it sees your device. Failing all that, feel free to ask questions in our friendly forums: https://in-thread.sonic-pi.net
es: Para obtener información de un dispositivo MIDI externo hacia Sonic Pi primero se necesita conectarlo al computador. Usualmente esto será por conexión USB, sin embargo dispositivos más viejos tendrán un conector DIN de 5 pines para los cuales necesitarás hardware adicional del computador para soportar su uso (por ejemplo, algunas tarjetas de sonido usan conectores DIN para MIDI). Una vez conectado el dispositivo, arranca Sonic Pi y observa la sección de IO en el Panel de Preferencias. Deberías ver el dispositivo listado aquí. De lo contrario, intenta con el botón de 'Reiniciar MIDI' y mirar si aparece. Si aún no algo, lo siguiente es intentar consultar la configuración de MIDI de tu sistema operativo y ver si allí aparece. Si todo lo anterior falla, tomate la libertad de preguntar en nuestros amigables foros: https://in-thread.sonic-pi.net

en: Receiving MIDI Events
es: Recibiendo Eventos MIDI

en: Once your device is connected, Sonic Pi will automatically receive events. You can see for yourself by manipulating your MIDI device and looking at the cue logger in the bottom right of the application window below the log (if this isn't visible go to Preferences->Editor->Show & Hide and enable the 'Show cue log' tickbox). You'll see a stream of events such as:
es: Una vez tu dispositivo este conectado, Sonic Pi automaticamente recibirá eventos MIDI. Puedes verlo tú mismo manipulando tu dispositivo MIDI y observando la bitácora cue en la esquina inferior derechade la aplicación, justo abajo del log (si eso no es visible, ve a Preferencias->Editor->Ver & Ocultar y activa caja de 'Mostrar cue log'). Verás una hilera de eventos como estos:

en: These events are broken into two sections. Firstly there's the name of the event such as `/midi:nanokey2_keyboard:0:1/note_on` and secondly there's the values of the event such as `[18, 62]`. Interestingly, these are the two things we need to store information in Time State. *Sonic Pi automatically inserts incoming MIDI events into Time State*. This means you can `get` the latest MIDI value and also `sync` waiting for the next MIDI value using everything we learned in section 10 of this tutorial.
es: Estos eventos se dividen en dos secciones. En primer lugar está el nombre del evento como `/midi:nanokey2_keyboard:0:1/note_on` y en segundo lugar están los valores del evento como `[18, 62]`. Curiosamente, estas son las dos cosas que necesitamos para almacenar la información en Time State. *Sonic Pi inserta automáticamente los eventos MIDI entrantes en Time State*. Esto significa que puedes `get` (obtener) el último valor MIDI y también `sync` para esperar el próximo valor MIDI usando todo lo que aprendimos en la sección 10 de este tutorial.

en: Removing Latency
es: Eliminar la latencia

en: The exciting thing now is that you can now use the same code structures to `sync` and `get` MIDI information from any MIDI device and do whatever you want with the values. You can now choose what your MIDI device will do!
es: Lo mejor es que ahora puedes usar las mismas estructuras de código para `sync` (sincronizar) y `get` (obtener) información MIDI de cualquier dispositivo MIDI y hacer lo que quieras con los valores. ¡Ahora puedes elegir lo que hará tu dispositivo MIDI!

en: By default when Sonic Pi is launched it listens to port 4560 for incoming OSC messages from programs on the same computer. This means that without any configuration, you can send Sonic Pi an OSC message and it will be displayed in the cue log just like incoming MIDI messages. This also means that any incoming OSC message is also automatically added to the Time State which means you can also use `get` and `sync` to work with the incoming data - just like with MIDI and synchronising `live_loops` - see sections 5.7 and 10.2 to recap how this works.
es: Por defecto, cuando Sonic Pi se lanza, escucha el puerto 4560 para los mensajes OSC entrantes de los programas en el mismo ordenador. Esto significa que sin ninguna configuración, puede enviar a Sonic Pi un mensaje OSC y se mostrará en el registro de cue al igual que los mensajes MIDI entrantes. Esto también significa que cualquier mensaje OSC entrante también se añade automáticamente al Time State, lo que significa que también puede utilizar `get` y `sync` para trabajar con los datos entrantes - al igual que con MIDI y la sincronización de `live_loops` - ver las secciones 5.7 y 10.2 para recapitular cómo funciona.

en: Multichannel Audio
es: Audio multicanal

en: Potential Issues
es: Problemas potenciales

en: Now, whilst you're still hearing the audio live from the sound card with reverb, change the code to the following:
es: Ahora, mientras sigues escuchando el audio en directo desde la tarjeta de sonido con reverberación, cambia el código por el siguiente:

en: Stereo input
es: Entrada estéreo

en: Output contexts
es: Contextos de salida

en: A Appendix A - MagPi Articles
es: A Apéndice A - Artículos de MagPi

en: MagPi Articles
es: Artículos de MagPi

en: Appendix A collects all the Sonic Pi articles written for the MagPi magazine.
es: El Apéndice A contiene todos los artículos de Sonic Pi escritos para la revista MagPi.

en: Dive into Topics
es: Bucea por los Temas

en: These articles aren't meant to be read in any strict order and contain a lot of cross-over material from the tutorial itself. Rather than try and teach you all of Sonic Pi, they instead each focus on a specific aspect of Sonic Pi and cover it in a fun and accessible way.
es: Estos artículos no están pensados para ser leídos en un orden concreto, y contienen un montón de referencias a este tutorial. En vez de intentar enseñarte todo Sonic Pi, cada artículo se centra en un aspecto específico del lenguaje, y lo explica de forma divertida y accesible.

en: Read the MagPi
es: Lee la revista MagPi

en: You can see them in their glorious professionally typeset form in the free PDF downloads of The MagPi here: https://www.raspberrypi.org/magpi/
es: Puedes verlos con letras gloriosas y profesionales en la sección de descargas PDF gratuitas de MagPi, aquí: https://www.raspberrypi.org/magpi/

en: Suggest a Topic
es: Sugiere un Tema

en: If you don't see a topic that interests you covered in these articles - why not suggest one? The easiest way to do that is to tweet your suggestion to [@Sonic_Pi](http://twitter.com/sonic_pi). You never know - your suggestion might be the subject of the next article!
es: Si no encuentras un tema que te interese en estos artículos... ¿por qué no lo sugieres? La forma más fácil de hacerlo es que tuitees tus sugerencias a [@Sonic_Pi](http://twitter.com/sonic_pi). Nunca se sabe; ¡tu sugerencia podría ser el tema del próximo artículo!

en: A.1 Tips for Sonic Pi
es: A.1 Consejos para Sonic Pi

en: Five Top Tips
es: Los Cinco Mejores Consejos

en: 1. There are no mistakes
es: 1. No hay errores

en: The most important lesson to learn with Sonic Pi is that there really are no mistakes. The best way to learn is to just try and try and try. Try lots of different things out, stop worrying whether your code sounds good or not and start experimenting with as many different synths, notes, FX and opts as possible. You'll discover a lot of things that make you laugh because they sound just awful and some real gems that sound truly amazing. Simply drop the things you don't like and keep the things you do. The more 'mistakes' you allow yourself to make the quicker you'll learn and discover your personal coding sound.
es: La lección más importante que debes aprender de Sonic Pi es que realmente no hay errores. La mejor forma de aprender es sencillamente probar, probar y probar. Prueba un montón de cosas, deja de preocuparte de si tu código suena bien o no y empieza a experimentar con tantos sintetizadores, notas, FX y opciones como puedas. Quita las cosas que no te gusten y deja las cosas que te gusten, sencilamente. Cuantos más 'errores' te permitas hacer, más rápido aprenderás y descubrirás tu propio sonido al hacer código.

en: 2. Use the FX
es: 2. Usa los FX

en: Say you've already mastered the Sonic Pi basics of making sounds with `sample`, `play`? What's next? Did you know that Sonic Pi supports over 27 studio FX to change the sound of your code? FX are like fancy image filters in drawing programs except that instead of blurring or making something black and white, you can add things like reverb, distortion and echo to your sound. Think of it like sticking the cable from your guitar to an effects pedal of your choice and then into the amplifier. Luckily, Sonic Pi makes using FX really easy and requires no cables! All you need to do is to choose which section of your code you'd like the FX added to and wrap it with the FX code. Let's look at an example. Say you had the following code:
es: ¿Ya has dominado lo esencial de Sonic Pi haciendo sonidos con `sample` y `play`? ¿Y ahora, qué? ¿Sabías que Sonic Pi ofrece hasta 27 efectos FX de estudio para cambiar el sonido de tu código? Los efectos son como filtros imagen chulos para los programas de dibujo, sólo que en vez de difuminar o hacer algo blanco y negro, puedes añadir cosas como reverberación, distorsión y eco a tu sonido. Piensa en lo que haces cuando conectas el cable de tu guitarra con un pedal de efectos que te guste, que a su vez va a un amplificador. Por suerte, usar efectos en Sonic Pi es muy fácil, ¡y no necesitas cables! Sólo necesitas escoger la sección de tu código a la que le quieras añadir el efecto, y envolverla con el código del mismo. Vamos a ver un ejemplo. Imagina que tienes el siguiente código:

en: If you wanted to add FX to the `:loop_garzul` sample, you'd just tuck it inside a `with_fx` block like this:
es: Si quieres añadir el efecto al sample `:loop_garzul`, sólo necesitas meter el bucle en un bloque `with_fx`, así:

en: Now, if you wanted to add FX to the bass drum, go and wrap that with `with_fx` too:
es: Vale, y ahora si quieres añadir el efecto al pedal de la batería, vas y lo envuelves con `with_fx`, exactamente igual:

en: Remember, you can wrap *any* code within `with_fx` and any sounds created will pass through that FX.
es: Recuerda, puedes envolver *cualquier* código en `with_fx` y cualquier sonido que haya creado el código pasará por ese efecto.

en: 3. Parameterise your synths
es: 3. Parametriza tus sintetizadores

en: In order to really discover your coding sound you'll soon want to know how to modify and control synths and FX. For example, you might want to change the duration of a note, add more reverb, or change the time between echoes. Luckily, Sonic Pi gives you an amazing level of control to do exactly this with special things called optional parameters or opts for short. Let's take a quick look. Copy this code into a workspace and hit run:
es: Si estás buscando tu verdadero sonido al hacer código, pronto querrás saber cómo modificar y controlar sintetizadores y efectos. Por ejemplo, puede que quieras cambiar la duración de una nota, añadir más reverberación, o cambiar el tiempo entre ecos. Por suerte, Sonic Pi te da un nivel de control increíble para hacer esto, con unas cosas especiales llamadas parámetros u opciones (abreviado como opts). Copia este código en tu área de trabajo y dale a Ejecutar:

en: Hey, what's that `rate: 0.5` bit I just added at the end? That's called an opt. All of Sonic Pi's synths and FX support them and there's loads to play around with. They're also available for FX too. Try this:
es: Ey, ¿qué es ese `rate: 0.5` que acabo de añadir al final? Eso se llama opción (opt). Todos los sintetizadores y efectos de Sonic Pi soportan los opt's, y hay montones con los que puedes trastear. También están disponibles para efectos. Prueba esto:

en: The best way to quickly experiment and explore Sonic Pi is to live code. This allows you to start off some code and continually change and tweak it whilst it's still playing. For example, if you don't know what the cutoff parameter does to a sample, just play around. Let's have a try! Copy this code into one of your Sonic Pi workspaces:
es: La mejor forma de experimentar rápido y explorar Sonic Pi es hacer código en vivo (live coding). Esto te permite empezar con algo de código e ir cambiándolo continuamente, retocándolo mientras suena. Por ejemplo, si no sabes qué le hace el parámetro cutoff a un sample, empieza a trastear con ello. ¡Vamos a probar! Copia este código en una de tus áreas de trabajo de Sonic Pi:

en: Now, hit run and you'll hear a slightly muffled drum break. Now, change the `cutoff:` value to `80` and hit run again. Can you hear the difference? Try `90`, `100`, `110`...
es: Ahora, dale a Ejecutar y escucharás un break de batería ligeramente amortiguado. Vale, ahora cambia el valor de `cutoff:` a `80` y dale a Ejecutar de nuevo. ¿Escuchas la diferencia? Prueba con `90`, `100`, `110`...

en: Once you get the hang of using `live_loop`s you'll not turn back. Whenever I do a live coding gig I rely on `live_loop` as much as a drummer relies on their sticks. For more information about live coding check out Section 9 of the built-in tutorial.
es: Una vez le has cogido el tranquillo a usar `live_loop`s, verás no puedes dejar de usarlo. Cada vez que toco en un concierto de live coding, confío en mi `live_loop` igual que un/a baterista confía en sus baquetas. Para más información sobre live coding, mira la Sección 9 de el tutorial incluido en el programa.

en: 5. Surf the random streams
es: 5. Navega por flujos aleatorios

en: Finally, one thing I love doing is cheating by getting Sonic Pi to compose things for me. A really great way to do this is using randomisation. It might sound complicated but it really isn't. Let's take a look. Copy this into a spare workspace:
es: Por último, algo que me encanta es hacer trampa dejando a Sonic Pi que componga cosas por mí. Una forma muy chula de hacer esto es usar randomización. Puede sonar complicado, pero en realidad no lo es. Vamos a echarle un vistazo. Copia esto en un área de trabajo vacía:

en: Now, when you play this, you'll hear a constant stream of random notes from the scale `:e2 :minor_pentatonic` played with the `:dsaw` synth. "Wait, wait! That's not a melody", I hear you shout! Well, here's the first part of the magic trick. Every time we go round the `live_loop` we can tell Sonic Pi to reset the random stream to a known point. This is a bit like going back in time in the TARDIS with the Doctor to a particular point in time and space. Let's try it - add the line `use_random_seed 1` to the `live_loop`:
es: Ahora, cuando toques esto, escucharás un flujo constante de notas aleatorias de la escala `:e2 :minor_pentatonic`, tocada con el sintetizador `:dsaw`. "¡Espera, espera! Eso no es una melodía", te oigo decir entre gritos. Pues bien, aquí viene la primera parte del truco de magia. Cada vez que damos una vuelta en el `live_loop`, le podemos decir a Sonic Pi que resetee el flujo aleatorio a un punto que conozcamos. Vamos a probarlo - añade la línea `use_random_seed_1` al `live_loop`:

en: Now, every time the `live_loop` loops around, the random stream is reset. This means it chooses the same 16 notes every time. Hey presto! An instant melody. Now, here's the really exciting bit. Change the seed value from `1` to another number. Say `4923`. Wow! Another melody! So, just by changing one number (the random seed), you can explore as many melodic combinations as you can imagine! Now, that's the magic of code.
es: Ahora, cada vez que el `live_loop` da una vuelta, el flujo de notas aleatorias se resetea. Esto significa que elige las mismas 16 notas cada vez. ¡Abracadabra! Una melodía en el momento. Aquí viene la parte realmente interesante. Cambia el valor de la semilla de `1` a cualquier otro número. Por ejemplo, `4923`. ¡Guau! ¡Otra melodía! O sea, con cambiar un sólo número (la semilla), ¡puedes explorar tantas combinaciones melódicas que te puedas imaginar! He aquí la magia del código.

en: A.2 Live Coding
es: A.2. Live Coding

en: This may sound like a far fetched story from a futuristic night club but coding music like this is a growing trend and is often described as Live Coding (http://toplap.org). One of the recent directions this approach to music making has taken is the Algorave (http://algorave.com) - events where artists like myself code music for people to dance to. However, you don't need to be in a nightclub to Live Code - with Sonic Pi v2.6+ you can do it anywhere you can take your Raspberry Pi and a pair of headphones or some speakers. Once you reach the end of this article, you'll be programming your own beats and modifying them live. Where you go afterwards will only be constrained by your imagination.
es: Esto puede sonar como la disparatada historia de una discoteca futurista, pero escribie música en código como en esta historia es una tendencia cada vez más extendida, y se suele llamar por el nombre de Live Coding (http://toplap.org). Una de las direcciones más recientes que este estilo ha tomado es el Algorave (http://algorave.com) - eventos en los que l@s artistas como yo programamos música para que la gente baile. No obstante, no tienes por qué estar en una discoteca para hacer Live Coding - con Sonic Pi versión 2.6 (y posteriores), puedes hacerlo siempre que tengas a mano tu Raspberry Pi y un par de auriculares o unos altavoces. Una vez llegues al final de este artículo, programarás tus propios beats y sabrás modificarlos en vivo y en directo. A dónde llegues después de esto está en el poder de tu imaginación.

en: Live Loop
es: Bucle en Vivo

en: The key to live coding with Sonic Pi is mastering the `live_loop`. Let's look at one:
es: La clave para hacer live coding con Sonic Pi está en manejar el `live_loop` (bucle en vivo). Vamos a ver uno:

en: Redefining On-the-fly
es: Redefiniendo al vuelo

en: Ok, so what's so special about the `live_loop`? So far it just seems like a glorified `loop`! Well, the beauty of `live_loop`s is that you can redefine them on-the-fly. This means that whilst they're still running, you can change what they do. This is the secret to live coding with Sonic Pi. Let's have a play:
es: Vale, entonces, ¿qué hace al `live_loop` tan especial? ¡Hasta ahora parecía un `loop` glorificado! Pues bien, la belleza de los `live_loop`s está en que puedes redefinirlos sobre la marcha, al vuelo. Esto significa que mientras que éstos se ejecutan, puedes cambiar lo que hacen. Éste es el secreto de hacer live coding con Sonic Pi. Vamos a tocar un poco:

en: Sleeping is important
es: Dormir es importante

en: One of the most important lessons about `live_loop`s is that they need rest. Consider the following `live_loop`:
es: Una de las lecciones más importantes sobre el `live_loop` es que necesitan descansar. Mira el siguiente `live_loop`:

en: If you try running this code, you'll immediately see Sonic Pi complaining that the `live_loop` did not sleep. This is a safety system kicking in! Take a moment to think about what this code is asking the computer to do. That's right, it's asking the computer to play an infinite amount of choir samples in zero time. Without the safety system the poor computer will try and do this and crash and burn in the process. So remember, your `live_loop`s must contain a `sleep`.
es: Si intentas ejecutar este código, verás de inmediato a Sonic Pi quejándose de que el `live_loop` no durmió. ¡Esto es el sistema de seguridad haciendo efecto! Tómate un segundo para pensar en lo que este código le está pidiendo al ordenador que haga. Efectivamente, le está pidiendo al ordenador que toque un número infinito de samples de coro en cero segundos. De no ser por el sistema de seguridad, el pobre ordenador intentará hacerlo y se colgará y arderá en el proceso. Así que recuerda, tu `live_loop` debe contener un `sleep`.

en: Combining Sounds
es: Combinando Sonidos

en: Music is full of things happening at the same time. Drums at the same time as bass at the same time as vocals at the same time as guitars... In computing we call this concurrency and Sonic Pi provides us with an amazingly simple way of playing things at the same time. Simply use more than one `live_loop`!
es: La música está llena de cosas pasando a la vez. La batería a la vez que el bajo a la vez que las voces a la vez que las guitarras... En informática llamamos a esto concurrencia, y Sonic Pi nos ofrece una forma increíblemente fácil de tocar varias cosas a la vez. Sencillamente, ¡usa más de un `live_loop`!

en: One of the interesting things about using multiple `live_loop`s is that they each manage their own time. This means it's really easy to create interesting polyrhythmical structures and even play with phasing Steve Reich style. Check this out:
es: Una de las cosas interesantes que tiene el usar varios `live_loop`s es que cada uno gestiona su propio tiempo. Esto significa que es muy fácil crear estructuras polirrítimicas interesantes, e incluso tocar con fases al estilo de Steve Reich. Échale un ojo a esto:

en: Bringing it all together
es: Juntándolo todo

en: In each of these tutorials, we'll end with a final example in the form of a new piece of music which draws from all of the ideas introduced. Read this code and see if you can imagine what it's doing. Then, copy it into a fresh Sonic Pi buffer and hit Run and actually hear what it sounds like. Finally, change one of the numbers or comment and uncomment things out. See if you can use this as a starting point for a new performance, and most of all have fun! See you next time...
es: En cada uno de estos tutoriales, vamos a acabar con un ejemplo final en forma de una pieza de música, que coge un poco de todas las ideas que hemos ido introduciendo. Lee este código y mira si puedes imaginarte lo que está haciendo. Después, cópialo en un búfer vacío en Sonic Pi, dale a Ejecutar y escucha cómo suena. Finalmente, cambia uno de los números o comenta y descomenta cosas. Mira si puedes utilizar esto como un punto de partida para una nueva actuación, y sobre todo, ¡para pasártelo bien! Hasta la próxima...

en: A.3 Coded Beats
es: A.3. Beats Programados

en: Coded Beats
es: Beats Programados

en: One of the most exciting and disrupting technical developments in modern music was the invention of samplers. These were boxes that allowed you to record any sound into them and then manipulate and play back those sounds in many interesting ways. For example, you could take an old record, find a drum solo (or break), record it into your sampler and then play it back on repeat at half-speed to provide the foundation for your latest beats. This is how early hip-hop music was born and today it's almost impossible to find electronic music that doesn't incorporate samples of some kind. Using samples is a really great way of easily introducing new and interesting elements into your live coded performances.
es: Uno de los desarrollos tecnológicos más emocionantes y disruptivos en la música moderna fue la invención de los samplers. Eran cajas que te permitían grabar cualquier sonido y manipularlo, reproduciendo estos sonidos grabados de distintas formas muy interesantes. Por ejemplo, podías coger una grabación antigua, encontrar un solo de batería (o un break), grabarlo en tu sampler y después reproducirlo en repetición a la mitad de la velocidad, para tener una base para tus beats. Así es como la música hip-hop se creó en sus inicios; hoy en día es casi imposible encontrar música electrónica que no incorpore samples de algún tipo. Usar samples es una forma maravillosa de introducir fácilmente elementos nuevos e interesantes en tus conciertos de live coding.

en: So where can you get a sampler? Well you already have one - it's your Raspberry Pi! The built-in live coding app Sonic Pi has an extremely powerful sampler built into its core. Let's play with it!
es: ¿Y dónde puedes conseguir un sampler? Bueno, ya tienes uno - ¡es tu Raspberry Pi! La aplicación incorporada Sonic Pi incluye un sampler extremadamente potente. ¡Vamos a tocar con él!

en: The Amen Break
es: El Amen Break

en: One of the most classic and recognisable drum break samples is called the Amen Break. It was first performed in 1969 in the song "Amen Brother" by the Winstons as part of a drum break. However, it was when it was discovered by early hip-hop musicians in the 80s and used in samplers that it started being heavily used in a wide variety of other styles such as drum and bass, breakbeat, hardcore techno and breakcore.
es: Uno de los samples de batería más clásicos y reconocibles es el Amen Break. Fue utilizado por primera vez en 1969 en la canción "Amen Brother", de los Winstons, como parte de un break de batería. Sin embargo, no fue conocido hasta que lo descubrieron los primeros músicos de hip-hop de los 80's, quienes lo usaron en samplers; a partir de ahí empezó a usarse muchísimo, y en una gran variedad de estilos como drum and bass, breakbeat, hardcore tecno y breakcore.

en: I'm sure you're excited to hear that it's also built right into Sonic Pi. Clear up a buffer and throw in the following code:
es: Te encantará saber que este sample también está incorporado en Sonic Pi. Limpia un búfer y pega este código:

en: Hit *Run* and boom! You're listening to one of the most influential drum breaks in the history of dance music. However, this sample wasn't famous for being played as a one-shot, it was built for being looped.
es: Dale a *Ejecutar* y ¡boom! Estás escuchando uno de los breaks de batería más importante de la historia de la música dance. No obstante, este sample no era famoso por ser tocado una vez; estaba pensado para ser tocado en bucle.

en: Let's loop the Amen Break by using our old friend the `live_loop` introduced in this tutorial last month:
es: Vamos a poner el Amen Break en bucle usando nuestro viejo amigo, el `live_loop` introducido en este tutorial el último mes:

en: OK, so it is looping, but there's an annoying pause every time round. That is because we asked it to sleep for `2` beats and with the default BPM of 60 the `:loop_amen` sample only lasts for `1.753` beats. We therefore have a silence of `2 - 1.753 = 0.247` beats. Even though it's short, it's still noticeable.
es: Vale, está en bucle, pero a cada vuelta se escucha una molesta pausa. Esto pasa porque le dijimos que durmiese `2` pulsos; con el BPM por defecto de 60 que tiene el sample `:loop_amen`, éste sólo dura `1.753` pulsos. Por eso ponemos un silencio de `2 - 1.753 = 0.247` pulsos. Aunque es un silencio corto, se nota.

en: To fix this issue we can use the `beat_stretch:` opt to ask Sonic Pi to stretch (or shrink) the sample to match the specified number of beats.
es: Para arreglar este problema, podemos usar el opt `beat_stretch:` para decirle a Sonic Pi que estire (stretch) o encoja (shrink) el sample, de modo que éste encaje con el número de beats que queremos.

en: Sonic Pi's `sample` and `synth` fns give you a lot of control via optional parameters such as `amp:`, `cutoff:` and `release:`. However, the term optional parameter is a real mouthful so we just call them *opts* to keep things nice and simple.
es: Las funciones `sample` y `synth` en Sonic Pi te dan mucho control con parámetros opcionales, como `amp:`, `cutoff:` y `release:`. Lo de parámetro opcional suena un poco a trabalenguas, así que vamos a llamarlos *opts* (del inglés *option*, opción) para que sea más fácil.

en: Now we're dancing! Although, perhaps we want to speed it up or slow it down to suit the mood.
es: ¡Ahora sí se puede bailar! Tal vez queramos hacerlo más rápido o más lento, para que encaje con el carácter del baile.

en: Playing with Time
es: Jugando con el Tiempo

en: OK, so what if we want to change styles to old school hip hop or breakcore? One simple way of doing this is to play with time - or in other words mess with the tempo. This is super easy in Sonic Pi - just throw in a `use_bpm` into your live loop:
es: Bueno, ¿y qué pasa si queremos cambiar el estilo a hip hop de la vieja escuela, o a breakcore? Una forma fácil de hacer esto es jugar con el tiempo - o en otras palabras, toquetear el tempo de la canción. Esto es súper fácil en Sonic Pi - sólo necesitas poner un `use_bpm` en tu live loop:

en: Whilst you're rapping over those slow beats, notice that we're still sleeping for 2 and our BPM is 30, yet everything is in time. The `beat_stretch` opt works with the current BPM to make sure everything just works.
es: Mientras rapeas con esos beats lentos, fíjate en que seguimos durmiendo 2 y que nuestro BPM es 30, y aun así todo sigue a tiempo. El opt `beat_stretch` trabaja con el BPM actual para asegurarse de que todo suene bien.

en: Filtering
es: Filtrando

en: Now we can live loop samples, let's look at some of the most fun opts provided by the `sample` synth. First up is `cutoff:` which controls the cutoff filter of the sampler. By default this is disabled but you can easily turn it on:
es: Ahora que podemos poner samples en bucle en directo, vamos a ver uno de los opts más divertidos del sintetizador `sample`. El primero es `cutoff:`, que controla el filtro limitador (cutoff) del sampler. Está desactivado por defecto, pero puedes activarlo fácilmente:

en: Go ahead and change the `cutoff:` opt. For example, increase it to 100, hit *Run* and wait for the loop to cycle round to hear the change in the sound. Notice that low values like 50 sound mellow and bassy and high values like 100 and 120 are more full-sounding and raspy. This is because the `cutoff:` opt will chop out the high frequency parts of the sound just like a lawn-mower chops off the top of the grass. The `cutoff:` opt is like the length setting - determining how much grass is left over.
es: Adelante, cambia el opt `cutoff`. Por ejemplo, súbelo a 100, dale a *Ejecutar* y espera al bucle que dé una vuelta para escuchar el cambio en el sonido. Fíjate en que valores bajos como 50 suenan suaves, como un bajo; valores altos como 100 o 120 son más completos y ásperos. Esto pasa porque la opción `cutoff:` corta las frecuencias altas del sonido, igual que un cortacésped corta la parte de arrriba de la hierba. La opción `cutoff:` es como la longitud del cortacésped: determina cuánta hierba deja sin cortar.

en: Slicing
es: Cortando

en: Another great tool to play with is the slicer FX. This will chop (slice) the sound up. Wrap the `sample` line with the FX code like this:
es: Otra herramienta muy chula que puedes probar es el efecto de corte (slicer). Éste corta (slice) el sonido. Envuelve la línea que dice `sample` con el código del efecto, tal que así:

en: Notice how the sound bounces up and down a little more. (You can hear the original sound without the FX by changing the `mix:` opt to `0`.) Now, try playing around with the `phase:` opt. This is the rate (in beats) of the slicing effect. A smaller value like `0.125` will slice faster and larger values like `0.5` will slice more slowly. Notice that successively halving or doubling the `phase:` opts val tends to always sound good. Finally, change the `wave:` opt to one of 0, 1, or 2 and hear how it changes the sound. These are the various wave shapes. 0 is a saw wave, (hard in, fade out) 1 is a square wave (hard in, hard out) and 2 is a triangle wave (fade in, fade out).
es: Si te das cuenta, el sonido se balancea hacia arriba y hacia abajo un poco más. (Puedes escuchar el sonido original sin el efecto cambiando el opt `mix:` a `0`). Ahora, experimenta con la opción `phase:`. Este controla el ritmo (en pulsos) del efecto de slicing. Un valor más pequeño como `0.125` corta más rápido, y valores grandes como `0.5` cortan más lento. Fíjate en que si doblas o divides por la mitad la opción `phase:` sucesivamente, siempre suena bien. Por último, cambia la opción `wave:` a 0, 1 o 2, y escucha cómo cambia el sonido. Éstos números son distintas formas de onda. 0 es una onda de sierra (inicio duro, salida suave), 1 es una onda cuadrada (inicio duro, salida dura), y 2 es una onda de triángulo (inicio suave, salida suave).

en: Finally, let's go back in time and revisit the early Bristol drum and bass scene with this month's example. Don't worry too much about what all this means, just type it in, hit Run, then start live coding it by changing opt numbers and see where you can take it. Please do share what you create! See you next time...
es: Por último, vamos a volver atrás en el tiempo y a visitar de nuevo la escena drum and bass de Bristol en sus inicios, con el ejemplo de este mes. No te preocupes si no lo entiendes; tú escríbelo, dale a Ejecutar, y empieza a hacer live coding cambiando los números de los opts, a ver a dónde puedes llegar con ello. Por favor, ¡comparte tus creaciones! Hasta la próxima...

en: A.4 Synth Riffs
es: A.4 Riffs con sintetizadores

en: Synth Riffs
es: Riffs con Sintetizadores

en: Whether it's the haunting drift of rumbling oscillators or the detuned punch of saw waves piercing through the mix, the lead synth plays an essential role on any electronic track. In last month's edition of this tutorial series we covered how to code our beats. In this tutorial we'll cover how to code up the three core components of a synth riff - the timbre, melody and rhythm.
es: No importa si es el giro hechizante de los estrepitosos osciladores, o el golpe desafinado de las ondas de sierra perforando el remix; el sintetizador que lleva la melodía (lead synth) tiene un papel muy importante en cualquier canción de música electrónica. En la edición del último mes de esta serie de tutoriales, vimos cómo programar nuestros beats. En este tutorial, vamos a ver cómo programar los tres componentes fundamentales de un buen riff de sintetizador - timbre, melodía y ritmo.

en: OK, so power up your Raspberry Pi, crack open Sonic Pi v2.6+ and let's make some noise!
es: Vale, pues enciende tu Raspberry Pi, abre Sonic Pi v2.6+ y, ¡vamos a hacer ruido!

en: Timbral Possibilities
es: Posibilidades Tímbricas

en: An essential part of any synth riff is changing and playing with the timbre of the sounds. We can control the timbre in Sonic Pi in two ways - choosing different synths for a dramatic change and setting the various synth opts for more subtle modifications. We can also use FX, but that's for another tutorial...
es: Una parte esencial de cualquier riff de sintetizador es cambiar y jugar con el timbre de los sonidos. Podemos controlar el timbre en Sonic Pi de dos formas - eligiendo diferentes sintetizadores para un cambio drástico, y cambiando los opts de un mismo sintetizador para un cambio más suave. También podemos usar efectos, pero eso lo veremos en otro tutorial...

en: Let's create a simple live loop where we continually change the current synth:
es: Vamos a crear un live loop sencillo, donde podamos cambiar constantemente el sintetizador actual:

en: Take a look at the code. We're simply ticking through a ring of synth names (this will cycle through each of these in turn repeating the list over and over). We pass this synth name to the `use_synth` fn (function) which will change the `live_loop`'s current synth. We also play note `:e2` (E at the second octave), with a release time of 0.5 beats (half a second at the default BPM of 60) and with the `cutoff:` opt set to 100.
es: Échale un vistazo al código. Sólo estamos haciendo ticking sobre un anillo de nombres de sintetizador (esto recorre cada uno de ellos y repite la lista una y otra vez). Le pasamos este nombre de sintetizador a la función (abreviada como fn) `use_synth`, que cambia el sintetizador actual del `live_loop`. También estamos tocando la nota `:e2` (Mi en la segunda octava), con una separación de 0.5 pulsos (medio segundo con el BPM de 60 que está por defecto), y con la opción `cutoff:` puesta a 100.

en: Hear how the different synths have very different sounds even though they're all playing the same note. Now experiment and have a play. Change the release time to bigger and smaller values. For example, change the `attack:` and `release:` opts to see how different fade in/out times have a huge impact on the sound. Finally change the `cutoff:` opt to see how different cutoff values also massively influence the timbre (values between 60 and 130 are good). See how many different sounds you can create by just changing a few values. Once you've mastered that, just head to the Synths tab in the Help system for a full list of all the synths and all the available opts each individual synth supports to see just how much power you have under your coding fingertips.
es: Escucha cómo los distintos sintetizadores tienen sonidos muy diferentes, aunque estén tocando la misma nota. Ahora, experimenta y juega con ello. Cambia el tiempo de decaimiento (release) a valores más altos y más bajos. Por ejemplo, cambia las opciones `attack:` y `release:` para ver cómo distintos tiempos de entrada y salida pueden cambiar considerablemente el sonido. Finalmente, cambia el opt `cutoff:` para ver cómo distintos valores de cutoff pueden cambiar notablemente el timbre (con valores entre 60 y 130 está bien). Mira cuántos sonidos distintos puedes crear con sólo cambiar unos pocos valores. Una vez le cojas el tranquillo, ve a la pestaña de Sintetizadores en el sistema de Ayuda si quieres una lista completa de todos los sintetizadores y de todas las opciones disponibles para cada sintetizador, para que veas cuánto poder tienes en tus manos de programador/a.

en: Timbre is just a fancy word describing the sound of a sound. If you play the same note with different instruments such as a violin, guitar, or piano, the pitch (how high or low it sounds) would be the same, but the sound quality would be different. That sound quality - the thing which allows you to tell the difference between a piano and a guitar is the timbre.
es: Timbre es una palabra guay para describir cómo suena un sonido. Si tocas la misma nota con distintos instrumentos como un violín, una guitarra o un piano, la altura (cómo de agudo o grave suena) es la misma en todos ellos, pero la cualidad del sonido cambia. Esa cualidad del sonido - aquello que te permite diferenciar un piano de una guitarra, es el timbre.

en: Melodic Composition
es: Composición Melódica

en: Another important aspect to our lead synth is the choice of notes we want to play. If you already have a good idea, then you can simply create a ring with your notes in and tick through them:
es: Otro aspecto importante para nuestro sintetizador lead son las notas que queremos que toque. Si ya tienes una idea, sólo tienes que crear un anillo con las notas que has pensado, y hacer ticking sobre ellas:

en: Here, we've defined our melody with a ring which includes both notes such as `:e3` and rests represented by `:r`. We're then using `.tick` to cycle through each note to give us a repeating riff.
es: Aquí hemos definido nuestra melodía con un anillo, que incluye notas como `:e3` y silencios representados como un ':r'. Después usamos `.tick` para recorrer cada nota, lo que nos da un riff repetitivo.

en: Auto Melody
es: Melodía Automática

en: It's not always easy to come up with a nice riff from scratch. Instead it's often easier to ask Sonic Pi for a selection of random riffs and to choose the one you like the best. To do that we need to combine three things: rings, randomisation and random seeds. Let's look at an example:
es: No siempre es fácil inventarse una melodía desde cero. Es más fácil pedirle a Sonic Pi una selección de riffs aleatorios y esocoger aquel que te guste más. Para ello tenemos que combinar tres cosas: anillos, aleatoriedad y semillas aleatorias. Veamos un ejemplo:

en: There's a few things going on - let's look at them in turn. First, we specify that we're using random seed 3. What does this mean? Well, the useful thing is that when we set the seed, we can predict what the next random value is going to be - it's the same as it was last time we set the seed to 3! Another useful thing to know is that shuffling a ring of notes works in the same way. In the example above we're essentially asking for the 'third shuffle' in the standard list of shuffles - which is also the same every time as we're always setting the random seed to the same value right before the shuffle. Finally we're just ticking through our shuffled notes to play the riff.
es: Hay varias cosas que tenemos que revisar - vamos a verlas una por una. Primero, estamos usando una semilla aleatoria de 3. ¿Qué significa esto? Bien, hacer esto es muy útil porque, cuando especificamos la semilla, podemos predecir cuál va a ser el siguiente valor aleatorio - ¡igual que la última vez que pusimos la semilla a 3! Otra cosa útil que te viene bien saber, es que desordenar un anillo de notas funciona de la misma forma. En el ejemplo de arriba estamos preguntando por el 'tercer desorden' en la lista estándar de formas de desordenar notas - que también es igual cada vez porque siempre estamos usando la misma semilla para el mismo valor, justo antes de que empecemos a desordenar las notas. Finalmente, estamos haciendo ticking, recorriendo nuestras notas desordenadas para tocar el riff.

en: Now, here's where the fun starts. If we change the random seed value to another number, say 3000, we get an entirely different shuffling of the notes. So now it's extremely easy to explore new melodies. Simply choose the list of notes we want to shuffle (scales are a great starting point) and then choose the seed we want to shuffle with. If we don't like the melody, just change one of those two things and try again. Repeat until you like what you hear!
es: Ahora es cuando empieza la diversión. Si cambiamos el valor de la semilla aleatoria a otro número, como 3000, obtenemos una mezcla de notas totalmente distinta. Así es muy fácil explorar nuevas melodías. Sencillamente, escoge la lista de notas que queremos mezclar (una escala está bien para empezar), y selecciona la semilla con la que queremos mezclarlas. Si no te gusta la melodía, sólo tienes que cambiar las notas o la semilla, y probar de nuevo. ¡Repite hasta que te guste lo que escuchas!

en: Pseudo Randomisation
es: Pseudoaleatoriedad

en: Sonic Pi's randomisation is not actually random it's what's called pseudo random. Imagine if you were to roll a dice 100 times and write down the result of each roll onto a piece of paper. Sonic Pi has the equivalent of this list of results which it uses when you ask for a random value. Instead of rolling an actual dice, it just picks the next value from the list. Setting the random seed is just jumping to a specific point in that list.
es: La aleatoriedad en Sonic Pi no es aleatoria en realidad; es lo que se conoce como pseudoaleatoria. Imagina que tienes que tirar un dado 100 veces y luego escribes los resultados en una hoja de papel. Sonic Pi tiene algo parecido esta lista de resultados, que utiliza cuando le pides un valor aleatorio. Ajustar la semilla aleatoria es como saltar a un punto específico en dicha lista.

en: Finding your Rhythm
es: Encontrando tu Ritmo

en: Another important aspect to our riff is the rhythm - when to play a note and when not to. As we saw above we can use `:r` in our rings to insert rests. Another very powerful way is to use spreads which we'll cover in a future tutorial. Today we'll use randomisation to help us find our rhythm. Instead of playing every note we can use a conditional to play a note with a given probability. Let's take a look:
es: Otro aspecto importante de nuestro riff es el ritmo - cuándo tocar una nota y cuándo no. Como vimos arriba, podemos usar `:r` en nuestros anillos para insertar silencios. Otra forma muy potente de hacer esto es usar extensiones (spreads), que veremos en otro tutorial. Hoy vamos a usar la aleatoriedad para que nos ayude a encontrar nuestro ritmo. En vez de tocar cada nota, vamos a usar una condición para tocar una nota con una determinada probabilidad. Vamos a echarle un vistazo:

en: A really useful fn to know is `one_in` which will give us a `true` or `false` value with the specified probability. Here, we're using a value of 2 so on average one time every two calls to `one_in` it will return `true`. In other words, 50% of the time it will return `true`. Using higher values will make it return `false` more often introducing more space into the riff.
es: Una función muy útil que deberías conocer es `one_in`, que nos devuelve un valor `true` (verdadero) o `false` (falso) con una determinada probabilidad. Vamos a usar un valor de 2, así que, de media, una de cada dos llamadas a `one_in` va a devolver `true`. Dicho de otra forma, el 50% del tiempo vamos a recibir `true`. Usar valores más altos devolverá `false` más a menudo, introduciendo más espacio en el riff.

en: Notice that we've added some iteration in here with `16.times`. This is because we only want to reset our random seed value every 16 notes so our rhythm repeats every 16 times. This doesn't affect the shuffling as that is still done immediately after the seed is set. We can use the iteration size to alter the length of the riff. Try changing the 16 to 8 or even 4 or 3 and see how it affects the rhythm of the riff.
es: Fíjate en que hemos añadido algo de iteración con el `16.times`. Esto es porque sólo queremos resetear el valor de nuestra semilla aleatoria cada 16 notas, de modo que nuestro ritmo se repita cada 16 veces. Esto no afecta a la mezcla, ya que dicha operación se realiza justo después de que se ajuste la semilla. Podemos usar el tamaño de la iteración para cambiar la duración del riff. Prueba a cambiar el 16 a 8, o incluso a 4 o 3, y mira cómo afecta al ritmo del riff.

en: OK, so let's combine everything we've learned together into one final example. See you next time!
es: Vale, ahora vamos a combinar todo lo que hemos aprendido en un ejemplo final. ¡Hasta la próxima!

en: It's impossible to look through the history of electronic dance music without seeing the enormous impact of the tiny Roland TB-303 synthesiser. It's the secret sauce behind the original acid bass sound. Those classic squealing and squelching TB-303 bass riffs can be heard from the early Chicago House scene through to more recent electronic artists such as Plastikman, Squarepusher and Aphex Twin.
es: Es imposible mirar en la historia de la música electrónica dance sin ver el enorme impacto del pequeño sintetizdor Roland TB-303. Es la salsa secreta del sonido de bajo ácido (acid bass). Esos clásicos riffs de bajo chillones del TB-303 se pueden escuchar desde los inicios de la música House en Chicago, hasta en artistas electrónic@s más recientes como Plastikman, Squarepusher y Aphex Twin.

en: Although getting your hands on an original TB-303 is not so easy you will be pleased to know that you can turn your Raspberry Pi into one using the power of Sonic Pi. Behold, fire up Sonic Pi and throw this code into an empty buffer and hit Run:
es: Aunque no es fácil tocar un TB-303 original, te alegrará saber que puedes convertir tu Raspberri Pi en este sintetizador usando el poder de Sonic Pi. Abre Sonic Pi, pon este código en un búfer vacío, dale a Ejecutar y contempla...:

en: Instant acid bass! Let's play around...
es: ¡Acid bass al instante! Vamos a cambiar cosillas...

en: Squelch that Bass
es: Que Chille ese Bajo

en: First, let's build a live arpeggiator to make things fun. In the last tutorial we looked at how riffs can just be a ring of notes that we tick through one after another, repeating when we get to the end. Let's create a live loop that does exactly that:
es: Primero, vamos a construir un arpegiador en directo para hacer las cosas más divertidas. En el último tutorial vimos cómo un riff puede ser sencillamente un anillo de notas sobre las que hacemos tick una tras otra, repitiéndolas cuando llegamos al final. Vamos a crear un live loop que haga justo eso:

en: Take a look at each line.
es: Échale un vistazo a cada línea.

en: On the first line we set the default synth to be `tb303` with the `use_synth` fn.
es: En la primera línea ponemos el sintetizador por defecto como `tb303`, con la función `use_synth`.

en: On line two we create a live loop called `:squelch` which will just loop round and round.
es: En la línea dos creamos un live loop llamado `:squelch` (chillar) que sencillamente da vueltas, vueltas y más vueltas.

en: Line three is where we create our riff - a ring of notes (E in octaves 1, 2, and 3) which we simply tick through with `.tick`. We define `n` to represent the current note in the riff. The equals sign just means to assign the value on the right to the name on the left. This will be different every time round the loop. The first time round, `n` will be set to `:e1`. The second time round it will be `:e2`, followed by `:e3`, and then back to `:e1`, cycling round forever.
es: En la línea tres es donde creamos nuestro riff - un anillo de notas (Mi en las octavas 1, 2 y 3), que recorremos con `.tick`. Definimos `n` para representar la nota actual dentro del riff. El símbolo de igual asigna el valor de la derecha al nombre de la izquierda. Este valor será diferente en cada vuelta del bucle. La primera vez, `n` valdrá `:e1`. La segunda vez valdrá `:e2`, luego `:e3`, y así hasta volver a `:e1`, dando vueltas para siempre.

en: Line four is where we actually trigger our `:tb303` synth. We're passing a few interesting opts here: `release:`, `cutoff:`, `res:` and `wave:` which we'll discuss below.
es: En la línea cuatro es donde realmente usamos nuestro sintetizador `:tb303`. Le estamos pasando varios opts interesantes: `release:`, `cutoff:`, `res:` y `wave:`, que vamos a ver a continuación.

en: Line five is our `sleep` - we're asking the live loop to loop round every `0.125`s or 8 times a second at the default BPM of 60.
es: La línea cinco es nuestro `sleep` - le estamos diciendo al live loop que dé una vuelta cada `0.125`, o 8 veces cada segundo si utilizamos el BPM por defecto (60).

en: Line six is the `end` to the live loop. This just tells Sonic Pi where the end of the live loop is.
es: La línea séis es el `end` (fin) de nuestro live loop. Esto le dice a Sonic Pi dónde acaba el live loop, sencillamente.

en: Whilst you're still figuring out what's going on, type in the code above and hit the Run button. You should hear the `:tb303` kick into action. Now, this is where the action is: let's start live coding.
es: Mientras te preguntas qué está pasando, escribe el código de arriba en Sonic Pi y dale a Ejecutar. Deberías escuchar el `:tb303` en acción. Ahora viene lo bueno: vamos a hacer live coding.

en: Whilst the loop is still live, change the `cutoff:` opt to `110`. Now hit the Run button again. You should hear the sound become a little harsher and more squelchy. Dial in `120` and hit run. Now `130`. Listen how higher cutoff values make it sound more piercing and intense. Finally, drop it down to `80` when you feel like a rest. Then repeat as many times as you want. Don't worry, I'll still be here...
es: Mientras el bucle sigue funcionando, cambia el opt `cutoff:` a `110`. Ahora dale al botón de Ejecutar de nuevo. Deberías escuchar que el sonido se hace un poco más duro y chillón. Cambia de nuevo el `cutoff:` a `120` y dale a Ejecutar. Ahora con `130`. Escucha cómo frecuencias de cutoff más bajas hacen que suene más penetrante e intenso. Finalmente, bájalo a `80`, con lo que sentirás una sensación de respiro. Repite tantas veces como quieras. No te preocupes, yo sigo por aquí...

en: Finally, for a big impact on the timbre try changing the `wave:` opt to `1`. This is the choice of source oscillator. The default is `0` which is a sawtooth wave. `1` is a pulse wave and `2` is a triangle wave.
es: Por último, para un cambio grande en el timbre, modifica el valor de la opción `wave` a `1`. Esta opción selecciona un oscilador inicial. El valor por defecto es `0`, que es una onda de sierra. `1` es una onda de pulso y `2` es una onda triangular.

en: Of course, try different riffs by changing the notes in the ring or even picking notes from scales or chords. Have fun with your first acid bass synth.
es: Por supuesto, prueba con distintos riffs cambiando las notas en el anillo o incluso cogiendo notas de escalas o acordes. Que te diviertas con tu primer sintetizador de acid bass.

en: Deconstructing the TB-303
es: Desmontando el TB-303

en: The design of the original TB-303 is actually pretty simple. As you can see from the following diagram there's only 4 core parts.
es: El diseño del TB-303 original es muy sencillo en realidad. Como puedes ver en el siguiente diagrama, sólo tiene 4 partes básicas.

en: First is the oscillator wave - the raw ingredients of the sound. In this case we have a square wave. Next there's the oscillator's amplitude envelope which controls the amp of the square wave through time. These are accessed in Sonic Pi by the `attack:`, `decay:`, `sustain:` and `release:` opts along with their level counterparts. For more information read Section 2.4 'Duration with Envelopes' in the built-in tutorial. We then pass our enveloped square wave through a resonant low pass filter. This chops off the higher frequencies as well as having that nice resonance effect. Now this is where the fun starts. The cutoff value of this filter is also controlled by its own envelope! This means we have amazing control over the timbre of the sound by playing with both of these envelopes. Let's take a look:
es: En primer lugar tenemos la onda de oscilador - el ingrediente crudo del sonido. En este caso tenemos una onda cuadrada. Después tenemos el envolvente (envelope) de amplitud del oscilador, que controla la amplificación (amp) de la onda cuadrada con el paso del tiempo. Estas opciones se acceden en Sonic Pi con los opts `attack:`, `decay:`, `sustain:` y `release:`, y lo mismo con sus versiones para el volumen. Para más información, lee la sección 2.4, 'Duración con Envolventes' en el tutorial incluido en Sonic Pi. Después del envolvente pasamos nuestra onda cuadrada por un filtro de paso bajo. Aquí es donde empieza la diversión. ¡El valor de cutoff de este filtro también se controla con su propio envolvente! Esto significa que tenemos un nivel de control alucinante sobre el tumbre del sonido con sólo jugar con estos dos envolventes. Echémosle un vistazo:

en: Notice that I've passed everything through a `:reverb` FX for extra atmosphere - try other FX to see what works!
es: Fíjate en que he pasado todo por un efecto `:reverb` para darle un poco más de ambiente - ¡prueba con otros efectos para ver cuál funciona mejor!

en: A.6 Musical Minecraft
es: A.6 Minecraft Musical

en: Musical Minecraft
es: Minecraft Musical

en: Hello and welcome back! In the previous tutorials we've focussed purely on the music possibilities of Sonic Pi - (turning your Raspberry Pi into a performance ready musical instrument). So far we've learned how to:
es: ¡Hola y bienvenid@ de nuevo! En tutoriales anteriores, nos hemos centrado sólamente en las posibilidades musicales de Sonic Pi - (convirtiendo tu Raspberry Pi en un instrumento musical preparado para tu concierto). Hasta ahora hemos aprendido cómo:

en: Live Code - changing the sounds on-the-fly,
es: Hacer Live Coding - cambiar sonidos al vuelo,

en: Code some huge beats,
es: Programar unos beats muy salvajes,

en: Generate powerful synth leads,
es: Generar sintetizadores lead potentes,

en: Re-create the famous TB-303 acid-bass sound.
es: Re-crear el famoso sonido acid bass del TB-303.

en: There's so much more to show you (which we will explore in future editions). However, this month, let's look at something Sonic Pi can do that you probably didn't realise: control Minecraft.
es: Hay mucho más por ver (que exploraremos en futuras ediciones). Sin embargo, este mes vamos a centrarnos en algo que Sonic Pi hace y que de lo que probablemente no te has dado cuenta: controlar Minecraft.

en: Hello Minecraft World
es: Hola Mundo Minecraft

en: OK, let's get started. Boot up your Raspberry Pi, fire up Minecraft Pi and create a new world. Now start up Sonic Pi and re-size and move your windows so you can see both Sonic Pi and Minecraft Pi at the same time.
es: Vale, allá vamos. Enciende tu Raspberry Pi, abre Minecraft Pi y crea un nuevo mundo. Ahora inicia Sonic Pi, y mueve y cambia el tamaño de ambas ventanas, para que puedas ver Sonic Pi y Minecraft Pi al mismo tiempo.

en: In a fresh buffer type the following:
es: Escribe lo siguiente en un búfer vacío:

en: mc_message "Hello Minecraft from Sonic Pi!"
es: mc_message "Hola Minecraft desde Sonic Pi!"

en: Now, hit Run. Boom! Your message appeared in Minecraft! How easy was that? Now, stop reading this for a moment and play about with your own messages. Have fun!
es: Ahora, dale a Ejecutar. ¡Boom! ¡Tu mensaje apareció en Minecraft! ¿A que ha sido fácil? Ahora, deja de leer esto por un momento y prueba a poner tus propios mensajes. ¡Que te diviertas!

en: ![Screen 0](../../../etc/doc/images/tutorial/articles/A.06-minecraft/Musical-Minecraft-0-small.png)
es: ![Pantalla 0](../../../etc/doc/images/tutorial/articles/A.06-minecraft/Musical-Minecraft-0-small.png)

en: Sonic Teleporter
es: Teletransportador Sonoro

en: Now let's do some exploring. The standard option is to reach for the mouse and keyboard and start walking around. That works, but it's pretty slow and boring. It would be far better if we had some sort of teleport machine. Well, thanks to Sonic Pi, we have one. Try this:
es: Ahora vamos a explorar el mundo. La opción estándar es coger el teclado y el ratón y empezar a moverte alrededor. Esto funciona, pero es bastante lento y aburrido. Sería mucho mejor si tuviésemos una especie de máquina de teletransporte. Bueno, tenemos una, gracias a Sonic Pi. Prueba esto:

en: Crikey! That was a long way up. If you weren't in flying-mode then you would have fallen back down all the way to the ground. If you double-tap space to enter flying-mode and teleport again, you'll stay hovering at the location you zap to.
es: ¡Vaya! Eso ha sido una subida. Si no estuvieses en modo vuelo habrías caído toda esa distancia hasta el suelo. Si pulsas dos veces la tecla espacio para entrar en el modo vuelo y teletransportarte de nuevo, te quedarás flotando en el lugar al que has volado a toda pastilla.

en: Now, what do those numbers mean? We have three numbers which describe the coordinates of where in the world we want to go. We give each number a name - x, y and z:
es: ¿Y qué significan esos números? Tenemos tres números que indican las coordenadas del lugar del mundo donde te encuentras. Le damos un nombre a cada número: x, y, z:

en: x - how far left and right (80 in our example)
es: x - cómo de lejos estás a la derecha o a la izquierda (80 en nuestro ejemplo)

en: y - how high we want to be (40 in our example)
es: y - cómo de alto queremos estar (40 en nuestro ejemplo)

en: z - how far forward and back (100 in our example)
es: z - cómo de lejos hacia delante o hacia atrás (100 en nuestro ejemplo)

en: By choosing different values for x, y and z we can teleport *anywhere* in our world. Try it! Choose different numbers and see where you can end up. If the screen goes black it's because you've teleported yourself under the ground or into a mountain. Just choose a higher y value to get back out above land. Keep on exploring until you find somewhere you like...
es: Al escoger distintos valores de x, y y z, podemos teletransportarnos *a cualquier lugar* en nuestro mundo. ¡Pruébalo! Escoge distintos números y mira dónde puedes acabar. Si la pantalla se vuelve negra es porque te has teletransportado debajo del suelo o dentro de una montaña. Sencillamente pon un valor más alto de y, para volver a estar por encima de la tierra. Sigue explorando hasta que encuentres algo que te guste...

en: Using the ideas so far, let's build a Sonic Teleporter which makes a fun teleport sound whilst it whizzes us across the Minecraft world:
es: Usando estas ideas, vamos a construir un Teletransportador Sonoro que haga un sonido de teletransporte divertido mientras nos hace pasar zumbando por el mundo de Minecraft:

en: ![Screen 1](../../../etc/doc/images/tutorial/articles/A.06-minecraft/Musical-Minecraft-1-small.png)
es: ![Pantalla 1](../../../etc/doc/images/tutorial/articles/A.06-minecraft/Musical-Minecraft-1-small.png)

en: Magic Blocks
es: Bloques Mágicos

en: Now you've found a nice spot, let's start building. You could do what you're used to and start clicking the mouse furiously to place blocks under the cursor. Or you could use the magic of Sonic Pi. Try this:
es: Ahora que has encontrado un sitio que te guste, ¡empecemos a construir!. Podrías hacer lo que sueles hacer y empezar a hacer click con el ratón una y otra vez (furiosamente) para poner bloques debajo del cursor. O podrías usar la magia de Sonic Pi. Prueba esto:

en: Now look up! There's a melon in the sky! Take a moment to look at the code. What did we do? On line one we grabbed the current location of Steve as the variables x, y and z. These correspond to our coordinates described above. We use these coordinates in the fn `mc_set_block` which will place the block of your choosing at the specified coordinates. In order to make something higher up in the sky we just need to increase the y value which is why we add 5 to it. Let's make a long trail of them:
es: ¿Lo ves? ¡Hay un melón en el cielo! Tómate un momento para mirar el código. ¿Qué hemos hecho? En la línea uno, hemos cogido nuestra localización actual de Steve con las variables x, y, z. Éstas corresponden a nuestras coordenadas descritas anteriormente. Usamos esas coordenadas en la función `mc_set_block`, que deja el bloque que queramos en las coordenadas especificadas. Para hacer algo más alto en el cielo, sólo tenemos que subir el valor de y, que es el motivo por el cual le hemos añadido 5. Vamos a hacer una tira de melones:

en: Now, jump over to Minecraft, make sure you're in flying-mode (double tap space if not) and fly all around the world. Look behind you to see a pretty trail of melon blocks! See what kind of twisty patterns you can make in the sky.
es: Ahora, vuelve a Minecraft, asegúrate de que estás en modo vuelo (si no, pulsa la tecla espacio dos veces), y vuelva por el mundo. Mira detrás tuya para ver... ¡una preciosa tira de bloques de melón! A ver qué patrones puedes hacer en el cielo.

en: Live Coding Minecraft
es: Haciendo Live Coding con Minecraft

en: Those of you that have been following this tutorial over the last few months will probably have your minds blown at this point. The trail of melons is pretty cool, but the most exciting part of the previous example is that you can use `live_loop` with Minecraft! For those that don't know, `live_loop` is Sonic Pi's special magic ability that no other programming language has. It lets you run multiple loops at the same time and allows you to change them whilst they run. They are incredibly powerful and amazing fun. I use `live_loop`s to perform music in nightclubs with Sonic Pi - DJs use discs and I use `live_loop`s :-) However, today we're going to live code both music and Minecraft.
es: Aquell@s que hayáis seguido este tutorial durante los últimos meses estaréis flipando en colores. La tira de melones está muy chula, pero la parte más increíble de este ejemplo es que ¡podéis usar `live_loop` con Minecraft! Para quienes no lo sepáis, `live_loop` es una habilidad mágica de Sonic Pi que no tiene ningún otro lenguaje de programación. Te permite ejecutar varios bucles al mismo tiempo y cambiarlos mientras tanto. Son increíblemente potentes y divertidos. Yo uso los `live_loop`s para dar conciertos de música en discotecas con Sonic Pi - los DJs usan discos y yo uso `live_loop`s :-) Sin embargo, hoy vamos a hacer live coding con música y con Minecraft.

en: Let's get started. Run the code above and start making your melon trail again. Now, without stopping the code, just simply change `:melon` to `:brick` and hit run. Hey presto, you're now making a brick trail. How simple was that! Fancy some music to go with it? Easy. Try this:
es: Empecemos. Ejecuta el código de arriba y empieza a hacer tu propia tira de melones de nuevo. Ahora, sin parar el código, cambia `:melon` por `:brick` y dale a Ejecutar. ¡Abracadabra!, estás haciendo una tira de ladrillos. ¡A que es fácil! ¿Y si le ponemos música chula de fondo? Pan comido. Prueba esto:

en: Now, whilst that's playing start changing the code. Change the block types - try `:water`, `:grass` or your favourite block type. Also, try changing the cutoff value from `70` to `80` and then up to `100`. Isn't this fun?
es: Ahora, mientras suena, empieza a cambiar el código. Cambia los tipos de bloques - prueba `:water`, `:grass` o tu tipo de bloque favorito. Prueba también a cambiar el valor de cutoff de `70` a `80` y así hasta `100`. ¿Divertido, eh?

en: ![Screen 2](../../../etc/doc/images/tutorial/articles/A.06-minecraft/Musical-Minecraft-2-small.png)
es: ![Pantalla 2](../../../etc/doc/images/tutorial/articles/A.06-minecraft/Musical-Minecraft-2-small.png)

en: Let's combine everything we've seen so far with a little extra magic. Let's combine our teleportation ability with block placing and music to make a Minecraft Music Video. Don't worry if you don't understand it all, just type it in and have a play by changing some of the values whilst it's running live. Have fun and see you next time...
es: Vamos a combinar todo lo que hemos visto hasta ahora con un poco de magia extra. Vamos a combinar nuestra habilidad de teletransporte con moviminto de bloques y música, para crear un Videoclip de Minecraft. No te preocupes si no lo entiendes todo, tú dale y prueba a cambiar algunos valores mientras se ejecuta. Pásatelo bien y hasta la próxima...

en: After our brief excursion to the fantastic world of coding Minecraft with Sonic Pi last month, let's get musical again. Today we're going to bring a classical operatic dance piece straight into the 21st century using the awesome power of code.
es: Tras nuestra pequeña excursión por el mundo fantástico de Minecraft programando con Sonic Pi este último mes, vamos a hacer música de nuevo. Hoy vamos a traer una pieza ópera clásica al siglo 21, usando el poder alucinante de la programación.

en: Outrageous and Disruptive
es: Atroz y Disruptivo

en: Let's jump into a time machine back to the year 1875. A composer called Bizet had just finished his latest opera Carmen. Unfortunately like many exciting and disruptive new pieces of music people initially didn't like it at all because it was too outrageous and different. Sadly Bizet died ten years before the opera gained huge international success and became one of the most famous and frequently performed operas of all time. In sympathy with this tragedy let's take one of the main themes from Carmen and convert it to a modern format of music that is also too outrageous and different for most people in our time - live coded music!
es: Viajemos atrás en el tiempo, al año 1875. Un compositor llamado Bizet ha acabado su última ópera, Carmen. Por desgracia, como ocurre con las piezas de música más disruptivas, no le gustó a la gente porque era demasiado expererimental y diferente. Tristemente, Bizet murió diez años antes de que la ópera se hiciese conocida internacionalmente y se convirtiese en una de las óperas más famosas y más tocadas de todos los tiempos. En un acto de simpatía con este genio y su tragedia, vamos a coger uno de los temas principales de Carmen y a convertirlo a un formato moderno de música que también es muy atroz y diferente para la mayoría de la gente de nuestra época - ¡la música con live coding!

en: Decoding the Habanera
es: Descifrando la Habanera

en: Trying to live code the whole opera would be a bit of a challenge for this tutorial, so let's focus on one of the most famous parts - the bass line to the Habanera:
es: Intentar hacer live coding con la ópera entera sería todo un desafío para este tutorial, así que vamos a centrarnos en una de las partes más conocidas - la línea de bajo de la Habanera:

en: ![Habanera Riff](../../../etc/doc/images/tutorial/articles/A.07-bizet/habanera.png)
es: ![Riff Habanera](../../../etc/doc/images/tutorial/articles/A.07-bizet/habanera.png)

en: This may look extremely unreadable to you if you haven't yet studied music notation. However, as programmers we see music notation as just another form of code - only it represents instructions to a musician instead of a computer. We therefore need to figure out a way of decoding it.
es: Esto te puede parecer extremadamente ilegible si nunca has estudiado notación musical. No obstante, l@s programador@s vemos la notación musical como otra forma de código - sólo representa instrucciones para un/a músic@ en vez de un ordenador. Por tanto necesitamos encontrar una forma de descifrarlo.

en: Notes
es: Notas

en: The notes are arranged from left to right like the words in this magazine but also have different heights. *The height on the score represents the pitch of the note.* The higher the note on the score, the higher the pitch of the note.
es: Las notas están colocadas de izquierda a derecha como las palabras en esta revista, pero tienen distintas alturas. *La altura en la partitura representa la altura de la nota*. Cuanto más alta sea la nota en la partitura, mayor será la altura de la nota.

en: In Sonic Pi we already know how to change the pitch of a note - we either use high or low numbers such as `play 75` and `play 80` or we use the note names: `play :E` and `play :F`. Luckily each of the vertical positions of the musical score represents a specific note name. Take a look at this handy look up table:
es: En Sonic Pi ya sabemos cómo cambiar la altura de una nota - usamos números más o menos altos como `play 75` y `play 80`, o usamos los nombres de las notas: `play :E` y `play :F`. Por suerte, cada una de las posiciones verticales de la partitura representa el nombre de una nota específica. Échale un vistazo a esta tabla, es bastante útil:

en: ![Notes](../../../etc/doc/images/tutorial/articles/A.07-bizet/notes.png)
es: ![Notas](../../../etc/doc/images/tutorial/articles/A.07-bizet/notes.png)

en: Rests
es: Silencios

en: Music scores are an extremely rich and expressive kind of code capable of communicating many things. It therefore shouldn't come as much of a surprise that musical scores can not only tell you what notes to play but also when *not* to play notes. In programming this is pretty much equivalent to the idea of `nil` or `null` - the absence of a value. In other words not playing a note is like the absence of a note.
es: Las partituras musicales son un tipo de código extremadamente rico y expresivo capaz de comunicar muchas cosas. Por tanto, no debería sorprenderte que las partituras no sólo te muestran cuándo tocar notas, sino también cuándo *no* tocarlas. En programación, esto es bastante parecido al concepto de `nil` o `null` - la ausencia de valor. En otras palabras, no tocar una nota es como la ausencia de una nota.

en: If you look closely at the score you'll see that it's actually a combination of black dots with lines which represent notes to play and squiggly things which represent the rests. Luckily Sonic Pi has a very handy representation for a rest: `:r`, so if we run: `play :r` it actually plays silence! We could also write `play :rest`, `play nil` or `play false` which are all equivalent ways of representing rests.
es: Si has mirado de cerca la partitura, verás que en realidad es una combinación de puntos negros, con líneas que representan las notas a tocar, y con cosas con forma de garrapata que representan silencios. Afortunadamente, Sonic Pi tiene una representación muy útil para el silencio: `:r`, así que si ejecutamos: `play :r`, en realidad, ¡está tocando silencio! También podríamos escribir `play :rest`, `play nil` o `play false`, que son formas equivalentes de representar silencios.

en: Rhythm
es: Ritmo

en: Finally, there's one last thing to learn how to decode in the notation - the timings of the notes. In the original notation you'll see that the notes are connected with thick lines called beams. The second note has two of these beams which means it lasts for a 16th of a beat. The other notes have a single beam which means they last for an 8th of a beat. The rest has two squiggly beams which means it also represents a 16th of the beat.
es: Finalmente, hay una última cosa que debemos aprender para descifrar la notación - los ritmos de las notas. En la notación original puedes ver que las notas están conectadas con líneas gruesas, llamadas barras. La segunda nota tiene dos de estas barras, que significa que dura la dieciseisava parte de un compás (lo que se llama beat en Sonic Pi). Las otras notas tienen una sola barra, que significa que duran la octava parte de un compás. El silencio tiene dos barras con forma de garrapata, que significa que también representa un dieciseisavo de un compás.

en: When we attempt to decode and explore new things a very handy trick is to make everything as similar as possible to try and see any relationships or patterns. For example, when we re-write our notation purely in 16ths you can see that our notation just turns into a nice sequence of notes and rests.
es: Cuando intentamos descifrar y explorar cosas nuevas, un truco muy útil es hacer todo lo más parecido posible, y buscar relaciones o patrones comunes. Por ejemplo, cuando reescribimos nuestra notación sólo con semicorcheas, vemos una secuencia muy sencilla de notas y silencios.

en: ![Habanera Riff 2](../../../etc/doc/images/tutorial/articles/A.07-bizet/habanera2.png)
es: ![Riff Habanera 2](../../../etc/doc/images/tutorial/articles/A.07-bizet/habanera2.png)

en: Re-coding the Habanera
es: Re-programando la Habanera

en: We're now in a position to start translating this bass line to Sonic Pi. Let's encode these notes and rests in a ring:
es: Ahora podemos empezar a traducir esta línea de bajo en Sonic Pi. Vamos a codificar estas notas y silencios en un anillo:

en: Let's see what this sounds like. Throw it in a live loop and tick through it:
es: Veamos cómo suena. Ponlo en un live loop y haz tick sobre el mismo:

en: Fabulous, that instantly recognisable riff springs to life through your speakers. It took a lot of effort to get here, but it was worth it - high five!
es: ¡Fabuloso! La famosa melodía cobra vida a través de tus altavoces. Costó un poquitín llegar hasta aquí, pero ha merecido la pena - ¡choca los cinco!

en: Moody Synths
es: Sintetizadores Enfadados

en: Now we have the bass line, let's re-create some of the ambience of the operatic scene. One synth to try out is `:blade` which is a moody 80s style synth lead. Let's try it with the starting note `:d` passed through a slicer and reverb:
es: Ahora que tenemos la línea de bajo, vamos a recrear parte de la atmósfera de esta escena de ópera. Un sintetizador que podríamos probar es `:blade`, que es un sintetizador lead con tono enfadado de los 80s. Vamos a probarlo con la nota inicial `:d`, que vamos a pasar por un slicer y un efecto de reverberación:

en: Now, try the other notes in the bass line: `:a` and `:f5`. Remember, you don't need to hit stop, just modify the code whilst the music is playing and hit run again. Also, try different values for the slicer's `phase:` opt such as `0.5`, `0.75` and `1`.
es: Ahora, prueba con otras notas en la línea de bajo: `:a` y `:f5`. Recuerda, no tienes por qué parar, puedes modificar el código mientras suena la música y darle a Ejecutar de nuevo. Además, puedes probar distintos valores para el opt `phase:` del slicer, como `0.5`, `0.75` y `1`.

en: Finally, let's combine all the ideas so far into a new remix of the Habanera. You might notice that I've included another part of the bass line as a comment. Once you've typed it all into a fresh buffer hit Run to hear the composition. Now, without hitting stop, *uncomment* the second line by removing the `#` and hit run again - how marvellous is that! Now, start mashing it around yourself and have fun.
es: Finalmente, vamos a combinar todas las ideas que hemos visto hasta ahora en un nuevo remix de la Habanera. Habrás visto que he incluido otra parte de la línea de bajo como comentario. Una vez hayas escrito todo en un búfer vacío, dale a Ejecutar para escuchar la composición. Ahora, sin parar el progama, *descomenta* la segunda línea borrando el `#` y dándole a Ejecutar de nuevo - ¿a que suena genial? Ahora, empieza a mezclarlo tú mism@ y diviértete.

en: A.8 Become a Minecraft VJ
es: A.8 Conviértete en un VJ de Minecraft

en: Become a Minecraft VJ
es: Conviértete en un VJ de Minecraft

en: ![Screen 0](../../../etc/doc/images/tutorial/articles/A.08-minecraft-vj/minecraft-vj-0-small.png)
es: ![Pantalla 0](../../../etc/doc/images/tutorial/articles/A.08-minecraft-vj/minecraft-vj-0-small.png)

en: Everyone has played Minecraft. You will all have built amazing structures, designed cunning traps and even created elaborate cart lines controlled by redstone switches. How many of you have performed with Minecraft? We bet you didn't know that you could use Minecraft to create amazing visuals just like a professional VJ.
es: Todo el mundo ha jugado a Minecraft. Seguro que tod@s vosotr@s habéis construido estructuras increíbles, habéis diseñado trampas ingeniosas, e incluso habéis creado complejas líneas de carros con interruptores de roca roja. ¿Cuánt@s habéis hecho una actuación con Minecraft? Apuesto a que no sabíais que se puede usar Minecraft para crear efectos visuales alucinantes, como un/a VJ profesional.

en: If your only way of modifying Minecraft was with the mouse, you'd have a tough time changing things fast enough. Luckily for you your Raspberry Pi comes with a version of Minecraft that can be controlled with code. It also comes with an app called Sonic Pi which makes coding Minecraft not only easy but also incredibly fun.
es: Si tu única forma de cambiar Minecraft era con el ratón, te habrá costado cambiar cosas rápidamente. Por suerte, Raspberry Pi contiene una versión de Minecraft que se puede controlar con código. También tiene una app llamada Sonic Pi que no sólo hace fácil programar Minecraft, sino que lo hace increíblemente divertido.

en: In today's article we'll be showing you some of the tips and tricks that we've used to create performances in night clubs and music venues around the world.
es: En el artículo de hoy, vamos a enseñarte algunos consejos y trucos que hemos usado para dar conciertos en discotecas y escenarios por todo el mundo.

en: Let's get started...
es: Empecemos...

en: Getting Started
es: Manos a la Obra

en: Let's start with a simple warm up exercise to refresh ourselves with the basics. First up, crack open your Raspberry Pi and then fire up both Minecraft and Sonic Pi. In Minecraft, create a new world, and in Sonic Pi choose a fresh buffer and write in this code:
es: Vamos a empezar con un ejercicio fácil de calentamiento, para refrescar los conceptos básicos. Primero, enciende tu Raspberry Pi e inicia Minecraft y Sonic Pi. En Minecraft, crea un nuevo mundo, y en Sonic Pi, escoge un búfer vacío y escribe este código:

en: mc_message "Let's get started..."
es: mc_message "Comencemos..."

en: Hit the Run button and you'll see the message over in the Minecraft window. OK, we're ready to start, let's have some fun......
es: Dale al botón de Ejecutar y verás el mensaje en la ventana de Minecraft. Vale, ya estamos en marcha, ahora vamos a divertirnos...

en: Sand Storms
es: Tormentas de Arena

en: When we're using Minecraft to create visuals we try and think about what will both look interesting and also be easy to generate from code. One nice trick is to create a sand storm by dropping sand blocks from the sky. For that all we need are a few basic fns:
es: Cuando usamos Minecraft para crear efectos visuales, intentamos pensar en algo que sea interesante y que al mismo tiempo sea fácil de generar con código. Un truco muy chulo es crear una tormenta de arena, dejando caer bloques de arena del cielo. Para ello necesitamos algunas funciones básicas:

en: `sleep` - for inserting a delay between actions
es: `sleep` - para insertar una pausa entre acciones

en: `mc_location` - to find our current location
es: `mc_location` - para conocer nuestra posición actual

en: `mc_set_block`- to place sand blocks at a specific location
es: `mc_set_block` - para colocar bloques de arena en un sitio en concreto

en: `rrand` - to allow us to generate random values within a range
es: `rrand` - para generar valores aleatorios dentro de un rango

en: `live_loop` - to allow us to continually make it rain sand
es: `live_loop` - para hacer que llueva arena constantemente

en: Let's make it rain a little first before unleashing the full power of the storm. Grab your current location and use it to create a few sand blocks up in the sky nearby:
es: Vamos a hacer que llueva un poco antes de desatar completamente el poder de la tormenta. Mira tu posición actual y úsala para crear unos cuantos bloques de arena en el cielo, cerca de ti:

en: When you hit Run, you might have to look around a little as the blocks may start falling down behind you depending on which direction you're currently facing. Don't worry, if you missed them just hit Run again for another batch of sand rain - just make sure you're looking the right way!
es: Cuando le des a Ejecutar, puedes mirar a tu alrededor, ya que los bloques pueden empezar a caer detrás tuya, dependiendo de a dónde estés mirando ahora mismo. No te preocupes; si no los has llegado a ver, sólo tienes que darle a Ejecutar de nuevo para tener otra ronda de lluvia de arena - ¡asegúrate de que miras en la dirección adecuada!

en: Let's quickly review what's going on here. On the first line we grabbed Steve's location as coordinates with the fn `mc_location` and placed them into the vars `x`, `y`, and `z`. Then on the next lines we used the `mc_set_block` fn to place some sand at the same coordinates as Steve but with some modifications. We chose the same x coordinate, a y coordinate 20 blocks higher and then successively larger z coordinates so the sand dropped in a line away from Steve.
es: Vamos a hacer un repaso rápido lo que está pasando. En la primera línea hemos usado la posición de Steve en coordenadas con la función `mc_location`, y las hemos puesto en las variables `x`, `y` y `z`. En las siguientes líneas hemos usado la función `mc_set_block` para colocar unos cuantos bloques de arena en las mismas coordenadas que Steve, pero con algunas modificaciones. Escogimos la misma coordenada x, una coordenada y 20 bloques más alta, y coordenadas z cada vez más grandes, para que la arena caiga en una línea que se aleja de Steve.

en: Why don't you take that code and start playing around with it yourself? Try adding more lines, changing the sleep times, try mixing `:sand` with `:gravel` and choose different coordinates. Just experiment and have fun!
es: ¿Por qué no coges el código y empiezas a trastear tú mism@? Prueba a añadir más líneas, cambia las pausas, mezcla `:sand` con `:gravel` (gravilla), y escoge distintas coordenadas. ¡Experimenta y diviértete!

en: Live Loops Unleashed
es: Live Loops Desatados

en: OK, it's time to get the storm raging by unleashing the full power of the `live_loop` - Sonic Pi's magical ability which unleashes the full power of live coding - changing code on-the-fly whilst it's running!
es: Vale, es hora de tener la ira de la tormenta... Para ello vamos a desatar todo el poder del `live_loop`, la habilidad mágica de Soni Pi que desencadena el verdadero poder del live coding - ¡cambiar el código al vuelo mientras se ejecuta!

en: What fun! We're looping round pretty quickly (8 times a second) and during each loop we're finding Steve's location like before but then generating 3 random values:
es: ¡A que mola! Estamos dando vueltas muy rápido (8 veces por segundo), y en cada segundo estamos encontrando la posición de Steve igual que antes, pero después generamos 3 valores aleatorios:

en: `xd` - the difference for x which will be between -10 and 10
es: `xd` - la diferencia de x, entre -10 y 10

en: `zd` - the difference for z also between -10 and 10
es: `zd` - la diferencia de z, también entre -10 y 10

en: `co` - a cutoff value for the low pass filter between 70 and 130
es: `co` - un valor de cutoff para el filtro de paso bajo, entre 70 y 130

en: We then use those random values in the fns `synth` and `mc_set_block` giving us sand falling in random locations around Steve along with a percussive rain-like sound from the `:cnoise` synth.
es: Después usamos esos valores aleatorios en las funciones `synth` y `mc_set_block`, con lo que tenemos arena cayendo en posiciones aleatorias alrededor de Steve, al mismo tiempo que se oye un sonido percusivo de lluvia, que viene del sintetizador `:cnoise`.

en: For those of you new to live loops - this is where the fun really starts with Sonic Pi. Whilst the code is running and the sand is pouring down, try changing one of the values, perhaps the sleep time to `0.25` or the `:sand` block type to `:gravel`. Now hit run *again*. Hey Presto! Things changed without the code stopping. This is your gateway to performing like a real VJ. Keep practising and changing things around. How different can you make the visuals without stopping the code?
es: Para aquell@s que no conozcáis los live loops, son la parte donde empieza la diversión en Sonic Pi. Mientras el código se ejecuta y diluvia la arena, prueba a cambiar uno de los valores, tal vez el tiempo de pausa (sleep) a `0.25`, o el tipo de bloque de `:sand` a `:gravel` (gravilla). Ahora dale a Ejecutar *de nuevo*. ¡Abracadabra! Las cosas han cambiado sin tener que parar el código. Esto te abre las puertas a actuar como un/a verdader@ VJ. Sigue practicando y cambiando cosas. ¿De cuántas formas puedes cambiar los efectos visuales sin parar el código?

en: Epic Block Patterns
es: Patrones de Bloques Épicos

en: Finally, another great way of generating interesting visuals is to generate huge patterned walls to fly towards and close by. For this effect we'll need to move from placing the blocks randomly to placing them in an ordered manner. We can do this by nesting two sets of iteration (hit the Help button and navigate to section 5.2 of the tutorial "Iteration and Loops" for more background on iteration). The funny `|xd|` after the do means that `xd` will be set for each value of the iteration. So the first time it will be 0, then 1, then 2... etc. By nesting two lots of iteration together like this we can generate all the coordinates for a square. We can then randomly choose block types from a ring of blocks for an interesting effect:
es: Finalmente, otra forma excelente de generar efectos visuales interesantes es crear paredes con patrones, y volar alrededor para verlas de cerca. Para este efecto, necesitamos pasar de colocar los bloques aleatoriamente a colocarlos de forma ordenada. Podemos hacer esto anidando dos iteraciones (dale al botón de Ejecutar y navega por la sección 5.2 del tutorial "Iteración y Bucles" para tener más información sobre las iteraciones). El divertido `|xd|` después del `do` significa que `xd` va a cambiar en cada iteración. La primera vez será 0, luego 1, luego 2... etc. Al anidar dos bloques de iteración juntos como hemos hecho, podemos generar las coordenadas de un cuadrado. Después podemos escoger tipos de bloques aleatoriamente, con un anillo de bloques, para obtener un efecto interesante:

en: Pretty neat. Whilst we're having fun here, try changing `bs.choose` to `bs.tick` to move from a random pattern to a more regular one. Try changing the block types and the more adventurous of you might want to try sticking this within a `live_loop` so that the patterns keep changing automatically.
es: ¡Genial! Mientras nos lo pasamos pipa por aquí, prueba a cambiar `bs.choose` a `bs.tick` para pasar de un patrón aleatorio a uno más regular. Prueba a cambiar los tipos de bloque. Para l@s más atrevid@s, podéis probar a meter este cambio en un `live_loop`, para que los patrones sigan cambiando automáticamente.

en: Now, for the VJ finale - change the two `10.times` to `100.times` and hit Run. Kaboom! A Huge gigantic wall of randomly placed bricks. Imagine how long it would take you to build that manually with your mouse! Double-tap space to enter fly-mode and start swooping by for some great visual effects. Don't stop here though - use your imagination to conjure up some cool ideas and then use the coding power of Sonic Pi to make it real. When you've practised enough dim the lights and put on a VJ show for your friends!
es: Y para el final apoteósico - cambia los dos `10.times` a `100.times` y dale a Ejecutar. ¡Kaboom! Una pared ENORME con bloques puestos aleatoriamente. ¡Imagina cuánto tiempo te habría llevado construirlo a mano con el ratón! Pulsa la tecla Espacio dos veces para activar el modo vuelo, y baja en picado para ver efectos visuales alucinantes. No pares todavía - usa tu imaginación para darle rienda suelta a tus ideas, y usa el poder de Sonic Pi para hacerlas realidad. Cuando hayas practicado, apaga las luces y ¡muéstrale tu show de VJ a tus amig@s!

en: A.9 Randomisation
es: A.9 Randomización

en: Surfing Random Streams
es: Navegando por Flujos Aleatorios

en: Back in episode 4 of this tutorial series we took a brief look at randomisation whilst coding up some sizzling synth riffs. Given that randomisation is such an important part of my live coding DJ sets I thought it would be useful to cover the fundamentals in much greater detail. So, get your lucky hat on and let's surf some random streams!
es: En el episodio 4 de esta serie de tutoriales, vimos brevemente la aleatoriedad al programar unos chispeantes riffs de sintertizador. Ya que la aleatoriedad es una parte tan importante de mis conciertos de live coding, pensé que sería útil enseñarte los fundamentos en mayor detalle. Así pues, vamos manos a la obra, ¡a navegar por los flujos aleatorios!

en: There is no random
es: No existe lo aleatorio

en: The first thing to learn which might really surprise you when playing with Sonic Pi's randomisation functions is that they're not actually really random. What does this actually mean? Well, let's try a couple of tests. First, imagine a number in your head between 0 and 1. Keep it there and don't tell me. Now let me guess... was it `0.321567`? No? Bah, I'm clearly no good at this. Let me have another go, but let's ask Sonic Pi to choose a number this time. Fire up Sonic Pi v2.7+ and ask it for a random number but again don't tell me:
es: Lo primero que debes aprender y que probablemente te sorprenda cuando empieces a tocar con las funciones aleatorias de Sonic Pi, es que en realidad no son aleatorias. ¿Qué significa esto? Vamos a hacer unas cuantas pruebas. Primero, imagínate un número en tu cabeza de 0 a 1. Recuérdalo y no me lo digas. Ahora déjame adivinar... era `0.321567`? Bah, esto no se me da bien. Déjame intentarlo de nuevo, pero ahora le vamos a pedir a Sonic Pi que escoja el número. Abre Sonic Pi v2.7+ (versión 2.7 o posterior) y pídele un número aleatorio, pero de nuevo, no me digas cuál es:

en: Now for the reveal... was it `0.75006103515625`? Yes! Ha, I can see you're a little sceptical. Perhaps it was just a lucky guess. Let's try again. Press the Run button again and see what we get... What? `0.75006103515625` again? This clearly can't be random! You're right, it's not.
es: Veamos... ¿es `0.75006103515625`? ¡Sí! Ja ja, veo que no te lo crees. Bueno, tal vez tuve suerte. Probemos de nuevo. Dale al botón de Ejecutar y mira qué te sale... ¿Cómo? ¿Otra vez `0.75006103515625`? ¡Esto no puede ser aleatorio! Tienes razón, no lo es.

en: What's going on here? The fancy computer science word here is determinism. This just means that nothing is by chance and everything is destined to be. Your version of Sonic Pi is destined to always return `0.75006103515625` in the program above. This might sound pretty useless, but let me assure you that it's one of the most powerful parts of Sonic Pi. If you stick at it you'll learn how to rely on the deterministic nature of Sonic Pi's randomisation as a fundamental building block for your compositions and live coded DJ sets.
es: ¿Qué está pasando? En estos casos l@s informátic@s usamos el palabrejo determinismo. Sencillamente, esta palabra significa que nada ocurre al azar y que todo está predestinado. Tu versión de Sonic Pi está destinada a devolver siempre `0.75006103515625` en el programa de arriba. Esto puede parecerte inútil, pero voy a intentar convencerte de que es una de las partes más potentes de Sonic Pi. Si me sigues, aprenderás cómo confiar en la naturaleza determinista de la aleatoriedad de Sonic Pi, y la usarás como un bloque de construcción fundamental para tus composiciones y conciertos de live coding.

en: A Random Melody
es: Una melodía aleatoria

en: When Sonic Pi boots it actually loads into memory a sequence of 441,000 pre-generated random values. When you call a random function such as `rand` or `rrand`, this random stream is used to generate your result. Each call to a random function consumes a value from this stream. Therefore the 10th call to a random function will use the 10th value from the stream. Also, every time you press the Run button, the stream is reset for that run. This is why I could predict the result to `rand` and why the 'random' melody was the same every time. Everybody's version of Sonic Pi uses the exact same random stream which is very important when we start sharing our pieces with each other.
es: Cuando abres Sonic Pi, éste carga en memoria una secuencia de 441.000 valores aleatorios generados previamente. Cuando llamas a una función aleatoria como `rand` o `rrand`, se usa esta lista de valores aleatorios para generar tu resultado. Cada llamada a una función aleatoria consume un valor de esta lista. Por tanto, la décima llamada a una función aleatoria usará el décimo valor de la lista. Además, cada vez que pulsas el botón de Ejecutar, la lista se resetea para esa ejecución. Por eso pude adivinar el resultado de `rand`, y por eso la melodía 'aleatoria' era siempre la misma. La versión de Sonic Pi de todo el mundo usa exactamente la misma lista aleatoria, lo que es muy importante cuando empezamos a compartir nuestras canciones con otras personas.

en: Let's use this knowledge to generate a repeatable random melody:
es: Vamos a usar lo que hemos aprendido para generar una melodía aleatoria que se repita:

en: Type this into a spare buffer and hit Run. You'll hear a melody consisting of 'random' notes between 50 and 95. When it's finished, hit Run again to hear exactly the same melody again.
es: Escribe esto en un búfer vacío y dale a Ejecutar. Escucharás una melodía hecha con notas 'aleatorias' entre 50 y 95. Cuando haya acabado, dale a Ejecutar de nuevo y escucharás exactamente la misma melodía.

en: Handy Randomisation Functions
es: Funciones Aleatorias Útiles

en: Sonic Pi comes with a number of useful functions for working with the random stream. Here's a list of some of the most useful:
es: Sonic Pi contiene un montón de funciones para trabajar con la lista de valores aleatorios. Aquí tienes una lista de las más útiles:

en: `rand` - Simply returns the next value in the random stream
es: `rand` - Sencillamente devuelve el siguiente valor de la lista aleatoria

en: `rrand` - Returns a random value within a range
es: `rrand` - Devuelve un valor aleatorio dentro de un rango

en: `rrand_i` - Returns a random whole number within a range
es: `rrand_i` - Devuelve un número entero aleatorio dentro de un rango

en: `one_in` - Returns true or false with the given probability
es: `one_in` - Devuelve verdadero o falso dependiendo con una probabilidad determinada

en: `dice` - Imitates rolling a dice and returns a value between 1 and 6
es: `dice` - Imita el lanzar un dado, devolviendo un valor entre 1 y 6

en: `choose` - Chooses a random value from a list
es: `choose` - Elige un valor aleatorio de una lista

en: Check out their documentation in the Help system for detailed information and examples.
es: Mira la documentación en el sistema de Ayuda para más información y ejemplos.

en: Resetting the Stream
es: Reseteando la Lista

en: Whilst the ability to repeat a sequence of chosen notes is essential to allow you to replay a riff on the dance floor, it might not be exactly the riff you want. Wouldn't it be great if we could try a number of different riffs and choose the one we liked best? This is where the real magic starts.
es: Aunque poder repetir una secuencia de notas es esencial para poder reproducir tu riff en el concierto, puede que no sea exactamente lo que buscas. ¿No sería genial poder probar con distintos riffs y escoger el que mśa te guste? Aquí es donde empieza la magia.

en: We can manually set the stream with the fn `use_random_seed`. In Computer Science, a random seed is the starting point from which a new stream of random values can sprout out and blossom. Let's try it:
es: Podemos ajustar la lista de valores aleatorios manualmente, con la función `use_random_seed`. En informática, una semilla aleatoria (random seed) es el punto de partida desde el cual una nueva lista de valores aleatorios puede brotar y florecer. Vamos a probarlo:

en: Great, we get the first three notes of our random melody above: `84`, `83` and `71`. However, we can now change the seed to something else. How about this:
es: ¡Genial!, tenemos las tres primeras notas de nuestra melodía aleatoria de arriba: `84`, `83` y `71`. Ahora podemos cambiar la semilla a un valor distinto. A ver qué te parece así:

en: Interesting, we get `83`, `71` and `61` . You might notice that the first two numbers here are the same as the last two numbers before - this isn't a coincidence.
es: Interesante, obtenemos `83`, `71` y `61`. Puede que te hayas fijado en que los dos primeros números son los mismos que los dos últimos números de antes... no es una coincidencia.

en: Remember that the random stream is just a giant list of 'pre-rolled' values. Using a random seed simply jumps us to a point in that list. Another way of thinking about it is to imagine a huge deck of pre-shuffled cards. Using a random seed is cutting the deck at a particular point. The fabulous part of this is that it's precisely this ability to jump around the random stream which gives us huge power when making music.
es: Recuerda que la lista de valores es sencillamente una lista gigante de valores previamente calculados. Usar una semilla aleatoria sólo nos hace saltar a un punto dentro de la lista. Otra forma de verlo: imagínate una baraja de cartas gigante que ha sido barajada previamente. Usar una semilla aleatoria es como cortar la baraja en un punto. Lo mejor de esto es precisamente que puedes saltar por la lista de valores, lo que nos da un gran poder cuando hacemos música.

en: Let's revisit our random melody of 8 notes with this new stream resetting power, but let's also throw in a live loop so we can experiment live whilst it's playing:
es: Vamos a visitar de nuevo nuestra melodía aleatoria de 8 notas con nuestra nueva habilidad para resetear la lista aleatoria, pero ahora vamos a meter un live loop, para poder probar cosas mientras suena:

en: Now, whilst it's still playing, change the seed value from `0` to something else. Try `100`, what about `999`. Try your own values, experiment and play around - see which seed generates the riff you like best.
es: Ahora, mientras sigue sonando, cambia el valor de la semilla de `0` a algo distinto. Prueba `100`, o `999`. Prueba con tus propios valores, experimenta y juega con ello: a ver qué semilla genera el riff que más te guste.

en: This month's tutorial has been quite a technical dive into the workings of Sonic Pi's randomisation functionality. Hopefully it has given you some insight into how it works and how you can start using randomisation in a reliable way to create repeatable patterns within your music. It's important to stress that you can use repeatable randomisation *anywhere* you want. For example, you can randomise the amplitude of notes, the timing of the rhythm, the amount of reverb, the current synth, the mix of an FX, etc. etc. In the future we'll take a close look at some of these applications, but for now let me leave you with a short example.
es: El tutorial de este mes ha sido una inmersión un poco técnica en el sistema de aleatoriedad de Sonic Pi. Con suerte, te habrá servido para entender cómo funciona y cómo puedes usar la aleatoriedad con seguridad, creando patrones reproducibles en tu música. Es importante recalcar que puedes usar dicha aleatoriedad reproducible *donde quieras*. Por ejemplo, puedes hacer aleatorios la amplitud de las notas, el ritmo, la cantidad de reverberación, el sintetizador actual, la cantidad de mezcla de un efecto, etc. En el futuro veremos de cerca alguna de estas aplicaciones, pero de momento, déjame enseñarte un ejemplo corto.

en: Type the following into a spare buffer, hit Run, and then start changing the seeds around, hit Run again (whilst it's still playing) and explore the different sounds, rhythms and melodies you can make. When you find a nice one, remember the seed number so you can get back to it. Finally, when you've found a few seeds you like, put on a live coded performance for your friends by simply switching between your favourite seeds to create a full piece.
es: Escribe el siguiente código en un búfer vacío, dale a Ejecutar, y empieza a cambiar las semillas, dale a Ejecutar de nuevo (mientras suena) y explora distintos sonidos, ritmos y melodías que puedes hacer. Cuando hayas encontrado algo que te guste, recuerda el valor de la semilla para que puedas usarla más tarde. Finalmente, cuando hayas encontrado unas cuantas semillas que te gusten, márcate un concierto de live coding para tus amig@s; sólo tienes que cambiar entre tus semillas favoritas, creando una pieza completa.

en: Controlling Your Sound
es: Controlando tu sonido

en: So far during this series we've focussed on triggering sounds. We've discovered that we can trigger the many synths built into Sonic Pi with `play` or `synth` and how to trigger pre-recorded samples with `sample`. We've also looked at how we can wrap these triggered sounds within studio FX such as reverb and distortion using the `with_fx` command. Combine this with Sonic Pi's incredibly accurate timing system and you can produce a vast array of sounds, beats and riffs. However, once you've carefully selected a particular sound's options and triggered it, there's no ability to mess with it whilst it's playing right? Wrong! Today you're going to learn something very powerful - how to control running synths.
es: Hasta ahora en esta serie, nos hemos centrado en usar sonidos disparándolos. Hemos descubierto que podemos disparar los distintos sintetizadores de Sonic Pi con `play` o `synth`, y hemos aprendido cómo lanzar samples pregrabados con `sample`. También hemos visto cómo podemos pasar estos sonidos por efectos de estudio, como reverberación y distorsión, usando el comando `with_fx`. Combina esto con el sistema de tiempo increíblemente preciso de Sonic Pi, y puedes producir una cantidad enorme de sonidos, beats y riffs. Sin embargo, una vez has seleccionado las opciones de un sonido y lo has disparado, no hay forma de cambiar dichas opciones mientras suena, ¿verdad? ¡Pues no! Hoy vas a aprender algo muy potente: cómo controlar sintetizadores en ejecución.

en: A Basic Sound
es: Un sonido básico

en: Let's create a nice simple sound. Fire up Sonic Pi and in a fresh buffer type the following:
es: Hagamos un sonido simple. Arranca Sonic Pi y en un buffer libre escribe lo siguiente:

en: Now press the Run button at the top left to hear a lovely rumbling synth sound. Go ahead, press it again a few times to get a feel for it. OK, done? Let's start controlling it!
es: Ahora pulsa el botón de Ejecutar (arriba a la izquierda) para escuchar un adorable y estruendoso sintetizador. No pares, ejecútalo varias veces para que tengas una primera impresión. Vale, ¿lo tienes? Entonces, ¡vamos a empezar a controlarlo!

en: A little known feature in Sonic Pi is that the fns `play`, `synth` and `sample`, return something called a `SynthNode` which represents a running sound. You can capture one of these `SynthNode`s using a standard variable and then **control** it at a later point in time. For example, let's change the value of the `cutoff:` opt after 1 beat:
es: Una funcionalidad poco conocida de Sonic Pi es que las funciones `play`, `synth` y `sample` devuelven algo llamado `SynthNode` (nodo de sintetizador), que representa un sonido en ejecución. Puedes capturar un `SynthNode` usando una variable normal y corriente, y luego **controlarlo** más tarde. Por ejemplo, vamos a cambiar la opción `cutoff:` después de 1 beat:

en: Let's look at each line in turn:
es: Veamos cada línea una por una:

en: Firstly we trigger the `:prophet` synth using the `synth` fn as normal. However we also capture the result in a variable called `sn`. We could have called this variable something completely different such as `synth_node` or `jane` - the name doesn't matter. However, it's important to choose a name that's meaningful to you for your performances and for people reading your code. I chose `sn` as it's a nice short mnemonic for synth node.
es: En primer lugar tenemos el sintetizador `:prophet` que usa la función `synth` como de costumbre. Sin embargo, hemos capturado el resultado en una variable llamada `sn`. Podríamos haber llamado a esta variable de cualquier forma, como `synth_node` o `jane` - el nombre no importa. Lo que sí es importante es escoger un nombre que tenga sentido para ti cuando des tu concierto, o para otras personas que quieran leer tu código. Yo he usado `sn` porque es una abreviatura de synth node.

en: On line 2 we have a standard `sleep` command. This does nothing special - it just asks the computer to wait for 1 beat before moving onto the next line.
es: En la línea 2 hemos usado un comando `sleep` normal y corriente. Esto no hace nada especial; sencillamente, le pide al ordenador que espere 1 beat antes de moverse a la siguiente línea.

en: Line 3 is where the control fun starts. Here, we use the `control` fn to tell our running `SynthNode` to change the cutoff value to `130`. If you hit the **Run** button, you'll hear the `:prophet` synth start playing as before, but after 1 beat it will shift to sound a lot brighter.
es: En la línea 3 empieza la diversión con el tema del control. Aquí hemos usado la función `control` para decirle a nuestro `SynthNode` en ejecución que cambie su valor de cutoff a `130`. Si le das al botón de **Ejecutar**, escucharás el sintetizador que empieza a tocar como antes, pero después de 1 beat verás que cambia a un sonido mucho más brillante.

en: Modulatable Options
es: Opciones Modulables

en: Most of Sonic Pi's synths and FX opts may be changed after being triggered. However, this isn't the case for all of them. For example, the envelope opts `attack:`, `decay:`, `sustain:` and `release:` can only be set when triggering the synth. Figuring out which opts can and can't be changed is simple - just head to the documentation for a given synth or FX and then scroll down to the individual option documentation and look for the phrases "May be changed whilst playing" or "Can not be changed once set". For example, the documentation for the `:beep` synth's `attack:` opt makes it clear that it's not possible to change it:
es: La mayoría de las opciones para sintetizadores y efectos de Sonic Pi se pueden cambiar después de haber sido disparadas. Sin embargo, esto no pasa con todas. Por ejemplo, las opciones de envolvente en `attack:`, `decay:`, `sustain:` y `release:` sólo se pueden controlar cuando disparas el sintetizador. Es fácil saber qué opts puedes cambiar y cuáles no puedes cambiar; busca el sintetizador o efecto que quieras en la documentación, baja hasta la documentación de las opts, y busca las frases "Puede ser cambiado mientras se toca" o "No se puede cambiar una vez iniciado". Por ejemplo, la documentación para la opción `attack:` del sintetizador `:beep` nos deja claro que no se puede cambiar esa opción después de disparar el sintetizador:

en: Must be zero or greater
es: Debe ser cero o mayor

en: Can not be changed once set
es: No se puede cambiar una vez disparado

en: Scaled with current BPM value
es: Escalado con el valor actual de BPM

en: Multiple Changes
es: Cambios múltiples

en: Whilst a synth is running you're not limited to changing it only once - you're free to change it as many times as you like. For example, we can turn our `:prophet` into a mini arpeggiator with the following:
es: Mientras un sintetizador está en ejecución, no estás limitado a cambiarlo sólo una vez: puedes cambiarlo tantas veces como quieras. Por ejemplo, podemos convertir nuestro `:prophet` en un mini arpegiador con el siguiente código:

en: In this snippet of code we just added a couple of extra things. First we defined a new variable called `notes` which contains the notes we'd like to cycle through (an arpeggiator is just a fancy name for something that cycles through a list of notes in order). Secondly we replaced our single call to `control` with an iteration calling it 16 times. In each call to `control` we `.tick` through our ring of `notes` which will automatically repeat once we get to the end (thanks to the fabulous power of Sonic Pi's rings). For a bit of variety try replacing `.tick` with `.choose` and see if you can hear the difference.
es: Hemos añadido unas cosillas extra en este fragmento de código. Primero, hemos definido una nueva variable llamada `notes` que contiene las notas por las que nos gustaría pasar (por cierto, arpegiador sólo es un palabrejo para algo que da vueltas sobre una lista de notas en orden). Segundo, hemos reemplazado nuestra llamada a `control` por una iteración que la llama 16 veces. En cada llamada a `control`, hacemos `.tick` sobre nuestro anillo de notas (`notes`), que se repite automáticamente cuando llegamos al final (gracias al fabuloso poder de los anillos de Sonic Pi). Para tener algo más de variedad, prueba a reemplazar `.tick` por `.choose`, a ver si puedes escuchar la diferencia.

en: Note that we can change multiple opts simultaneously. Try changing the control line to the following and listen for the difference:
es: Fíjate en que podemos cambiar varios opts a la vez. Prueba a cambiar la línea de control por la siguiente, y escucha la diferencia:

en: When we control a `SynthNode`, it responds exactly on time and instantly changes the value of the opt to the new one as if you'd pressed a button or flicked a switch requesting the change. This can sound rhythmical and percussive - especially if the opt controls an aspect of the timbre such as `cutoff:`. However, sometimes you don't want the change to happen instantaneously. Instead, you might want to smoothly move from the current value to the new one as if you'd moved a slider or dial. Of course, Sonic Pi can also do this too using the `_slide:` opts.
es: Cuando controlamos un `SynthNode`, éste responde exactamente a tiempo y cambia al instante el valor del opt por uno nuevo, como si hubieras presionado un botón o hubieras accionado un interruptor. Esto puede sonar rítmico y percusivo - especialmente si el opt controla un aspecto del timbre, como `cutoff:`. Sin embargo, a veces no quieres que el cambio sea instantáneo. Tal vez quieras moverte suavemente del valor actual al nuevo, como si estuvieras moviendo un deslizador o un dial. Por supuesto, Sonic Pi también puede hacer esto, usando los opts `_slide:`.

en: Each opt that can be modified also has a special corresponding `_slide:` opt that allows you to specify a slide time. For example, `amp:` has `amp_slide:` and `cutoff:` has `cutoff_slide:`. These slide opts work slightly differently than all the other opts in that they tell the synth note how to behave **next time they are controlled**. Let's take a look:
es: Cada opción que puede ser modificada también tiene una opción `_slide:` correspondiente, que permite especificar el tiempo de deslizamiento (slide). Por ejemplo, `amp:` tiene `amp_slide:`, y `cutoff:` tiene `cutoff_slide:`. Estas slide opts son muy distintas al resto de opts, ya que le dicen a la nota del sintetizador cómo comportarse **la siguiente vez que sean controladas**. Vamos a echarle un vistazo:

en: Notice how this example is exactly the same as before except with the addition of `cutoff_slide:`. This is saying that next time this synth has its `cutoff:` opt controlled, it will take 2 beats to slide from the current value to the new one. Therefore, when we use `control` you can hear the cutoff slide from 70 to 130. It creates an interesting dynamic feel to the sound. Now, try changing the `cutoff_slide:` time to a shorter value such as 0.5 or a longer value such as 4 to see how it changes the sound. Remember, you can slide any of the modifiable opts in exactly this way and each `_slide:` value can be totally different so you can have the cutoff sliding slowly, the amp sliding fast and the pan sliding somewhere in between if that's what you're looking to create...
es: Fíjate en que este ejemplo es exactamente igual que el de antes, excepto por el `cutoff_slide:`. Esto le dice al sintetizador que, para la próxima vez que controle su opción `cutoff:`, tiene que usar 2 beats para deslizarse desde el valor actual hasta el nuevo valor. Por eso puedes escuchar el cutoff moverse de 70 a 130 cuando usas `control`. Esto le da al sonido un toque dinámico muy interesante. Ahoa prueba a cambiar el tiempo de `cutoff_slide:` a un valor más corto, como 0.5, o un valor más largo, como 4, para ver cómo cambia el sonido. Recuerda, puedes hacer slide entre cualquiera de las opciones modificables de esta forma, y cada valor de `_slide:` puede ser totalmente distinto. Puedes hacer que el cutoff cambie lentamente, que el amp cambie rápido y que el pan cambie a un ritmo intermedio; configúralo a tu gusto, como estés pensando para tu nueva creación...

en: Let's look at a short example which demonstrates the power of controlling synths after they've been triggered. Notice that you can also slide FX just like synths although with a slightly different syntax. Check out section 7.2 of the built-in tutorial for more information on controlling FX.
es: Veamos un breve ejemplo que demuestra el poder de controlar sintetizadores después de haberlos disparado. Fíjate en que también puedes hacer slide con los efectos igual que con los sintetizadores, aunque con una sintaxis ligeramente distinta. Mira la sección 7.2 del tutorial incluido en Sonic Pi para más información sobre el control de los FX (efectos).

en: Copy the code into a spare buffer and take a listen. Don't stop there though - play around with the code. Change the slide times, change the notes, the synth, the FX and the sleep times and see if you can turn it into something completely different!
es: Copia el código en un búfer separado y escúchalo unos instantes. No dejes que se acabe ahí: juega con el código. Cambia los tiempos de slide, cambia las notas, el sintetizador, los FX y los tiempos de pausa, ¡a ver si puedes convertirlo en algo totalmente distinto!

en: A.11 Tick Tock
es: A.11. Tic tac

en: Tracking the Beat
es: Siguiendo el Beat

en: Last month in this series we took a deep technical dive into the randomisation system underpinning Sonic Pi. We explored how we can use it to deterministically add new levels of dynamic control over our code. This month we're going to continue our technical dive and turn our attention to Sonic Pi's unique tick system. By the end of this article you'll be ticking your way through rhythms and riffs on your way to being a live coding DJ.
es: El último mes hicimos una inmersión técnica en el sistema de aleatoriedad de Sonic Pi. Exploramos cómo podemos usarlo para añadir nuevos niveles de control dinámico en nuestro código, de forma determinista. Este mes vamos a continuar con nuestra inmersión técnica, para enseñarte el sistema de tick único en Sonic Pi. Al final del artículo, podrás recorrer tus ritmos y riffs con total facilidad, avanzando en tu camino para ser un/a DJ de live coding.

en: Beat Counting
es: Contando Beats

en: When making music we often want to do a different thing depending on which beat it is. Sonic Pi has a special beat counting system called `tick` to give you precise control over when a beat actually occurs and even supports multiple beats with their own tempos.
es: Normalmente, cuando hacemos música, queremos hacer distintas cosas dependiendo de cómo sea nuestro beat. Sonic Pi tiene un sistema especial para contar beats llamado `tick` que te proporciona un control muy preciso sobre cuándo ocurre un beat, e incluso permite usar distintos beats con sus propios tempos.

en: Let's have a play - to advance the beat we just need to call `tick`. Open up a fresh buffer, type in the following and hit Run:
es: Vamos a tocar un poco. Para hacer avanzar el beat sólo tenemos que llamar a `tick`. Abre un búfer nuevo, escribe el siguiente código y dale a Ejecutar:

en: This will return the current beat: `0`. Notice that even if you press the Run button a few times it will always return `0`. This is because each run starts a fresh beat counting from 0. However, whilst the run is still active, we can advance the beat as many times as we want:
es: Esto devuelve el beat actual: `0`. Fíjate en que aunque presiones el botón de Ejecutar varias veces, siempre va a devolver `0`. Esto pasa porque cada ejecución empieza un beat nuevo, empezando a contar desde 0. Sin embargo, mientras la ejecución siga activa, podemos hacer avanzar el beat tantas veces como queramos:

en: Whenever you see the symbol `#=>` at the end of a line of code it means that that line will log the text on the right-hand-side. For example, `puts foo #=> 0` means the code `puts foo` prints `0` to the log at that point in the program.
es: Cuando veas el símbolo `#=>` al final de una línea de código, significa que esa línea va a escribir el texto que queda al lado derecho. Por ejemplo, `puts foo #=> 0` significa que el código `puts foo` imprime`0` en el log en ese momento de la ejecución.

en: Checking the Beat
es: Comprobando el Beat

en: We've seen that `tick` does two things. It increments (adds one) and returns the current beat. Sometimes we just want to look at the current beat without having to increment it which we can do via `look`:
es: Hemos visto que `tick` hace dos cosas. Tick incrementa (añade uno) y devuelve el beat actual. A veces sólo queremos ver el beat actual sin tener que incrementarlo, lo que podemos hacer con `look`:

en: In this code we tick the beat up twice and then call `look` twice. We'll see the following values in the log: `0`, `1`, `1`, `1`. The first two `tick`s returned `0`, then `1` as expected, then the two `look`s just returned the last beat value twice which was `1`.
es: En este código incrementamos el beat dos veces haciendo tick y entonces llamamos `look` dos veces. Veremos los siguientes valores en el log: `0`, `1`, `1`, `1`. Los dos primeros `tick`s han devuelto `0`, después `1` como esperábamos, finalmente los dos `look`s simplemente devolvieron el ultimo valor del beat dos veces, lo cual ha sido `1`.

en: So now we can advance the beat with `tick` and check the beat with `look`. What next? We need something to tick over. Sonic Pi uses rings for representing riffs, melodies and rhythms and the tick system has been specifically designed to work very closely with them. In fact, rings have their own dot version of `tick` which does two things. Firstly, it acts like a regular tick and increments the beat. Secondly it looks up the ring value using the beat as the index. Let's take a look:
es: Así que ahora podemos avanzar el beat con `tick`, y comprobar el beat con `look`. ¿Y ahora qué? Necesitamos algo sobre lo que hacer tick. Sonic Pi utiliza anillos para representar riffs, melodías y ritmos, y el sistema de ticking ha sido diseñado específicamente para trabajar con anillos. De hecho, los anillos tienen su propia versión de `tick` (`.tick`, con punto) que hace dos cosas. Primero, actúa como un tick normal e incrementa el beat. Segundo, obtiene el valor del anillo usando el beat como índice (posición dentro del anillo). Veamos:

en: `.tick` is a special dot version of `tick` which will return the first value of the ring `:a`. We can grab each of the values in the ring by calling `.tick` multiple times:
es: `.tick` es una versión especial (con un punto delante) de `tick`, que devuelve el primer valor del anillo `:a`. Podemos coger cada uno de los valores del anillo llamando `.tick` varias veces:

en: Take a look at the log and you'll see `:a`, `:b`, `:c` and then `:a` again. Notice that `look` returns `3`. Calls to `.tick` act just like they are regular calls to `tick` - they increment the local beat.
es: Mira el log y allí verás `:a`, `:b`, `:c` y de nuevo `:a`. Fíjate que `look` devuelve `3`. Las llamadas a `.tick` funcionan como si fueran llamadas normales a `tick`- incrementan el beat local.

en: The real power comes when you mix `tick` with rings and `live_loop`s. When combined we have all the tools we need to both build and understand a simple arpegiator. We need just four things:
es: El poder read viene cuando mezclas `tick` con rings y `live_loop`s. Cuando están combinados tenemos todas las herramientas necesarias para construir y también entender un simple arpegiador. Solo necesitamos cuatro cosas:

en: A ring containing the notes we want to loop over.
es: Un ring que contiene las notas que queremos repetir.

en: A means of incrementing and obtaining the beat.
es: Una forma de incrementar y obtener el beat.

en: The ability to play a note based on the current beat.
es: La capacidad de tocar una nota en función del beat actual.

en: These concepts can all be found in the following code:
es: Estos conceptos pueden ser comprobados en el siguiente código:

en: Let's look at each of these lines. First we define our ring of notes which we'll continually play. We then create a `live_loop` called `:arp` which loops round for us. Each time round the `live_loop` we set our synth to `:dpulse` and then play the next note in our ring using `.tick`. Remember that this will increment our beat counter and use the latest beat value as an index into our notes ring. Finally, we wait for an eighth of a beat before looping round again.
es: Veamos cada una de estas líneas. Primero definimos nuestro ring de notas que reproduciremos continuamente. Entonces creamos un `live_loop` llamado `:arp` que hace loop a nuestro alrededor. Cada vuelta en el `live_loop` ponemos nuestro synth en `:dpulse` y entonces tocamos la siguiente nota usando`.tick`. Recuerda que esto incrementará nuestro contador de beats y usará el último valor del beat como el índice para nuestro ring de notas. Finalmente, esperamos un octavo de beat antes de volver a empezar el loop.

en: Multiple Simultaneous Beats
es: Múltiples Ritmos Simultáneos

en: Let's bring all this knowledge of `tick`s, `ring`s and `live_loop`s together for a final fun example. As usual, don't treat this as a finished piece. Start changing things and play around with it and see what you can turn it into. See you next time...
es: Juntemos todo este conocimiento de los `tick`s, `ring`s y `live_loop`s en un ejemplo final. Como de costumbre, no consideres esto como una pieza acabada. Empieza cambiando cosas y jugando con ellos a ver en que puedes transformarlo. Nos vemos...

en: A.12 Sample Slicing
es: A.12 Cortando Samples

en: Sample Slicing
es: Cortando Samples

en: Sound as Data
es: El sonido como datos

en: A recording of a sound is simply represented as data - lots of numbers between -1 and 1 which represent the peaks and troughs of the sound wave. If we play those numbers back in order, we get the original sound. However, what's to stop us from playing them back in a different order and creating a new sound?
es: La grabación de un sonido es simplemente representada como datos - mogollón de números entre -1 y 1 que representan los picos y valles de la onda de sonido. Si reproducimos esos números en orden, oiremos el sonido original. Sin embargo, ¿qué nos impide reproducirlo en un orden diferentes para crear un sonido nuevo?

en: How are samples actually recorded? It's actually pretty simple once you understand the basic physics of sound. When you make a sound - for example by hitting a drum, the noise travels through the air in a similar fashion to how the surface of a lake ripples when you throw a pebble into it. When those ripples reach your ears, your eardrum moves sympathetically and converts those movements into the sound you hear. If we wish to record and play back the sound, we therefore need a way of capturing, storing and reproducing those ripples. One way is to use a microphone which acts like an eardrum and moves back and forth as the sound ripples hit it. The microphone then converts its position into a tiny electric signal which is then measured many times a second. These measurements are then represented as a series of numbers between -1 and 1.
es: ¿Cómo se graban los samples? En realidad es bastante sencillo, una vez entiendes la física básica del sonido. Cuando haces un sonido (por ejemplo, tocando un tambor), el ruido viaja por el aire, como la superficie de un lago forma ondas cuando lanzas un guijarro al agua. Cuando esas ondas llegan a tus oídos, tu tímpano se mueve y convierte esos movimientos en el sonido que escuchas. Por tanto, si queremos grabar y reproducir un sonido, necesitamos una forma de capturar, guardar y reproducir dichas ondas. Una forma de hacer esto es usando un micrófono, que funciona como un tímpano y se mueve de un lado para otro a medida que las ondas lo golpean. El micrófono convierte su posición en una pequeña señal eléctrica, que se mide varias veces por segundo. Estas mediciones se representan como una serie de números entre -1 y 1.

en: Playing Part of a Sample
es: Reproducir una parte de un sample

en: So, how do we code Sonic Pi to play a sample back in a different order? To answer this question we need to take a look at the `start:` and `finish:` opts for `sample`. These let us control the start and finish positions of our playback of the numbers which represent the sound. The values for both of these opts are represented as a number between `0` and `1` where `0` represents the start of the sample and `1` is the end. So, to play the first half of the Amen Break, we just need to specify a `finish:` of `0.5`:
es: Y, ¿cómo hacemos en Sonic Pi para tocar un sample en un orden diferente? Para responder a esta pregunta, debemos echarle un vistazo a las opciones `start:` y `finish:` de `sample`. Estas opciones nos permiten controlar las posiciones de inicio y fin de reproducción de las mediciones que mencionamos antes. Los valores para estas opciones se representan como un número entre `0` y `1`, donde `0` representa el inicio del sample, y `1` es el final del sample. Entones, para tocar la primera mitad del Amen Break, sólo tenemos que especificar un `finish:` de `0.5`:

en: Re-ordering Sample Playback
es: Re-ordenando el playback de un sample

en: Now that we know that a sample is simply a list of numbers that can be played back in any order and also how to play a specific part of a sample we can now start having fun playing a sample back in the 'wrong' order.
es: Ahora que sabemos que un sample es simplemente una lista de números que puede ser leída en cualquier orden y también cómo tocar una parte específica de un sample podemos empezar a pasarlo bien tocando un sample en el orden 'equivocado'.

en: Let's take our Amen Break and chop it up into 8 equally-sized slices and then shuffle the pieces around. Take a look at the diagram: at the top A) represents the graph of our original sample data. Chopping it into 8 slices gives us B) - notice that we've given each slice a different colour to help distinguish them. You can see each slice's start and finish values at the top. Finally C) is one possible re-ordering of the slices. We can then play this back to create a new beat. Take a look at the code to do this:
es: Vamos a coger el Amen Break y a cortarlo en 8 trozos iguales, y después vamos a cambiar el orden de las piezas. Mira el diagrama: en la parte superior, A) representa el gráfico con los datos del sample original. Al cortarlo en 8 trozos obtenemos B) (fíjate en que le hemos dado un color distinto a cada sample, para que sea fácil distinguirlos). Puedes ver los valores de inicio y fin de cada sample arriba. Finalmente, C) es un posible ordenamiento nuevo de los trozos que tenemos. Ahora podemos reproducir el sample resultante, para crear un beat nuevo. Mira el código para ver cómo hacerlo:

en: we choose a random slice to play which should be a random number between 0 and 7 (remember that we start counting at 0). Sonic Pi has a handy function for exactly this: `rand_i(8)`. We then store this random slice index in the variable `slice_idx`.
es: Elegimos un trozo al azar para tocar, que debe ser un numero aleatorio entre 0 y 7 (recuerda que tenemos que empezar a contar desde 0). Sonic Pi tiene una función adecuada para esto: `rand_i(8)`. Entonces guardamos el índice aleatorio del trozo en la variable `slice_idx`.

en: We define our `slice_size` which is 1/8 or 0.125. The `slice_size` is necessary for us to convert our `slice_idx` into a value between 0 and 1 so we can use it as our `start:` opt.
es: Definimos nuestro `slice_size` que es 1/8 o 0.125. El `slice_size` es necesario apara nosotros para convertir `slice_idx` en un valor entre 0 y 1 para que podamos usarlo en nuestra opcion `start:`.

en: We calculate the start position `s` by multiplying the `slice_idx` by the `slice_size`.
es: Calculamos la posición de inicio `s` multiplicando `slice_idx` por `slice_size`.

en: We calculate the finish position `f` by adding the `slice_size` to the start position `s`.
es: Calculamos la posición final `f` añadiendo el `slice_size` a la posición de inicio `s`.

en: We can now play the sample slice by plugging in the `s` and `f` values into the `start:` and `finish:` opts for `sample`.
es: Ahora podemos tocar el trozo de sample pasando los valores `s` y `f` en las opciones `start:` y `finish:` de `sample`.

en: Before we play the next slice we need to know how long to `sleep` which should be the duration of the sample slice. Luckily, Sonic Pi has us covered with `sample_duration` which accepts all the same opts as `sample` and simply returns the duration. Therefore, by passing `sample_duration` our `start:` and `finish:` opts, we can find out the duration of a single slice.
es: Antes de tocar el siguiente trozo necesitamos saber cuánto necesitamos esperar ( `sleep`). Esto debería de ser la duración del trozo del sample. Por suerte Sonic Pi nos ayuda con `sample_duration` que acepta las mismas opciones que `sample` y simplemente nos devuelve la duración. Así pues, pasando a `sample_duration` nuestras opciones `start:` y `finish:`, podemos saber la duración de un solo trozo.

en: We wrap all of this code in a `live_loop` so that we continue to pick new random slices to play.
es: Ponemos todo este código en un 'live_loop' para continuar seleccionando aleatoriamente trozos nuevos que tocar.

en: Let's combine everything we've seen so far into a final example which demonstrates how we can take a similar approach to combine randomly sliced beats with some bass to create the start of an interesting track. Now it's your turn - take the code below as a starting point and see if you can take it in your own direction and create something new...
es: Combinemos ahora todo lo que hemos visto hasta ahora en un ejemplo final donde demostraremos cómo podemos tomar una estrategia similar para combinar aleatoriamente ritmos cortados con un ritmo de bajo para crear el inicio de un tema interesante. Ahora es tu turno - usa el código que hay aquí abajo como punto de inicio e intenta ver si puedes llevarlo en tu propia dirección para crear algo nuevo...

en: A.13 Code a Probabilistic Sequencer
es: A.13 Programando un Secuenciador Probabilístico

en: Code a Probabilistic Sequencer
es: Programando un Secuenciador Probabilístico

en: Changing Probabilities
es: Cambiando las Probabilidades

en: Combining Probabilities
es: Combinando las Probabilidades

en: Things get really exciting when you combine multiple samples being triggered with different probabilities. For example:
es: Las cosas se ponen interesantes cuando combinas varios samples que se disparan con distintas probabilidades. Por ejemplo:

en: Again, run the code above and then start changing the probabilities to modify the rhythm. Also, try changing the samples to create an entirely new feel. For example try changing `:drum_cymbal_closed` to `:bass_hit_c` for extra bass!
es: De nuevo, ejecuta el código de arriba y empieza a cambiar las probabilidades para modificar el ritmo. También puedes cambiar los samples para crear una sensación completamente nueva. Por ejemplo, ¡prueba a cambiar `:drum_cymbal_closed` por `:bass_hit_c` si quieres una sobredosis de bajo!

en: Repeatable Rhythms
es: Ritmos Repetibles

en: One thing I tend to do with this kind of structure is to remember which seeds sound good and make a note of them. That way I can easily re-create my rhythms in future practice sessions or performances.
es: Una cosa que suelo hacer con este tipo de estructura es recordar qué semillas suenan bien y apuntarlas. De esta forma, puedo recrear fácilmente mis ritmos cuando vuelva a practicar la canción, o cuando la toque en un concierto en el futuro.

en: This month we're going to take a deep dive into one of Sonic Pi's most powerful and flexible audio FX - the `:slicer`. By the end of this article you will have learned how to manipulate the overall volume of parts of our live coded sound in powerful new ways. This will allow you to create new rhythmic and timbral structures and broaden your sonic possibilities.
es: Este mes vamos a sumergirnos en uno de los efectos más potentes y flexibles de Sonic Pi: el `:slicer`. Al final de este artículo, habrás aprendido cómo manipular el volumen de nuevas formas muy interesantes. Esto te permitirá crear nuevos ritmos y estructuras rítmicas, ampliando tus posibilidades sonoras.

en: Slice that Amp
es: Rebana ese Amp

en: Now, let's pipe it through the `:slicer` FX:
es: Ahora, vamos a pasarlo por el efecto `:slicer`:

en: Hear how the slicer acts like it's muting and unmuting the audio with a regular beat. Also, notice how the `:slicer` affects all the audio generated between the `do`/`end` blocks. You can control the speed at which it turns the audio on and off with the `phase:` opt which is short for phase duration. Its default value is `0.25` which means 4 times a second at the default BPM of 60. Let's make it faster:
es: Escucha cómo el slicer le pone y le quita volumen al audio, con un beat regular. Fíjate también en cómo el `:slicer` afecta a todo el audio generado entre los bloques `do`/`end`. Puedes controlar la velocidad a la que se enciende y apaga el audio con la opción `phase:`, que es una abreviatura de duración de fase (phase duration en inglés). Su valor por defecto es `0.25`, que significa 4 veces por segundo usando el BPM por defecto de 60. Hagámoslo más rápido:

en: Phase duration is the length of time for one on/off cycle. Therefore smaller values will make the FX switch on and off much faster than larger values. Good values to start playing with are `0.125`, `0.25`, `0.5` and `1`.
es: La duración de fase (phase duration) es la longitud de tiempo para un ciclo de encendido/apagado del volumen. Por tanto, valores más bajos harán al efecto cambiar entre encendido y apagado mucho más rápido que valores más altos. Puedes empezar jugando con valores como `0.125`, `0.25`, `0.5` y `1`.

en: Control Waves
es: Ondas de Control

en: By default, the `:slicer` FX uses a square wave to manipulate the amplitude through time. This is why we hear the amplitude on for a period, then immediately off for a period, then back on again. It turns out that the square wave is just one of 4 different control waves that are supported by `:slicer`. The others are saw, triangle and (co)sine. Take a look at the diagram below to see what these look like. We can also hear what they sound like. For example, the following code uses (co)sine as the control wave. Hear how the sound doesn't turn on and off abruptly but instead smoothly fades in and out:
es: Por defecto, el efecto `:slicer` utiliza una onda cuadrada para manipular la amplitud a lo largo del tiempo. Por eso escuchamos la amplitud encendida durante un periodo de tiempo, luego inmediatamente apagada por otro periodo, y encendida de nuevo. Podemos ver que la onda cuadrada sólo es una de las 4 ondas de control distintas que permite usar `:slicer`. Las otras son la onda de sierra, la onda triangular la onda de (co)seno. Échale un vistazo al diagrama de arriba para ver qué forma tienen estas ondas. También podemos escuchar cómo suenan. Por ejemplo, el siguiente código utiliza el (co)seno como onda de control. Escucha cómo el sonido no se enciende y apaga de forma abrupta, sino que aparece y desaparece gradualmente:

en: Have a play with the different wave forms by changing the `wave:` opt to `0` for saw, `1` for square, `2` for triangle and `3` for sine. See how different waves sound with different `phase:` opts too.
es: Juega con las siguientes formas de onda cambiando la opción `wave:` a `0` para onda de sierra, `1` para onda cuadrada, `2` para onda triangular, y `3` para onda de seno. Prueba también cómo suenan ondas distintas con valores de `phase:` distintos.

en: Each of these waves can be inverted with the `invert_wave:` opt which flips it on the y axis. For example, in a single phase the saw wave typically starts high, and slowly goes down before jumping back to the top. With `invert_wave: 1` it will start low and slowly go up before jumping back down again. Additionally, the control wave can be started at different points with the `phase_offset:` opt which should be a value between `0` and `1`. By playing around with `phase:`, `wave:`, `invert_wave:` and `phase_offset` opts you can dramatically change how the amplitude is modified through time.
es: Cada una de estas ondas se pueden invertir con la opción `invert_wave:`, que les da la vuelta en torno al eje y. Por ejemplo, en una misma fase, una onda cuadrada suele empezar alto y va bajando gradualmente antes de volver a subir. Con `invert_wave:1`, la onda empieza bajo y va subiendo gradualmente antes de volver a bajar. Además, la onda de control puede empezar en puntos distintos con la opción `phase_offset:`, que debería tener un valor entre `0` y `1`. Jugando con las opciones `phase:`, `wave:`, `invert_wave:` y `phase_offset` puedes cambiar drásticamente cómo se modifica la amplitud a lo largo del tiempo.

en: Setting your levels
es: Configurando tus niveles

en: By default, `:slicer` switches between amplitude values `1` (fully loud) and `0` (silent). This can be changed with the `amp_min:` and `amp_max:` opts. You can use this alongside the sine wave setting to create a simple tremolo effect:
es: Por defecto, `:slicer` cambia entre los valores de amplitud `1` (totalmente alto) y `0` (silenciado). Esto se puede cambiar con las opciones `amp_min:` y `amp_max`. Puedes usarlas con la onda de seno, creando un efecto de tremolo muy sencillo:

en: This is just like grabbing the volume knob on your hi-fi and moving it up and down just a little so the sound 'wobbles' in and out.
es: Es como si cogieses la rueda de volumen en tu altavoz y lo movieses arriba y abajo ligeramente, con lo que el sonido 'tiembla'.

en: Probabilities
es: Probabilidades

en: Hear how we now have an interesting rhythm of pulses. Try changing the `probability:` opt to a different value between `0` and `1`. Values closer to `0` will have more space between each sound due to the likelihood of the sound being triggered being much lower.
es: Escucha el interesante ritmo de pulsos que hemos conseguido. Prueba a cambiar la opción `probability:` (probabilidad) a un valor distinto entre `0` y `1`. Valores más cercanos a `0` generarán más espacio entre cada sonido, porque la probabilidad de que el sonido se dispare es mucho menor.

en: Finally, you can change the 'resting' position of the control wave when the probability test fails from `0` to any other position with the `prob_pos:` opt:
es: Finalmente, puedes probar a cambiar la posición de 'reposo' de la onda de control cuando los tests de probabilidad fallen de `0` a cualquier otra posición, con la opción `prob_pos:`:

en: One really fun thing to do is to use `:slicer` to chop a drum beat in and out:
es: Algo muy divertido que puedes probar es usar el `:slicer` para cortar un beat de batería:

en: As we have already seen, changing the default BPM with `use_bpm` will make all the sleep times and synth envelope durations grow or shrink to match the beat. The `:slicer` FX honours this too, as the `phase:` opt is actually measured in beats not seconds. We can therefore fix the issue with `loop_amen` above by changing the BPM to match the sample:
es: Como ya hemos visto, cambiar el BPM por defecto con `use_bpm` alarga o comprime los tiempos de silencio y duraciones de envolventes de sintetizadores para que el tempo coincida. El efecto `:slicer` también necesita esto, ya que la opción `phase:` se mide en beats, en vez de segundos. Por tanto, podemos arreglar el problema que tiene `loop_amen` arriba, cambiando el BPM para que coincida con el del sample:

en: Let's apply all these ideas into a final example that only uses the `:slicer` FX to create an interesting combination. Go ahead, start changing it and make it into your own piece!
es: Vamos a aplicar todas estas ideas en un ejemplo final que, usando el efecto `:slicer`, crea una combinación muy interesante. Adelante, empieza a cambiarlo y ¡conviértelo en tu propia pieza!

en: In this month's Sonic Pi tutorial we're going to take a look at how you can start treating Sonic Pi like a real instrument. We therefore need to start thinking of code in a completely different way. Live coders think of code in a similar way to how violinists think of their bow. In fact, just like a violinist can apply various bowing techniques to create different sounds (long slow motions vs short fast hits) we will explore five of the basic live coding techniques that Sonic Pi enables. By the end of this article you'll be able to start practicing for your own live coded performances.
es: En el tutorial de Sonic Pi de este mes, vamos a ver cómo puedes empezar a usar Sonic Pi como un instrumento de verdad. Por eso necesitamos empezar a pensar en programar de una forma totalmente distinta. L@s livecoders piensan en código de forma parecida l@s violinistas cuando piensan en su arco. De hecho, igual que un/a violinista puede usar varias técnicas de arco para crear distintos sonidos (movimientos lentos, golpes rápidos...), vamos a explorar las cinco técnicas básicas de livecoding que Sonic Pi nos proporciona. Al final de este artículo, serás capaz de empezar a practicar tus propias actuaciones de livecoding.

en: 1. Memorise the Shortcuts
es: 1. Memoriza los Atajos de Teclado

en: The first tip to live coding with Sonic Pi is to start using the shortcuts. For example, instead of wasting valuable time reaching for the mouse, moving it over to the Run button and clicking, you can simply press `alt` and `r` at the same time which is much faster and keeps your fingers at the keyboard ready for the next edit. You can find out the shortcuts for the main buttons at the top by hovering the mouse over them. See section 10.2 of the built-in tutorial for the full list of shortcuts.
es: El primer paso para hacer livecoding con Sonic Pi es empezar a usar los atajos de teclado. Por ejemplo, en vez de perder tiempo alcanzando el ratón, poniéndolo encima del botón de Ejecutar y haciendo click, puedes pulsar `alt` y `r` al mismo tiempo, que es mucho más rápido y mantiene tus dedos en el teclado, preparados para el siguiente cambio en el código. Puedes encontrar los atajos de teclado para los botones principales de la barra superior colocando el ratón encima de ellos. Mira la sección 10.2 del tutorial incluido en Sonic Pi para una lista completa de atajos de teclado.

en: When performing, one fun thing to do is to add a bit of flair with your arm motion when hitting shortcuts. For example, it's often good to communicate to the audience when you're about to make a change - so embellish your movement when hitting `alt-r` just like a guitarist would do when hitting a big power chord.
es: Cuando estás tocando en un concierto, algo divertido que puedes probar es añadirle un poco de estilo al movimiento de tu brazo cuando hagas los atajos de teclado. Por ejemplo, normalmente es bueno comunicar al público cuándo vas a hacer un cambio - así que embellece tu movimiento cuando escribas `alt-r`, igual que haría un/a guitarrista al tocar un power chord.

en: 2. Manually Layer your Sounds
es: 2. Crea tus Sonidos por Capas a Mano

en: Now you can trigger code instantly with the keyboard, you can instantly apply this skill for our second technique which is to layer your sounds manually. Instead of 'composing' using lots of calls to `play`, and `sample` separated by calls to `sleep` we will have one call to `play` which we will manually trigger using `alt-r`. Let's try it. Type the following code into a fresh buffer:
es: Ahora que puedes lanzar código directamente con el teclado, puedes aplicar esta habilidad de forma inmediata a nuestra segunda técnica, que consiste en crear tus sonidos por capas de forma manual. En vez de 'componer' usando un montón de llamadas a `play` y `sample` separadas por llamads a `sleep`, vamos a tener una sola llamada a `play`, que vamos a disparar de forma manual usando `alt-r`. Vamos a probarlo. Escribe el siguiente código en un búfer vacío:

en: Now, hit `Run` and whilst the sound is playing, modify the code in order to drop down four notes by changing it to the following:
es: Ahora, dale a `Ejecutar`, y mientras se reproduce el sonido, modifica el código para quitar las cuatro notas, cambiándolo al siguiente:

en: Now, hit `Run` again, to hear both sounds playing at the same time. This is because Sonic Pi's `Run` button doesn't wait for any previous code to finish, but instead starts the code running at the same time. This means you can easily layer lots of sounds manually with minor or major modifications between each trigger. For example, try changing both the `note:` and the `cutoff:` opts and then re-trigger.
es: Ahora, dale a `Ejecutar` de nuevo, para escuchar ambos sonidos sonando al mismo tiempo. Esto pasa porque el botón de `Ejecutar` de Sonic Pi no espera a que el código anterior acabe, sino que empieza a ejecutar el código a la vez. Esto significa que puedes colocar fácilmente un montón de capas de sonidos de forma manual con modificaciones más o menos pequeñas entre cada ejecución. Por ejemplo, prueba a cambiar las opciones `note:` y `cutoff:` y vuelve a ejecutar el código.

en: You can also try this technique with long abstract samples. For example:
es: También puedes probar esta técnica con ejemplos más largos y abstractos. Por ejemplo:

en: Try starting the sample off, and then progressively halving the `rate:` opt between hitting `Run` from `1` to `0.5` to `0.25` to `0.125` and then even try some negative values such as `-0.5`. Layer the sounds together and see where you can take it. Finally, try adding some FX.
es: Prueba a empezar el sample apagado, y divide a la mitad la opción `rate:` entre cada ejecución, de `1` a `0.5`, luego a `0.25`, luego a `0.125`, e incluso, prueba valores negativos como `-0.5`. Deja todos los sonidos juntos, uno encima de otro, a ver hasta dónde puedes llegar. Finalmente, prueba a añadir algún efecto.

en: When performing, working with simple lines of code in this way means that an audience new to Sonic Pi has a good chance to follow what you're doing and relate the code that they can read to the sounds they are hearing.
es: Cuando tocas en un concierto usando líneas de código sencillas (como hemos visto anteriormente), le permites al público nuevo a Sonic Pi seguir lo que estás haciendo, y relacionar el código que ven con los sonidos que escuchan.

en: When working with more rhythmic music, it can often be hard to manually trigger everything and keep good time. Instead, it is often better to use a `live_loop`. This provides repetition for your code whilst also giving the ability to edit the code for the next time round the loop. They also will run at the same time as other `live_loop`s which means you can layer them together both with each other and manual code triggers. Take a look at section 9.2 of the built-in tutorial for more information about working with live loops.
es: Cuando trabajas con música más rítmica, suele ser complicado cambiar todo manualmente y mantener el tempo. Lo que se suele hacer en estos casos, es usar un `live_loop`. Esto le proporciona repetición a tu código, y te permite editar el código para la siguiente vuelta del bucle. Además, se ejecutan a la vez que otros `live_loops`, lo que significa que puedes hacer que suenen juntos entre sí y con código disparado manualmente. Mira la sección 9.2 del tutorial incluido en Sonic Pi para más información sobre cómo trabajar con live loops.

en: When performing, remember to make use of `live_loop`'s `sync:` opt to allow you to recover from accidental runtime mistakes which stop the live loop running due to an error. If you already have the `sync:` opt pointing to another valid `live_loop`, then you can quickly fix the error and re-run the code to re-start things without missing a beat.
es: Cuando toques, recuerda usar la opción `sync:` de los `live_loop`'s, que te permite recuperarte de errores de ejecución accidentales cuando éstos paran la ejecución de tu live loop. Si tienes la opción `sync:` apuntando a algún otro `live_loop` válido, entonces puedes arreglar el error rápidamente y ejecutar de nuevo el código para empezar otra vez sin perder un solo beat.

en: After you run this code, all existing and new sounds will have a low pass filter applied to them and will therefore sound more muffled. Note that this means that the new mixer values stick until they are changed again. However, if you want, you can always reset the mixer back to its default state with `reset_mixer!`. Some of the currently supported opts are: `pre_amp:`, `lpf:` `hpf:`, and `amp:`. For the full list, see the built-in docs for `set_mixer_control!`.
es: Cuando hayas ejecutado tu código, todos los sonidos existentes y nuevos tendrán un filtro de paso bajo aplicado, y por tanto sonarán más apagados. Fíjate en que esto significa que los nuevos valores del mezclador se quedan hasta que puedan ser cambiados de nuevo. Sin embargo, si quieres, siempre puedes resetear el mezclador a su estado original con `reset_mixer`. Algunas de las opciones permitidas actualmente son: `pre_amp:`, `lpf:`, `hpf:` y `amp:`. Para la lista completa, mira los documentos incluidos de Sonic Pi; busca `set_mixer_control`.

en: Use the mixer's `*_slide` opts to slide one or many opts values over time. For example, to slowly slide the mixer's low pass filter down from the current value to 30, use the following:
es: Usa las opciones `*_slide` del mezclador para deslizar el valor de una o varias opciones a lo largo del tiempo. Por ejemplo, si quieres deslizar el filtro de paso bajo del mezclador bajando desde el valor actual (30), usa esto:

en: You can then slide quickly back to a high value with:
es: Puedes volver a deslizar el valor a un valor alto rápidamente con:

en: When performing, it's often useful to keep a buffer free for working with the mixer like this.
es: Cuando tocas, suele ser útil el tener un búfer libre para que puedas trabajar con el mezclador de esta forma.

en: The most important technique for live coding is practice. The most common attribute across professional musicians of all kinds is that they practice playing with their instruments - often for many hours a day. Practice is just as important for a live coder as a guitarist. Practice allows your fingers to memorise certain patterns and common edits so you can type and work with them more fluently. Practice also gives you opportunities to explore new sounds and code constructs.
es: La técnica más importante para hacer live coding es práctica. El atributo más común entre músic@s profesionales de todos los tipos es que practican tocando con sus instrumentos - normalmente durante varias horas al día. La práctica es tan importante para un/a live coder como para un/a guitarrista. La práctica le permite a tus dedos memorizar ciertos patrones y ediciones comunes; de esa forma puedes escribir y trabajar con ellos con mayor fluidez. La práctica también te da oportunidades para explorar nuevos sonidos y nuevas construcciones de código.

en: When performing, you'll find the more practice you do, the easier it will be for you to relax into the gig. Practice will also give you a wealth of experience to draw from. This can help you understand which kinds of modifications will be interesting and also work well with the current sounds.
es: Con el tiempo, te darás cuenta de que cuanto más practiques, más podrás relajarte en directo. La práctica también te da experiencia. Esto te ayudará a entender mejor qué cambios puedes hacer en tu código que suenen interesantes y que encajen con el resto de sonidos de tu canción.

en: Last month we took a look at five important techniques for mastering live coding - in other words, we explored how we could use Sonic Pi to approach code in the same way we would approach a musical instrument. One of the important concepts that we discussed was practice. This month we're going to take a deeper dive into understanding why live coding practice is important and how you might start.
es: El último mes le echamos un vistazo a cinco técnicas importantes para manejar bien el live coding; en otras palabras, exploramos cómo podemos usar Sonic Pi para hacer código, igual que usaríamos un instrumento musical. Uno de los conceptos que mencionamos es el de la práctica. Este mes vamos a sumergirnos en más código, y vamos a entender por qué practicar live coding es importante, y cómo podrías empezar.

en: Practice regularly
es: Practica regularmente

en: The most important piece of advice is to make sure you practice regularly. As a rule I typically practice for 1-2 hours a day, but 20 mins is just fine when you're starting out. Little but often is what you're aiming for - so if you can only manage 10 minutes, that's a great start.
es: El mejor consejo que te puedo dar es que te asegures de practicar de forma regular. Por norma, suelo practicar 1 o 2 horas cada día, pero con 20 minutos es suficiente para empezar. Estamos buscando practicar poquito pero cada día; así que si sólo puedes dedicarle 10 minutos, sigue siendo un buen comienzo.

en: Practice tip #1 - start to develop a practice routine. Find a nice time in the day that works for you and try and practice at that time as many days of the week as you can. Before long you'll be looking forward to your regular session.
es: Consejo de práctica nº 1 - empieza a desarrollar una rutina de práctica. Encuentra un buen momento del día que funcione bien para ti, y practica en ese tiempo tantos días de la semana como puedas. Pronto estarás contando las horas para tu sesión de práctica diaria.

en: Learn to Touch Type
es: Aprende Mecanografía Táctil

en: If you watch a professional musician performing on stage you'll likely notice a few things. Firstly, when they play they don't stare at their instrument. Their fingers, arms and bodies know which keys to press, strings to pluck or drums to hit without them having to think about it too much. This is known as "muscle memory" and although it might sound like something only professionals can do - it's just the same as when you first learned to walk or ride a bike - practicing through repetition. Live coders use muscle memory to free their minds from having to think about where to move their fingers so they can focus on the music. This is called touch-typing - typing without having to look at the keyboard.
es: Si ves tocar a un/a músic@ profesional tocando en directo, probablemente te darás cuenta de varias cosas. En primer lugar, cuando tocan no miran su instrumento. Sus dedos, brazos y su cuerpo entero saben qué teclas pulsar, qué cuerdas rasguear o qué tambores percutir, sin tener que pensarlo mucho. Esto se conoce como "memoria muscular" y, aunque suene como algo que sólo hacen l@s profesionales, es igual que cuando aprendiste a andar o a montar en bicicleta; práctica a través de la repetición. L@s live coders usan su memoria muscular para liberar sus mentes; no tienen que pensar dónde mover sus dedos, así que pueden centrarse en la música. Esto se conoce como touch typing o mecanografía táctil - escribir sin mirar al teclado.

en: Practice tip #2 - learn how to touch type. There are many apps, websites and even games which can help you achieve this. Find one you like the look of and stick at it until you can code without looking down.
es: Consejo de práctica nº 2 - aprende mecanografía táctil. Hay muchas apps, páginas web e incluso juegos que te pueden ayudar a conseguirlo. Encuentra uno que te guste, y úsalo de forma regular hasta que puedas programar sin mirar al teclado.

en: Code whilst standing
es: Programa de pie

en: The body of a musician is conditioned for playing their instrument. For example, a trumpet player needs to be able to blow hard, a guitar player needs to be able to grip the fretboard with strength and a drummer needs to be able to continually hit the drums for long periods of time. So, what's physical about live coding? Just like DJs, live coders typically perform whilst standing up and some even dance whilst they code! If you practice live coding whilst sitting at a desk and then have to get up and stand at a gig, you'll likely find the difference very difficult and frustrating.
es: El cuerpo de un/a músic@ está acondicionado para tocar su instrumento. Por ejemplo, un/a trompetista necesita soplar fuerte, un/a guitarrista necesita agarrar el mástil con fuerza, y un/a baterista necesita golpear la batería durante largos periodos de tiempo. ¿Y qué hay de corporal en el live coding? Como l@s DJs, l@s live coders suelen tocar de pie; ¡algun@s incluso bailan mientras programan! Si practicas live coding sentad@ en tu mesa y luego tienes que estar de pie cuando llegues al concierto, vas a notar la diferencia, y se te va a hacer difícil y frustrante.

en: Practice tip #3 - stand whilst you practice. The easiest way to do this is to use a standing height desk. However, if like me you don't have one at home, there's a couple of low-fi options. The approach I take is to use an ironing board which happens to work rather well. Another is to stack some boxes or large books on a normal desk and place your keyboard on top of that. Also, make sure you stretch before you start practicing and try and dance a little during the session. Remember, nobody is watching you, so have fun and you'll feel much more natural on stage.
es: Consejo de práctica nº 3 - ponte de pie mientras practicas. La forma más fácil de hacerlo es usar un escritorio de altura regulable. No obstante, si eres como yo y no tienes uno en casa, hay varios apaños que puedes hacer. Lo que suelo hacer yo es usar una tabla de planchar, que funciona bastante bien. También puedes apilar varias cajas o libros grandes en un escritorio normal, y poner tu teclado encima. Asegúrate también de estirarte cuando antes de empezar a practicar, e intenta moverte (o bailar) un poco durante la sesión. Recuerda, nadie te está mirando, así que diviértete, y te sentirás mucho más natural en el escenario.

en: Practice setting up
es: Montando tu práctica

en: Most instruments require some assembly and tuning before they can be played. Unless you're a rockstar with a bus full of roadies, you'll have to set up your own instrument before your gig. This is often a stressful time and it is easy for problems to occur. One way to help with this is to incorporate the setup process into your practice sessions.
es: La mayoría de los instrumentos necesitan ser montados y afinados antes de tocar. A no ser que seas una estrella del rock con un autobús lleno de encargad@s de equipo, serás tú quien monte su instrumento antes de cada concierto. El momento de montar el instrumento suele ser estresante, y es fácil que ocurra algún problema. Una forma de suavizar esta situación en los conciertos es que incluyas el proceso de puesta a punto en tus sesiones de práctica.

en: Practice tip #4 - treat setting up as an important part of your practice. For example, have a box or bag that you can keep your Raspberry Pi and keyboard in etc. Before each practice session, take out all the parts, connect everything, and work through the boot process until you have Sonic Pi running and can make sounds. Once you've finished practicing, take the time to carefully pack everything away afterwards. This may take some time at first, but before long you'll be able to setup and pack everything away incredibly quickly without having to think about it.
es: Consejo de práctica nº 4 - montar tu equipo también forma parte de tu práctica. Por ejemplo, encuentra una caja o una bolsa donde puedas dejar tu Raspberry Pi, tu teclado, etc. Antes de cada sesión de práctica, saca todas las partes, conecta todo, enciende tu Raspberry Pi... así hasta que tengas Sonic Pi encendido y puedas hacer música. Cuando hayas acabado de tocar, tómate tu tiempo para guardar todo en su sitio. Esto te puede llevar algo de tiempo al principio, pero antes de que te des cuenta, serás capaz de montar y desmontar tu equipo muy rápido, sin pensar.

en: Experiment Musically
es: Experimenta Musicalmente

en: Once you've set up and are ready to start making music, you might find yourself struggling to know where to start. One problem many people face is that they might have a good idea of the kinds of sounds they want to make, but are frustrated that they can't produce them. Some people don't even know what kind of sounds they want to make! The first thing to do is not to worry - this is very common and happens to every musician - even if they've been practicing for a long time. It is much more important to be making sounds you don't like than not making any sounds at all.
es: Una vez hayas montado todo y estés list@ para empezar a tocar, puede que te cueste ver por dónde empezar. Un problema que suele tener la gente es que imaginan qué música quieren hacer pero no saben cómo tocarla, lo que les frustra. ¡Hay gente que no sabe qué música quiere hacer! En primer lugar, no te preocupes; es muy normal y le pasa a cualquier músic@ (incluso si llevan practicando mucho tiempo). Es mucho mejor hacer música que no te gusta exactamente, que no hacer música.

en: Practice tip #5 - spend time making sounds and music you don't like. Try to make time to explore new sounds and ideas. Don't worry that it might sound terrible if it's not the style you're looking for. When you're experimenting like this you increase the chance of stumbling over a sound or combination of sounds which you love! Even if 99% of the sounds you make are bad, that 1% might be the riff or intro to your new track. Forget the things you don't like and remember the parts you do. This is even easier when you're making music with code - just hit save!
es: Consejo de práctica nº 5 - dedica parte de tu tiempo a hacer música que no te guste. Tómate tu tiempo para explorar nuevos sonidos e ideas. No te preocupes porque pueda sonar mal si no es el estilo que te gusta. Cuando experimentas de esta forma, ¡aumentas la probabilidad de encontrarte con música que te encante! Aunque el 99% de la música que hagas suene mal, ese 1% restante puede ser el riff o la introducción de tu nueva canción. Olvídate de las partes que no te gusten, y recuerda las que sí te hayan gustado. Cuando haces música con código es todavía más fácil: ¡sólo tienes que darle a Guardar!

en: Hear the Code
es: Escucha el Código

en: Practice tip #6 - write some code into Sonic Pi but don't hit the Run button. Instead, try to imagine what sound it is going to produce. Then, hit Run, listen, and think about what you got right and what you didn't. Keep repeating this until it become a natural part of your coding process. When I practice I normally have a good idea of what the code will sound like. However, I still am occasionally surprised, and then I'll stop and spend some time thinking about why I was wrong. Each time this happens, I learn new tricks which allow me to express myself in new ways.
es: Consejo de práctica nº 5 - escribe código en Sonic Pi, pero no le des todavía a Ejecutar. Intenta imaginarte qué va a sonar con ese código. Cuando lo tengas, dale a Ejecutar, escucha, y piensa en qué acertaste y en qué te equivocaste. Repite este proceso hasta que se convierta en una parte natural de tu proceso creativo. Yo cuando practico suelo tener una idea bastante clara de cómo va a sonar mi código. Sin embargo, hay veces en las que me sorprendo con lo que suena; en ese momento paro y pienso en dónde me he equivocado. Cada vez que pasa esto, aprendo nuevos trucos que me permiten expresarme de nuevas formas.

en: Remove all distractions
es: Elimina todas las distracciones

en: A common problem when practicing is to become distracted with other things. Practicing is hard and requires real discipline regardless of the kind of music you're making - from jazz to classical to EDM. If you're struggling to get started or make progress, it's often too easy to hop on social media, or look something up on the internet etc. If you've set yourself a target of 20 minutes of practice, it's important to try and spend all that time being as productive as possible.
es: Un problema muy común al practicar es distraerte con otras cosas. Practicar es duro y requiere disciplina, da igual el estilo que toques - desde jazz hasta clásica o electrónica. Si te cuesta empezar a tocar o progresar con lo que tienes, es fácil que te pongas a ver las redes sociales, que mires cosas en Internet, etc. Si te has planificado para practicar 20 minutos, es importante que intentes dedicar ese tiempo de forma productiva.

en: Practice tip #7 - before you start practicing remove as many distractions as possible. For example, disconnect from the internet, put your phone in another room and try to practice in a quiet place where you're unlikely to be disturbed. Try to focus on coding music and you can return to your distractions when you've finished.
es: Consejo de práctica nº 7 - antes de empezar a practicar, intenta deshacerte de todas las distracciones que puedas. Por ejemplo, desconéctate de Internet, deja tu móvil en otro cuarto, e intenta practicar en un sitio en silencio, donde no te vayan a molestar. Intenta concentrarte en escribir tu música; siempre puedes a tus distracciones cuando acabes.

en: Keep a practice diary
es: Escribe un diario de práctica

en: When you are practicing, you'll often find your mind is full of new exciting ideas - new musical directions, new sounds to try out, new functions to write, etc. These ideas are often so interesting that you might stop what you're doing and start working on the idea. This is another form of distraction!
es: Cuando practiques, tu mente estará llena de ideas nuevas: nuevas direcciones en tu estilo musical, nuevos sonidos que quieres probar, nuevas funciones para escribir, etc. Estas ideas suelen ser tan interesantes que puede que dejes de hacer lo que estés haciendo, para ponerte a trabajar en esas ideas. ¡Esta es otra forma de distracción!

en: Practice tip #8 - keep a practice diary by your keyboard. When you get an exciting new idea, temporarily pause your practice session, quickly jot the idea down, then forget about it and carry on practicing. You can then spend some quality time thinking about and working on your ideas after you've finished practicing.
es: Consejo de práctica nº 8 - escribe un diario de práctica con tu teclado. Cuando tengas una nueva idea, para tu sesión de práctica unos segundos, escribe la idea rápidamente, y olvídate de ella y sigue practicando. Así puedes dedicar tiempo más tarde para pensar en tus ideas, cuando hayas acabado de practicar.

en: Try to establish a practice routine which incorporates as many of these ideas as possible. Try to keep the sessions as fun as possible but be aware that some practice sessions will be hard and feel a little like work. However, it will all be worth it once you've created your first piece or given your first performance. Remember, practice is the key to success!
es: Intenta establecer una rutina de práctica que incorpore todas las ideas nuevas que puedas. Intenta que las sesiones sean divertidas, pero ten en cuenta que la práctica puede ser dura y requerir bastante trabajo en ocasiones. Sin embargo, todo esto merecerá la pena cuando hayas creado tu primera pieza, o cuando hayas tocado tu primer concierto. Recuerda, ¡la práctica es la clave del éxito!

en: When people discover Sonic Pi, one of the first things they learn is how simple it is to play pre-recorded sounds using the `sample` function. For example, you can play an industrial drum loop, hear the sound of a choir or even listen to a vinyl scratch all via a single line of code. However, many people don't realise that you can actually vary the speed that the sample is played back at for some powerful effects and a whole new level of control over your recorded sounds. So, fire up a copy of Sonic Pi and let's get started stretching some samples!
es: Cuando la gente descubre Sonic Pi, una de las primeras cosas que aprenden es lo fácil que resulta tocar sonidos pre-grabados usando la función `sample`. Por ejemplo, puedes tocar un loop de batería con sonido de tecno industrial, escuchar el sonido de un coro, o incluso oír un tocadiscos... todo con una sola línea de código. Sin embargo, mucha gente no se da cuenta de que puedes cambiar la velocidad del sample que estás tocando, consiguiendo efectos muy chulos y un logrando un nuevo nivel de control de tus sonidos grabados. Ahora, abre Sonic Pi y, ¡vamos a estirar samples!

en: To modify the playback rate of a sample we need to use the `rate:` opt:
es: Para cambiar la velocidad a la que suena un sample (playback rate), usamos la opción `rate:`:

en: If we specify a `rate:` of `1` then the sample is played back at the normal rate. If we want to play it back at half speed we simply use a `rate:` of `0.5`:
es: Si escribimos un `rate:` de `1`, el sample suena a la velocidad normal. Si queremos tocarlo a la mitad de velocidad, sólo tenemos que usar un `rate:` de `0.5`:

en: Speeding Samples Up
es: Acelerando las muestras

en: In addition to making the sound longer and lower using a small rate, we can use higher rates to make the sound shorter and higher. Let's play with a drum loop this time. First, take a listen to how it sounds at the default rate of `1`:
es: Además de hacer el sonido más largo y más grave usando una velocidad baja, podemos usar velocidades altas para hacer el sonido más corto y más agudo. Ahora vamos a tocar con un loop de batería. Primero, escucha cómo suena con la velocidad por defecto de `1`:

en: Now, let's speed it up a little:
es: Ahora, vamos a acelerarlo un poco:

en: Ha! We just moved musical genres from old-skool techno to jungle. Notice how the pitch of each drum hit is higher as well as how the whole rhythm speeds up. Now, try even higher rates and see how high and short you can make the drum loop. For example, if you use a rate of `100`, the drum loop turns into a click!
es: ¡Ja! Acabamos de pasar de tecno de la vieja escuela al jungle. Fíjate en cómo aumenta la altura de cada nota, y también en cómo se acelera el ritmo. Ahora, prueba con velocidades todavía más altas, y averigua cómo de alto y de corto puedes hacer el loop de batería. Por ejemplo, si usas una velocidad de `100`, ¡el loop se convierte en un click!

en: Reverse Gear
es: Al Revés

en: Now, I'm sure many of you are thinking the same thing right now... "what if you use a negative number for the rate?". Great question! Let's think about this for a moment. If our `rate:` opt signifies the speed with which the sample is played back, `1` being normal speed, `2` being double speed, `0.5` being half speed, `-1` must mean backwards! Let's try it on a snare. First, play it back at the normal rate:
es: Seguro que much@s estáis pensando en lo mismo ahora... "¿y qué pasa si usas un número negativo para la velocidad? ¡Muy buena pregunta! Vamos a pensar un momento. Si nuestra opt `rate:` representa la velocidad a la que se reproduce nuestro sample, `1` es velocidad normal, `2` es el doble de velocidad, y `0.5` es la mitad de velocidad, entonces, ¡con `-1` debe sonar al revés! Vamos a probar con una caja de batería. Primero, toca el sample a la velocidad normal:

en: Now, play it backwards:
es: Ahora, ejecutado al revés:

en: Of course, you can play it backwards twice as fast with a rate of `-2` or backwards at half speed with a rate of `-0.5`. Now, play around with different negative rates and have fun. It's particularly amusing with the `:misc_burp` sample!
es: Por supuesto, puedes tocarlo al revés y al doble de velocidad con una velocidad de `-2`, o puedes tocarlo al revés a la mitad de velocidad con un `rate:` de `-0.5`. Prueba con distintos valores negativos y diviértete. ¡Suena especialmente curioso con el sample `:misc_burp`!

en: One of the effects of rate modification on samples is that faster rates result in the sample sounding higher in pitch and slower rates result in the sample sounding lower in pitch. Another place you may have heard this effect in every day life is when you're cycling or driving past a beeping pedestrian crossing - as you're heading towards the sound source the pitch is higher than when you're moving away from the sound - the so-called Doppler effect. Why is this?
es: Uno de los efectos de modificar la velocidad en los samples es que cuanta mayor es la velocidad, más agudo suena el sample en altura; a menor velocidad, más grave suena. Puede que hayas escuchado este efecto en tu día a día, cuando vas en bicicleta o en coche y pasas un paso de cebra con pitido; a medida que te acercas a la fuente del sonido, la altura es mayor que cuando estabas más lejos del paso de cebra. Esto se conoce como efecto Doppler. ¿Por qué ocurre?

en: Let's consider a simple beep which is represented by a sine wave. If we use an oscilloscope to plot a beep, we'll see something like Figure A. If we plot a beep an octave higher, we'll see Figure B and an octave lower will look like Figure C. Notice that the waves of higher notes are more compact and the waves of lower notes are more spread out.
es: Veamos un pitido sencillo (beep) representado con una onda de seno. Si usamos un osciloscopio para generar una gráfica del beep, veremos algo parecido a la Figura A. Si dibujamos un beep una octava más agudo, veremos la Figura B, y con una octava más se vería como en la Figura C. Fíjate en que las ondas de notas más agudas son más compactas, y que las notas más graves están más separadas.

en: A sample of a beep is nothing more than a lot of numbers (x, y, coordinates) which when plotted onto a graph will re-draw the original curves. See figure D where each circle represents a coordinate. To turn the coordinates back into audio, the computer works through each x value and sends the corresponding y value to the speakers. The trick here is that the rate at which the computer works through the x numbers does not have to be the same as the rate with which they were recorded. In other words, the space (representing an amount of time) between each circle can be stretched or compressed. So, if the computer walks through the x values faster than the original rate, it will have the effect of squashing the circles closer together which will result in a higher sounding beep. It will also make the beep shorter as we will work through all the circles faster. This is shown in Figure E.
es: El sample de un beep sólo es un montón de números (coordenadas x,y) que dibujan las curvas originales del sonido que se grabó. Mira la Figura D, donde cada círculo representa una coordenada. Para convertir las coordenadas a audio, el ordenador coge cada valor x y le envía su correspondiente valor y a los altavoces. El truco está en que el ordenador no tiene por qué procesar los valores de x y guardarlos al mismo tiempo. O sea, el hueco (la cantidad de tiempo) entre cada círculo se puede estirar o comprimir. Si el ordenador lee los valores de x más rápido que como sonaban en la vida real, los círculos se harán más pequeños y el beep sonará más agudo. También hará el beep más corto, porque pasamos por los círculos más rápido. Puedes ver este efecto en la Figura E.

en: Finally, one last thing to know is that a mathematician called Fourier proved that any sound is actually lots and lots of sine waves all combined together. Therefore, when we compress and stretch any recorded sound we're actually stretching and compressing many sine waves all at the same time in exactly this manner.
es: Por último, tal vez te interese saber que un matemático llamado Fourier demostró que cualquier sonido es en realidad muchas ondas de seno juntas. Por eso, cuando comprimimos y estiramos cualquier sonido grabado, lo que estamos haciendo en realidad es comprimir y estirar muchas ondas de seno al mismo tiempo.

en: As we've seen, using a faster rate will make the sound higher in pitch and a slower rate will make the sound lower in pitch. A very simple and useful trick is to know that doubling the rate actually results in the pitch being an octave higher and inversely halving the rate results in the pitch being an octave lower. This means that for melodic samples, playing it alongside itself at double/half rates actually sounds rather nice:
es: Hemos visto que con una velocidad (rate) más alta, el sonido suena más agudo; y que con una velocidad más baja, el sonido suena más grave. Hay un truco muy fácil y útil que tiene que ver con esto. Cuando duplicas la velocidad, el sonido suena una octava más alto; y al revés, si divides la velocidad por dos, el sonido suena una octava más bajo. Esto quiere decir que si duplicas / divides por dos la velocidad de un sample melódico, va a seguir sonando bastante bien:

en: However, what if we just want to alter the rate such that the pitch goes up one semitone (one note up on a piano)? Sonic Pi makes this very easy via the `rpitch:` opt:
es: Pero, ¿y si queremos cambiar el rate para que el sample sólo suene un semitono (una tecla más arriba en el piano) más agudo, en vez de una octava entera? Podemos hacerlo fácilmente con Sonic Pi usando la opción `rpich:`:

en: If you take a look at the log on the right, you'll notice that an `rpitch:` of `3` actually corresponds to a rate of `1.1892` and a `rpitch:` of `7` corresponds to a rate of `1.4983`. Finally, we can even combine `rate:` and `rpitch:` opts:
es: Si miras los mensajes del registro (log) a la derecha, verás que un `rpitch:` de `3` se corresponde con un rate de `1.1892`, y un `rpitch` de `7` se corresponde con un rate de `1.4983`. Por último, podemos combinar los opts `rate:` y `rpitch:`:

en: A.18 Sound Design - Additive Synthesis
es: A.18 Diseño Sonoro - Síntesis Aditiva

en: Additive Synthesis
es: Síntesis Aditiva

en: Simple Combinations
es: Combinaciones Sencillas

en: Let's start with the most basic sound there is - the humble pure-toned sine wave:
es: Empecemos con el sonido más sencillo - la humilde y pura onda de seno:

en: Now, let's see how this sounds combined with a square wave:
es: Ahora, veamos cómo estos sonidos se combinan con una onda cuadrada:

en: Notice how the two sounds combine to form a new, richer sound. Of course, we don't have to stop there, we can add as many sounds as we need. However, we need to be careful with how many sounds we add together. Just like when we mix paints to create new colours, adding too many colours will result in a messy brown, similarly - adding too many sounds together will result in a muddy sound.
es: ¿Has visto cómo se han juntado los dos sonidos para formar uno más rico? Y no hay por qué parar ahí; podemos añadir tantos sonidos como queramos. En cualquier caso, hay que tener cuidado con cuántos sonidos juntamos. Cuando mezclamos muchos pigmentos para crear nuevos colores, acabamos con un color marrón muy feo; del mismo modo, mezclar muchos sonidos genera un sonido muy sucio.

en: Blending
es: Mezclando

en: Let's add something to make it sound a little brighter. We could use a triangle wave at an octave higher (for that high bright sound) yet only play it at amp `0.4` so it adds something extra to the sound rather than taking it over:
es: Vamos a añadir algo al sonido que tenemos para hacerlo un poco más brillante. Podríamos usar una onda triangular una octava por encima (para obtener ese sonido brillante), y ponerle sólo `0.4` de amplitud (amp) para que añada al sonido en vez de taparlo:

en: Now, try creating your own sounds by combining 2 or more synths at different octaves and amplitudes. Also, note that you can play around with each synth's opts to modify each source sound before it is mixed in for even more combinations of sounds.
es: Ahora, prueba a crear tus propios sonidos combinando 2 o más sintetizadores, con distintas octavas y amplitudes. Fíjate también en que puedes jugar con las opciones de cada sintetizador para modificar cada fuente de sonido antes de mezclarla con el resto; así puedes conseguir más combinaciones de sonidos.

en: Detuning
es: Desafinación (detuning)

en: So far, when combining our different synths we've used either the same pitch or switched octave. How might it sound if we didn't stick to octaves but instead chose a slightly higher or lower note? Let's try it:
es: Hasta ahora, al combinar nuestros sintetizadores, sólo hemos usado la misma altura o hemos cambiado alguno de octava. ¿Cómo sonaría si en vez de restringirnos a octavas, usáramos notas un poco más agudas o un poco más graves? Vamos a probarlo:

en: If we detune our square waves by 0.7 notes we hear something that perhaps doesn't sound in tune or correct - a 'bad' note. However, as we move closer to 0 it will sound less and less out of tune as the pitches of the two waves get closer and more similar. Try it for yourself! Change the `detune:` opt value from `0.7` to `0.5` and listen to the new sound. Try `0.2`, `0.1`, `0.05`, `0`. Each time you change the value, take a listen and see if you can hear how the sound is changing. Notice that low detune values such as `0.1` produce a really nice 'thick' sound, with both slightly different pitches interacting with each other in interesting, often surprising, ways.
es: Si desafinamos nuestras ondas cuadradas 0.7 notas, podemos escuchar que suenan 'mal'. Sin embargo, a medida que nos acercamos a 0, sonará cada vez mejor, ya que la altura de las dos ondas se parece cada vez más. ¡Pruébalo! Cambia el valor del opt `detune:` de `0.7` a `0.5` y escucha el nuevo sonido. Prueba con `0.2`, `0.1`, `0.05`, `0`. Cada vez que cambies el valor, dale a Ejecutar y comprueba cómo cambia el sonido. Fíjate en que los valores bajos de desafinación (detune) como `0.1` producen un sonido 'grueso' muy agradable; las alturas de las ondas interactúan de formas muy interesantes, y a menudo sorprendentes.

en: Another way we can finely craft our sound is to use a different envelope and options for each synth trigger. For example this will allow you to make some aspects of the sound percussive and other aspects ring out for a period of time.
es: También podemos pulir nuestro sonido usando distintas opciones y envolventes (envelope) para el disparador de cada sintetizador. Con esto puedes, por ejemplo, hacer que parte del sonido sea percusiva, y que otra parte resuene durante un rato.

en: In the example above I have mixed in a noisy percussive element to the sound along with some more persistent background rumbling. This was achieved firstly by using two noise synths with middling cutoff values (`90` and `100`) using short release times along with a noise with a longer release time but with a low cutoff value (which makes the noise less crisp and more rumbly.)
es: En el ejemplo de arriba, le he añadido un elemento percusivo y ruidoso al sonido; además, le he puesto un poco de ruido de fondo que dura un rato. Para ello, primero he usado dos sintetizadores de ruido con valores de corte (cutoff) normales (`90` y `100`) y con tiempos para soltar (release) cortos; además, he usado un sintetizador de ruido con un tiempo de release mayor pero con un valor de cutoff bajo (lo que hace al ruido menos brillante y más resonante.)

en: A.19 Sound Design - Subtractive Synthesis
es: A.19 Diseño Sonoro - Síntesis Sustractiva

en: Subtractive Synthesis
es: Síntesis Sustractiva

en: This is the second in a series of articles on how to use Sonic Pi for sound design. Last month we looked at additive synthesis which we discovered was the simple act of playing multiple sounds at the same time to make a new combined sound. For example we could combine different sounding synths or even the same synth at different pitches to build a new complex sound from simple ingredients. This month we'll look at a new technique commonly called *subtractive synthesis* which is simply the act of taking an existing complex sound and removing parts of it to create something new. This is a technique which is commonly associated with the sound of analog synthesisers of the 1960s and 1970s but also with the recent renaissance of modular analog synths through popular standards such as Eurorack.
es: Este ese el segundo artículo de la serie, en la que veremos cómo usar Sonic Pi para hacer diseño sonoro. El último mes vimos la síntesis aditiva, y descubrimos que no es más que juntar muchos sonidos a la vez para crear un nuevo sonido combinado. Por ejemplo, podíamos combinar distintos sintetizadores, o incluso el mismo sintetizador con distinta altura, para crear un sonido muy complejo a partir de ingredientes sencillos. Este mes vamos a ver una nueva técnica conocida como *síntesis substractiva*, que es sencillamente coger un sonido complejo y quitarle partes para crear algo nuevo. Esta técnica está asociada al sonido de los sintetizadores analógicos de los 60 y los 70; también tuvo que ver con el renacimiento de los sintetizadores analógicos modulares, con estándares muy populares como el Eurorack.

en: Despite this sounding like a particularly complicated and advanced technique, Sonic Pi makes it surprisingly simple and easy - so let's dive right in.
es: Aunque parezca una técnica complicada o avanzada, Sonic Pi lo hace increíblemente fácil y sencillo... así que vamos a ello.

en: Complex Source Signal
es: Señal Fuente Compleja

en: For a sound to work well with subtractive synthesis, it typically needs to be fairly rich and interesting. This doesn't mean we need something hugely complex - in fact, just a standard `:square` or `:saw` wave will do:
es: Para que un sonido quede bien con síntesis sustractiva, debe ser bastante rico e interesante. Esto no significa que necesitemos algo enormemente complejo; de hecho, nos vale con una onda cuadrada (`:square`) o de sierra (`:saw`):

en: Notice that this sound is already pretty interesting and contains many different frequencies above `:e2` (the second E on a piano) which add to create the timbre. If that didn't make much sense to you, try comparing it with the `:beep`:
es: Note que este sonido ya es más interesante y contiene muchas frecuencias diferentes `:e2`(el segundo Mi del piano) que se añade para crear el timbre. Si esto no tiene mucho sentido para usted, intente compararlo con `:beep`:

en: As the `:beep` synth is just a sine wave, you'll hear a much purer tone and only at `:e2` and none of the high crispy/buzzy sounds which you heard in the `:saw`. It's this buzziness and variation from a pure sine wave that we can play with when we use subtractive synthesis.
es: Como el sintetizador `:beep` es sólo una onda de seno, escucharás un tono mucho más puro, con la nota `:e2` muy clara, y ningún otro ruido que la emborrone (lo que sí escucharías con una onda `:saw`). El zumbido y la variación de la onda pura de seno es lo que nos permite jugar cuando usamos síntesis sustractiva.

en: Once we have our raw source signal, the next step is to pass it through a filter of some kind which will modify the sound by removing or reducing parts of it. One of the most common filters used for subtractive synthesis is something called a low pass filter. This will allow all the low parts of the sound through but will reduce or remove the higher parts. Sonic Pi has a powerful yet simple to use FX system that includes a low pass filter, called `:lpf`. Let's play with it:
es: Ahora que tenemos nuestra señal fuente en bruto, el siguiente paso es pasarla por un filtro de algún tipo, que modifica el sonido quitando (o reduciendo) partes del mismo. Uno de los filtros de síntesis sustractiva más conocidos es el filtro de paso bajo (low pass filter). Este filtro deja pasar las partes graves del sonido, pero reduce o borra las partes agudas. Sonic Pi tiene un sistema de efectos sencillo y potente, que incluye un filtro de paso bajo llamado `:lpf` (de sus siglas en inglés, low pass filter). Vamos a probarlo:

en: with_fx :lpf, cutoff: 100 do
      synth :saw, note: :e2, release: 4
    end
es: with_fx :lpf, cutoff: 100 do 
      synth :saw, note: :e2, release: 4 
    end

en: If you listen carefully you'll hear how some of that buzziness and crispiness has been removed. In fact, all the frequencies in the sound above note `100` have been reduced or removed and only the ones below are still present in the sound. Try changing that `cutoff:` point to lower notes, say `70` and then `50` and compare the sounds.
es: Si te fijas escucharás cómo se ha quitado parte del zumbido del sonido. De hecho, todas las frecuencias del sonido por encima de la nota `100` han sido reducidas o borradas; sólo se han dejado las frecuencias agudas. Prueba a cambiar el valor del `cutoff:` a notas más bajas, por ejemplo `70` y luego `50`; compara los sonidos que producen.

en: Of course, the `:lpf` isn't the only filter you can use to manipulate the source signal. Another important FX is the high pass filter referred to as `:hpf` in Sonic Pi. This does the opposite to `:lpf` in that it lets the high parts of the sound through and cuts off the low parts.
es: Por supuesto, `:lpf` no es el único filtro que tienes para manipular la señal fuente. Otro efecto importante es el filtro de paso alto, llamado `:hpf` (por sus siglas en inglés, high pass filter) en Sonic Pi. Este hace lo contrario a `:lpf`, ya que deja pasar los agudos y corta los graves.

en: Notice how this sounds much more buzzy and raspy now that all the low frequency sounds have been removed. Play around with the cutoff value - notice how lower values let more of the original bass parts of the source signal through and higher values sound increasingly tinny and quiet.
es: Fíjate en cómo suena mucho más brillante y áspero ahora que has borrado las frecuencias bajas. Experimenta con los valores de cutoff: escucha cómo se dejan pasar cada vez más bajos cuantos más bajos sean los valores del filtro, y cómo los agudos van sonando cada vez más pequeños y callados.

en: Filter Modulation
es: Modulación del filtro

en: So far we've just produced fairly static sounds. In other words, the sound doesn't change in any way for the entirety of its duration. Often you might want some movement in the sound to give the timbre some life. One way to achieve this is via filter modulation - changing the filter's options through time. Luckily Sonic Pi gives you powerful tools to manipulate an FX's opts through time. For example, you can set a slide time to each modulatable opt to specify how long it should take for the current value to linearly slide to the target value:
es: Hasta ahora sólo hemos producido sonidos estáticos. En otras palabras, el sonido no cambia a lo largo de su duración. Normalmente querrás algo de movimiento en tu sonido para darle más vida a su timbre. Una forma de conseguir esto es con la modulación de filtros (cambiar las opciones del filtro a lo largo del tiempo). Por suerte, Sonic Pi te ofrece herramientas muy potentes para modificar las opciones de un efecto a lo largo del tiempo. Por ejemplo, puedes ponerle un tiempo de deslizamiento a la opción del sintetizador que quieras, siempre y cuando ésta permita modulación; esto le dice a la opción cuánto tarda su valor actual en desplazarse hasta un nuevo valor:

en: Let's finish by designing a function which will play a new sound created with subtractive synthesis. See if you can figure out what's going on here - and for the advanced Sonic Pi readers out there - see if you can work out why I wrapped everything inside a call to `at` (please send answers to @samaaron on Twitter).
es: Terminemos diseñando una función que ejecutará un nuevo sonido creado con síntesis sustractiva. Intente descubrir qué es lo que sucede - y para aquellos usuarios avanzados de Sonic Pi- vean si pueden descubrir por qué empaqueté todo en la llamada a `at` (por favor envíen sus respuestas a @samaaron en Twiter).

en: (This article was published in [issue 9 of the Hello World Magazine](https://helloworld.raspberrypi.org/issues/9))
es: (Este artículo se publicó en el [número 9 de la revista Hello World](https://helloworld.raspberrypi.org/issues/9))

en: ![Jylda Live Coding in the Sage Gateshead](../../../etc/doc/images/tutorial/articles/A.20-creative-coding-in-the-classroom/jylda-small.png) Jylda and Sam Aaron perform at the Thinking Digital Conference in the Sage Gateshead. Photo credit: TyneSight Photos.
es: ![Jylda Live Coding en el Sage Gateshead](../../../etc/doc/images/tutorial/articles/A.20-creative-coding-in-the-classroom/jylda-small.png) Jylda y Sam Aaron actúan en la Conferencia Thinking Digital en el Sage Gateshead. Fotografía: TyneSight Photos.

en: Getting started is as simple as:
es: Empezar es tan sencillo como:

en: To toggle the help system you can press `M-i`. However, a much more useful shortcut to know is `C-i` which will look up the word underneath the cursor and display the docs if it finds anything. Instant help!
es: Para aparecer el sistema de ayuda, presiona `M-i`. Sin embargo, un atajo mucho más útil es `C-i` que buscará la palabra debajo del cursor y mostrará los documentos si encuentra algo. ¡Ayuda instantánea!

en: `S-M-s` - Save contents of buffer to a file
es: `S-M-s` - Guarda los contenidos del búfer en un archivo

en: `S-M-o` - Load contents of buffer from a file
es: `S-M-o` - Carga los contenidos de un archivo en el búfer
