Configurando una MacBook para usarse con TidalCycles

Esta es una guía, o el relato de mi experiencia instalando TidalCycles en una computadora MacBook Pro recién adquirida.

Para unas instrucciones de instalación más sintetizadas, favor de consultar: https://tidalcycles.org/getting_started.html#macos


Iniciamos con una Macbook Pro 13 con Sistema operativo OSX 10.8.5 que no tiene nada instalado (salvo Google Chrome).

Lo primero que descargué fue Haskell Core (64bit), cuyo requisito de instalación era haber instalado previamente XCode o command line tools for XCode.

Tuve que iniciar sesión con mi Apple ID, al sitio de desarrolladores de Apple.

Desde el AppStore, intenté descargar XCode, pero no pude, porque esa versión no es compatible; es para un sistema operativo más actualizado, de la versión OSX 10.13.6 en adelante. Me pasé a querer instalar command line tools.

Así que busqué información en la Red, y una primera sugerencia fue, desde la terminal, escribir: xcode-select –install (Sale un error: unknown command option “install”).

Siguiente sugerencia. Descargar Command Line Tools desde https://developer.apple.com/downloads/index.action

Ahí hay muchos archivos; el primero que bajé, XCode_10.1_Beta_3.xip, no funcionó. El error es:

“No se puede instalar Command Line Tools (macOS High Sierra versión 10.13) en este disco. Se requiere la versión 10.13 o posterior de OS X.”

En este punto de las cosas, quise saber cuál es el sistema operativo, que es OS X 10.8.5. En la información del sistema está el número de compilación 12F45, que busqué en internet y se corresponde con Mountain Lion, pero la placa que hay en “acerca de esta Mac”, no especifica que ese sistema operativo sea Mountain Lion. Sin embargo, todo está numerado de una forma en que no importa el nombre del sistema operativo; macOS va en orden, empezando en 10. 10 es Cheetah, 10.1 es Puma, 10.2 es Jaguar, 10.3 es Panther, 10.4 es Tiger, 10.5 es Leopard, 10.6 es Snow Leopard, 10.7 es Lion, 10.8 es Mountain Lion, 10.9 es Mavericks, 10.10 es Yosemite, 10.11 es El Capitan, 10.12 es Sierra, 10.13 es High Sierra, 10.14 es Mojave.

Descargué Command Line Tools (OSX Mountain Lion) – November 2012. Cuya descripción es:

“This package enables UNIX-style development via Terminal by installing command line developer tools, as well as Mac OSX SDK frameworks and headers. Many useful tools are included, such as Apple LLVM compiler, linker, and Make. If you use Xcode, these tools are also embedded within the Xcode IDE, and can be installed on your system using the Downloads preferences pane within Xcode4.5”

La instalación se realizó correctamente y ocupó 163.1 MB de memoria.

Para este punto de la historia, ya puedo eliminar las otras 9 descargas que no funcionaron; también la que sí funcionó, pues ya sé cómo buscarla.

Cuando se baja un archivo de internet, en el buscador hay una página de descargas, que es una manera de saber las descargas realizadas, pero para borrarlas, hay que abrir la carpeta de descargas y ahí borrar todos los archivos (ubicación: /Usuarios/macbookpro/Descargas).

Si no se hubiera podido hacer la instalación, primero que nada, me habría frustrado aún más de lo que ya estaba (porque ningún archivo que descargaba estaba sirviendo para la instalación). Luego habría reiniciado la máquina, para ver si por arte de magia todo se reparaba. Luego habría dejado de intentar. Y en otro caso muy clavado, habría sido cosa de averiguar los componentes que contiene el paquete Command Line Tools (como LLVM, linker y Make) e intentar instalarlos uno por uno.

Es una suerte poder usar otra computadora para hacer búsquedas y anotaciones, y que la nueva no se llene de información en el buscador. Yo creo que cuando ingresé mis contraseñas de gmail, es que las búsquedas que recientemente hice se registraron en la nueva computadora. Fue una sorpresa:

“¡Pero si yo nunca he ingresado a fciencias.unam.mx desde esta máquina!”

Cuando se instala Haskell, el buscador se redirecciona hacia file://localhost/Library/Haskell/doc/start.html

“Haskell Platform 8.4.3 for Mac OS X. Welcome to Haskell Platform. The platform consists of the Glasgow Haskell Compiler (GHC 8.4.3) and an extensive set of standard libraries and utilities with full documentation.”

 

Y de verdad; si no escribo esa dirección tal cual,  file://localhost/Library/Haskell/doc/start.html, no hay manera de que yo sepa en qué carpeta está ese archivo start.html:

Porque, supuestamente el localhost, está en la carpeta invisible Librería (O en ~/Librería/WebServer/Documents, o en ~/Sites).

Para acceder a Librería: Cmd + Shift G. Luego  ~/Librería.

Y supuestamente, Haskell también está instalado ahí mismo. En ~/Library/Frameworks/GHC.framework y ~/Library/Haskell.  Los ejecutables deberían estar en /usr/local/bin.

Dentro del folder Librería no existe una carpeta que se llame Frameworks  (a menos que sea invisible, porque no la veo). Y la máquina no me permite escribir ~/Library (Si lo intento, soy redirigida a ~/Librería. Lo que podría significar que no existe el folder Library, pero no necesariamente).

Me di a la tarea de checar cada folder en Librería. Estos son: Accounts, Application Support, Assistants, Audio, Caches, Calendars, ColorPickers, Colors, Composiciones, Containers, Cookies, Favoritos, FontCollections, Fonts, Google, iMovie, Input Methods, Internet Plug-Ins, iTunes, Keyboard Layouts, Keychains, LaunchAgents, Logs, Mail, Messages, Metadata, PreferencePanes, Preferences, Printers, PubSub, Safari, Saved Application State, Screen Savers, Sounds, Spelling, SynchedPreferences, Voices, WebKit. Más un archivo suelto, StickiesDatabase.

Así que quien sabe.

Luego, la versión más actualizada de Atom (el editor de texto), la 1.31, sólo es para sistemas operativos macOS 10.9 en adelante.

Tuve que descargar la versión 1.18.0 y fue una sutileza de un sitio web el haberme enterado de esta información (fue el comentario de una persona que quería hacer lo mismo que yo, lo preguntó en un foro de Atom y nadie le respondió; pero se tomó la molestia de contar la solución). Descargué la versión desde la página mac.filehorse.com.

¿Puedo actualizar el sistema operativo a macOS mojave? Una notificación automática me lo propuso, pero no he podido hacerlo debido a la conexión de internet. No hay señal.

Parece que no hay problema con instalar mojave si se cuenta con OS X 10.8 en adelante (que es mi caso).

La computadora Toshiba sí tiene señal y sí puede conectarse a internet, al mismo tiempo que la MacBook no ha tenido señal en unas tres ocasiones. Tengo disponibles dos conexiones a internet y me he tenido que cambiar de una a otra porque a veces en una sí hay señal y en la otra no; aunque a veces no llega señal a ninguna de las dos.También ocurre que la máquina Toshiba, estando conectada, se ha apagado unas tres ocasiones, mientras que la MacBook ha seguido prendida.

La computadora Toshiba no es muy ruidosa, pero sí emite algo de ruido. Y la MacBook es totalmente silenciosa.

Descargué la última versión de SuperCollider (la 3.9.3). Es un archivo .zip que se descomprime y crea una carpeta llamada SuperCollider, de donde lo único que resta hacer es entrar a ella y abrir el programa. Toda la carpeta se traslada a “Aplicaciones” (sería un desorden dejarlo en las descargas). Atom también fue trasladado a las aplicaciones, y para estos dos programas no supe cuánta memoria de espacio en la computadora ocupó la instalación, ya que no usaron el instalador. En las propiedades de la carpeta SuperCollider se me informa que ésta pesa 246.9 MB, mientras que Atom pesa 530.1 MB.

SuperCollider es un programa que no está autentificado con la AppStore, así que no se puede instalar, si el usuario no permite temporalmente descargar apps de cualquier sitio (en Preferencias del Sistema → Seguridad y Privacidad → General).

macOS mojave está instalado ya.

A continuación instalé Git. Al abrir la descarga, la instalación se hace en /usr/local/git, mientras que los symlinks están en /usr/local/bin y /usr/share/man. En efecto, lo pude comprobar.

A pesar de que ya había instalado Command Line Tools, al intentar instalar TidalCycles hicieron falta unas utilerías de gcc, pero ya con el nuevo sistema operativo andando, pude descargar Xcode (que pesa 6.7 GB).

Una cosa muy molesta en la computadora MacBook son las barras de navegación de internet. Aparecen, a veces moviendo las flechas del teclado; a veces haciendo click con el mouse, pero no deduje el algoritmo para atinarle siempre a este comportamiento. Así que, mejor activar estas barras para que sean mostradas de manera permanente (en Preferencias del Sistema → General).

Y listo, cabal install tidal funcionó.

Guardé la información de salida de la terminal, para revisar los datos de la instalación de Tidal si alguna vez lo necesito.

Hasta este momento, había estado utilizando el nombre de usuario y contraseña que venían por default con la computadora. Lo mismo el directorio de inicio (macbookpro) y el nombre de la cuenta (macbookpro).

Es decir, si el directorio de inicio del usuario Ofelia se llama macbookpro, entonces, los documentos, descargas, etc, de Ofelia se van almacenando en la carpeta /Usuarios/macbookpro. ¿No sería más fácil si el directorio de inicio también se llamara ofelia? Pues sí. Esto se hace en Preferencias del Sistema → Usuarios y Grupos

Luego, cambiar el nombre de la cuenta no se puede hacer desde esa misma cuenta. Hay que crear otra cuenta de administrador y acceder desde ella.

Cuando cambié el nombre del directorio de inicio, en /Usuarios se añadió una nueva carpeta /Usuarios/ofelia y los archivos que antes había guardado, como la información de instalación de Tidal, se quedaron en la carpeta anterior, /Usuarios/macbookpro. Pero ya no tuve que reinstalar Atom, SuperCollider o XCode.

Finalmente, también quise cambiar el Nombre de la computadora. Esto se hace en Preferencias del Sistema → Compartir.


Nota: A veces, en el presente texto, fue inevitable repetir palabras como “instalar”, “descargas”, o “cuentas”, en un mismo párrafo, pues no encontré buenos sinónimos.

Sesión de Estudio

Felizmente comienzo el año, compartiendo música en donde yo y Todd Clouser hicimos una colaboración. Fue una improvisación en una sesión de estudio que duró cinco horas, sin contar el tiempo de edición y mezcla, por supuesto. Y esta última estuvo a cargo de Todd.

Aquí la música:

 

Notas sobre Sampleos

Digamos que quisiera componer una pieza, y encima de ella improvisar en Tidal. Hay una serie de problemas importantes que hay que saber manejar, independientemente de la parte creativa. Son preguntas que una persona seguramente se hará, al querer controlar mejor el proceso y obtener buenos resultados.

Tomemos por ejemplo, mi live Coding Miserable Mix, en el que incorporé varias muestras de audio, de diversas longitudes, que se corresponden con las secciones de guitarras, el pad, voces o percusiones.

Es una canción que compuse a 110 pulsos por minuto. Así que, lo primero que hacer y muy importante es declarar el tempo con el que los samples funcionan correctamente:

bps (110/60) o cps(110/60).

Al componer la canción, escogí bps (110/60)

y un sampleo de guitarra lo ajusté así:

d4 $ slow 8 $ sound "guitar:2"

Porque la muestra de audio es tan larga que si sólo se escribe

d4 $ sound "guitar:2",

entonces por cada vuelta del ciclo de tiempo predeterminado, se instancia un sampleo nuevo, que se encima con el anterior, que todavía no terminaba de leerse en el momento para el que ya comenzó el siguiente. Así que se van traslapando los sonidos.

slow 8 suena bien con ese sonido, pero no significa que el sampleo sea ocho veces más largo que cada ciclo de tiempo en bps. De hecho es veinticuatro veces más largo. Sería más correcto escribir:

d4 $ slow 24 $ sound "guitar:2"

Pero se escucha mejor con slow 8, pues usando slow 24 se percibe muy abruptamente el momento en que termina el audio.

Otra pregunta:

Si yo quiero hacer un live coding sobre una canción de longitud de, digamos, 360 beats, y tengo un archivo de audio de esa extensión, que quiero incorporar a mi live coding, ¿cómo me aseguro de que el archivo suene de principio a fin una y sólo una vez?

¿Por qué no usar el siguiente código:

d8 $ slow 720 $ sound “__” ?

Es una manera. Pero no se tiene control sobre el momento en que empieza el sampleo, y lo que se está haciendo es evitar que el sonido se dispare dos veces, a partir de hacer el ciclo de tiempo del patrón lo suficientemente extenso.

Una mejor opción es evaluar

do {
now <- getNow; d1 (rotR (now+0.1) $ playFor 0 1 $ s "dif") }

O alternativamente, definir una función, para utilizarla varias veces, usando una sintaxis más breve:

let playOnce dn p = getNow >>= \x -> dn (rotR (x+0.063) $ playFor 0 1 $ p)

playOnce d1 (s "dif")

Otra cuestión que frecuentemente llega a la hora de trabajar con sampleos (de mayor longitud que un ciclo) es:

¿Cómo le hago para recortar una muestra de audio y que se reproduzca sólo una parte?

Suelo buscar recortar un sampleo para que se reproduzca desde el inicio, hasta cierta porción del audio, así que el parámetro # end sirve para este fin.

Por ejemplo:

d4 $ slow 24 $ sound "guitar:2" # end “0.5”

está recortado por la mitad. O

d4 $ slow 24 $ sound "guitar:2" # end “0.25”

reproduce únicamente una cuarta parte del sonido, comenzando desde el principio de éste.

Pero se puede preferir usar el parámetro # begin, para tocar una parte del sampleo, comenzando a partir de una porción especificada de éste. Por ejemplo,

d4 $ slow 24 $ sound "guitar:2" # begin “0.25”

toca tres cuartas partes del audio, eliminando la primera cuarta parte.

Aunque al hacer un live coding sin mucha planeación detrás, puede que no se tenga mucho control sobre el momento exacto en que las muestras de audio terminan, o más sencillamente, si se gusta cortar un sonido instantáneamente y que sea sustituido completamente por otro, el parámetro indicado para esta tarea es #cut.

Para ilustrar el funcionamiento de #cut, se escucha que es muy distinto el resultado de, sin # cut, evaluar:

d1 $ slow 8 $ sound "guitar:2"

d1 $ sound "{bd1 ~ ~ bd1, ~ cp ~*2}" ,

que, con # cut evaluar :

d1 $ slow 8 $ sound "guitar:2" # cut "1"

d1 $ sound "{bd1 ~ ~ bd1, ~ cp ~*2}" # cut "1".

En el primer caso, como el sampleo guitar:2 es un audio muy largo, a pesar de la evaluación de un nuevo patrón que lo sustituye, guitar:2 dejará de sonar una vez recorrido todo el sampleo.

Y en el segundo caso, inmediatamente evaluado el patrón {bd1 ~ ~ bd1, ~ cp ~*2}, el sonido de la guitarra se calla y es totalmente sustituido por el más reciente.

#cut es también una manera muy útil de reducir acumulación de ruidos indeseados en un live coding, porque evita que los audios se traslapen, y así, provee transiciones más limpias entre los sampleos. Pero hay que notar que #cut cambia la manera en que suenan los patrones, y es relativo si usar este parámetro es mejor o peor.

El tempo en Tidal se puede controlar con dos opciones: bps y cps.

Miserable Mix, al ser compuesta, utilizó bps, y si se quiere cambiar a cps, se tienen que cambiar varias cosas del código.

bps y cps definen casi el mismo pulso. Es decir, el tempo de 110 beats por minuto coincide con escribir

bps(110/60) o cps(110/60).

La diferencia radica en que un ciclo de tiempo en tidal definido en bps equivale a la mitad de un ciclo de tiempo en tidal definido en cps.

Por ejemplo, para convertir en cps lo siguiente:

bps(110/60)

d4 $ slow 24 $ sound "guitar:2" ,

habría que cambiarse el bps y el slow:

cps(110/60)

d4 $ slow 48 $ sound "guitar:2"

Pero como observación, al usar sampleos largos parece ser más conveniente utilizar cps. Pues, además de que el tiempo en cps coincide con los bpm definidos por un metrónomo, se tiene la posibilidad de reiniciar los sampleos, controlando cuándo empiezan, evaluando las cosas en el siguiente orden:

d4 $ slow 48 $ sound "guitar:2"
cps(-1)
cps(110/60)

Una pregunta importante si se está trabajando con una canción:

¿Cuántos ciclos dura toda la canción? O más precisamente, ¿Cuántos ciclos en bps o cps le corresponden a una canción de x minutos que va a y beats por minuto?

Por ejemplo,

¿Cuántos ciclos en cps le corresponden a una canción de 4 minutos que va a 120bpm?

¿Cuántos ciclos en cps le corresponden a una canción de 4 minutos que va a 90bpm?

¿Cuántos ciclos en cps le corresponden a una canción de 4 minutos que va a 180bpm?

Si una canción va a 60 beats por minuto, entonces una canción de 4 minutos será recorrida en
60 x 4 = 240 beats.

Si una canción de 4 minutos va a 180bpm, entonces la canción completa será recorrida en
\begin{align}\frac{(180)(60)(4)}{60},\end{align} es decir en 720 beats.

Si una canción de 4 minutos va a 90bpm, entonces la canción completa será recorrida en
\begin{align}\frac{(90)(4)(60)}{60}, \end{align}es decir en 360 beats.

Y así sucesivamente.

Pues bien, sólo resta hacer una o más piezas en Tidal, aplicando estos conceptos.

Criba

En una ocasión escuché unas cribas de Xenakis y me entusiasmé mucho; porque sonaban como el teorema chino del residuo. Aunque en ese entonces no me lo describí a mí misma de esa manera, sino como “eso suena a un sistema de ecuaciones con congruencias.”

Las cribas en cuestión eran rítmicas, y esto debe mencionarse, pues investigando en la red, una seguro se topa con artículos académicos que describen cómo se construyen éstas y las hay de varios tipos.

Hace una semana, finalmente me decidí a tomar un libro de álgebra superior y programar una criba en Tidal.

Teorema Chino del Residuo:

El sistema de congruencias
\begin{align}
& x \equiv a_1\pmod {m_1} \\
& x \equiv a_2\pmod {m_2} \\
& \phantom{10} \vdots \\
& x \equiv a_k\pmod {m_k} \\
\end{align}
tiene solución si \begin{equation}(m_i, m_j) = 1 , \phantom{10} i \neq j \end{equation}
y en este caso, todas las soluciones son congruentes módulo \begin{equation} m_1 \cdot m_2 \cdot … \cdot m_k \end{equation}

.

En particular tomando el siguiente sistema,

\begin{align}
& x \equiv 1\pmod {3} \\
& x \equiv 2\pmod {5} \\
& x \equiv 3\pmod {7} \\
\end{align}

 

su criba correspondiente (en Tidal) sería:

d1 $ stack [sound "{~ bd ~}%4",
sound "{~ ~ cr ~ ~}%4",
sound "{~ ~ ~ sd:1 ~ ~ ~ }%4"]

TidalCycles

Estuve trabajando en hacer un screencast de un live coding, que a continuación presento:

Y no ando en un plan muy explicativo, pero me acordé de un blog que tengo abandonado, y tal vez es un buen antecedente a esto:

http://dudasmusicomatematicas.blogspot.mx/

Habla, entre otras cosas, sobre cómo conocí el live coding y este programa que se llama Tidal.