* Pasos
- Descargar y descomprimir
- Ir al directorio por terminal
- Dar permisos de ejecución a directorio
* Emacs
https://extemporelang.github.io/docs/guides/editor-support/
- Abrir emacs e instalar extempore-mode.
- Cargar sistema. El comando que correspondería acá es switch-to-extempore pero no reconoce la ruta. "Solución":
- en una terminal ir al directorio correspondiente y ejecutar ~./extempore~
- M-x extempore-connect : en el minibuffer dirá
Welcome to extempore!
; y, en la terminal,
INFO: server: accepted new connection to primary process
.
* Escribiendo
** Flujo
- Usuario modifica código
- Usuario envía a extempore
| extempore-send-dwim¹ | CTRL+META+X |
| extempore-send-region | CTRL+C CTRL+R |
| extempore-send-buffer | CTRL+C CTRL+B |
¹ (to evaluate current top-level form or region)
Recomiendo usar C-c C-r para llevar un control más fluído dentro de la ejecución. Maña mía, adquirida en el primer día de uso (reportaré si cambia).
** Comienzo
Abrir
scratch
. Es arbitrario usar este buffer, lo propongo porque afirma más aún la naturaleza efímera de la experiencia que se vive. Obviamente se puede usar un archivo guardado.
(sys:load "examples/sharedsystem/audiosetup.xtm")
** Patterns
https://extemporelang.github.io/docs/guides/pattern-language/
Estos son patrones que se repiten. Lo que indica que la línea o bloque se trata de un patrón es que al comienzo tiene
:>
. Copia la siguiente línea en scratch y...
(:> pat-1 2 0 (play syn1 @1 80 dur) (list 60 58 60 63))
envíala (sitúa el cursor en la línea y C-c C-r). Comenzará a sonar "dari dari dari dari dari da...". Es momento de editar la línea, tiempo real yeaaah!!, cambia el orden de los números que están después de list, luego envíala. Tómate el tiempo necesario para jugar más y asimilar lo sencillo que es. Para que se detenga cambia
:>
por
:|
y envía.
*** Estructura del bloque que crea el patrón
- the
:>
macro, which tells Extempore that the rest of this expression is a pattern
- the name of the pattern (in this case pat-1 but any valid scheme variable name is ok)
- the total length in beats of the pattern (in this case 2)
- the offset in beats of the pattern (in this case 0)
- the “pattern expression” (in this case (play syn1 @1 80 dur)) which is the expression which is evaluated at each “triggering” of the pattern
- one (or more) “pattern lists” (in this case (list 60 58 60 63)); these are lists of values which the pattern will loop through
| estado | nombre | largo de beats | offset de beat | patron | lista de patron |
|--------+--------+----------------+----------------+-----------------------+---------------------|
| :> | pat-1 | 2 | 0 | (play syn1 @1 80 dur) | (list 60 58 60 63)) |
*** Estructura del patrón
"For now you don't have to understand exactly what every part of the pattern expression (play syn1 @1 80 dur) means (in short, the arguments represent instrument, pitch, velocity and duration; there are other guides which explain it in much detail). The main thing to know is that each time the pattern expression is triggered the @1 will be replaced by successive values from the pattern list. First 60, then 58, then 60, then 63, then back to the beginning—in fact it will keep cycling through that list forever." Entonces:
| función | instrument | pitch | velocidad | duración |
|---------+------------+-------+-----------+----------|
| play | syn1 | @1 | 80 | dur |
*** Tiempo
Por defecto, la pista está a 120bpm. El tiempo en que se reproducen los sonidos del pattern dependerá del largo del beat y de largo de la nota.
La variable dur es el largo de la nota, proporcional a un beat. si dur > 1, el sonido se sobrepondrá al beat siguiente; si dur < 1, el sonido tendrá un silencio antes del siguiente beat.
En la documentación todo está explicado con más detalle.