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.

Topología

Definición (Topología): Una topología τ en un conjunto  es una colección  de subconjuntos de τ que cumple las siguientes propiedades:

  1.  ∅, X ∈ τ.
  2. La unión de elementos de cualquier subcolección de τ está en τ.
  3. La intersección de elementos de cualquier subcolección finita de τ está en τ.

A un conjunto X para el cual se ha especificado una topología τ se le llama espacio topológico.

Dados un espacio topológico (X, τ ) ,  y U ⊆ X  tal que U ∈ τ llamamos a U  un conjunto abierto.

En el diagrama, el cual salió del Munkres, se puede observar que para una cantidad finita de elementos existen muchas posibles topologías, donde los subconjuntos encerrados en un círculo representan los conjuntos abiertos.

Verificar que cada una de estas cosas es un espacio topológico, es más talacha que nada, porque hay que tomar todos los casos posibles de uniones e intersecciones. Pero, para dar un ejemplo inmediato de lo que sería topología para un número finito de elementos (y no únicamente 3; simplemente hay que cambiar el número de elementos y copiar la construcción), funciona y es evidente demostrar que

$$ X = \{ \emptyset, \{ a,b,c \}, b \} , X = \{ \emptyset, \{ a \}, \{a,b \},\{ a,b,c \} \}  $$ son topologías.

No todos los subconjuntos de X son necesariamente topologías, como lo indica la siguiente figura:

En el primer caso, la unión de a y b, no está en τ  En el segundo caso, la intersección de los elementos de τ  no está en τ.

A primera vista pareciera que una topología es casi lo mismo que un álgebra o una σ-álgebra, pero la primera no pide ser cerrada bajo complementos.

Más aún, la unión de elementos de cualquier subcolección de una σ-álgebra no necesariamente está en la σ-álgebra, pues esta unión puede ser no numerable.

Es evidente entonces  ver que $$ X = \{ \emptyset, \{ a,b,c \}, b \}$$ es topología, pero no σ-álgebra. Y lo mismo ocurre con $$X = \{ \emptyset, \{ a \}, \{a,b \},\{ a,b,c \} \} . $$ Simplemente son conjuntos que no son cerrados bajo complementos.

Como una especificación más detallada es que, pensando en $$ X = \mathbb{R},$$ con sus intervalos abiertos como la topología usual, querríamos que las operaciones entre los conjuntos abiertos en τ  fuera también un abierto, y nótese que$$ \bigcap_{n \in \mathbb{N}} \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr) = [a,b].$$

Es decir, la intersección numerable de abiertos en ℜ no es necesariamente un abierto. Pero el tomar la intersección finita de abiertos, eso siempre es un abierto (y se tiene que demostrar), y eso da más sentido a lo que pide la definición de ser topología. Tiene sentido también querer demostrar que la unión de abiertos en ℜ es abierto.

La intersección finita de abiertos en ℜ, es un abierto:

$$\text{Dem.- Sean $O_1, O_2,…, O_n$  abiertos en $\mathbb{R}$ y $   x \in \bigcap_{n \in \mathbb{N}}O_i. $}$$

$$ \text{Entonces $x \in O_i, \forall i \in \mathbb{N} .$} $$

$$\text{Como $O_i$ es abierto, existe  $B_{\delta_i} \subseteq O_i. $} $$

$$\text{Sea  $\delta = min\{ \delta_1 , \delta_2, …, \delta_n \}.$  Entonces }$$

$$B_{\delta}(x) \subseteq \bigcap_{n \in \mathbb{N}}O_i.$$

La unión de abiertos en ℜ es abierto:

$$\text{Dem.- Sean $O_1, O_2,…, O_n$  abiertos en $\mathbb{R}$ y }$$

$$\text{ $   x \in O_i $ para alguna $i\in I.$}$$

$$\text{Como $O_i$ es abierto, existe  $B_{\delta}(x) \subseteq O_i  \subseteq \bigcup_{i \in I }O_i. $} $$

$$\text{De donde $\bigcup_{i \in I }O_i $ es abierto.} $$

La intersección numerable de intervalos abiertos en  ℜ es un intervalo cerrado.

Dem.- Se quiere demostrar que $$ \bigcap_{n \in \mathbb{N}} \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr) = [a,b].$$

$$\text{Ya que para toda $n \in \mathbb{N}$ se cumple que  }$$

$$  a  – \frac{1}{n} < a < b <  b + \frac {1}{n} , $$

es directo que

$$[a,b] \subseteq \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr) \forall n \in \mathbb{N} .$$

O lo que es mismo,

$$[a,b] \subseteq \bigcap_{n \in \mathbb{N}} \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr). $$

Para ver la otra contención, demostraremos que

$$ \mathbb{R} \setminus [a,b] \subseteq \mathbb{R} \setminus \bigcap_{n \in \mathbb{N}} \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr): $$

$$\text{Sea $x\in \mathbb{R} \setminus [a,b]$. Entonces $x<a$ o $b<x.$}$$

$$\text{Si $x<a,$ entonces, para alguna $n \in \mathbb{N}$ },$$

$$ 0 < \frac{1}{a-x} < n.$$

$$\text{Así, $ x < a – \frac{1}{n},$ } $$

$$\text{ de donde $ x \notin \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr) $ para tal $n$.  }$$

$$\text{Y si $b < x,$ se tiene que}$$

$$ 0 < \frac{1}{x-b} < n. \Rightarrow b + \frac {1}{n} < x. $$

Así, $$ x \notin \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr) .$$

Esto demuestra que

$$ x \notin \bigcap_{n \in \mathbb{N}} \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr).$$

Por lo anterior, $$ [a,b] \supseteq \bigcap_{n \in \mathbb{N}} \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr). ♦$$

Ya que la intersección numerable de conjuntos abiertos de ℜ es un conjunto cerrado, como justo se demostró, esto también nos dice que cualquier σ-álgebra de subconjuntos de ℜ que contiene a todos los intervalos abiertos de ℜ, también contiene a todos los intervalos cerrados (pues si la σ-álgebra contiene a todos los abiertos, en particular tiene a los de la forma $$ \Bigl( a  – \frac{1}{n}, b + \frac {1}{n} \Bigr),$$ y por tanto, también están sus intersecciones numerables).

Y es análogo ver que cualquier σ-álgebra de subconjuntos de ℜ que contiene a todos los intervalos cerrados de ℜ, también contiene a todos los intervalos abiertos. Es decir,

$$ (a,b) = \bigcup_{n =1}^{\infty} \Bigl[ a  + \frac{1}{n}, b – \frac {1}{n} \Bigr]. $$

 

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:

 

Bohemia Matemática

Ayer sólo me dio tiempo de practicar una vez, una vuelta de mi programa y luego tuve que ir a hacer unas pruebas de sonido y video, que se me había citado a la una.

Mi papá me encargó que le imprimiera unos archivos para cuando yo regresara, ya en la noche. Para que él pudiera ponerse a trabajar en el avión de camino a Japón.

Ya en el auditorio de la Facultad de Ciencias, Natalia observó que me equivoqué de qué cable llevar, y en efecto, este era uno que iba de PLUG macho a PLUG macho.

“¡Uy, quien sabe dónde puedes encontrar un cable como el que se necesita, de PLUG a CANNON macho, y según yo no hay ningún tipo de adaptador,” mencionó uno de los técnicos del auditorio. Pero otro joven dijo: “¡Sí hay adaptadores. Sólo que son difíciles de conseguir. Ve a un Steren!”

Así que manejé hacia la comercial mexicana que está por mi casa y había un tráfico a vuelta de rueda, por lo que a las 2:40 pm llegué. Y en el Steren me hicieron saber que no había de esos adaptadores, pero me recomendaban ir a la sucursal de Picacho o la de Revolución (que está a la altura del Mercado de las Flores). Pagué diez pesos de estacionamiento y a continuación me metí a otro estacionamiento, el del Office Max, para hacer las impresiones de mi papá.

Por ahí de las tres, fui hacia el Ajusco, y en esa carretera también había mucho tránsito; que tal vez me convino, porque pude inspeccionar todas las tiendas, de mi lado y del lado contrario, y justamente ahí estaba el Steren.

No había cables de PLUG a CANNON macho. Ni adaptadores para mi cable. No hacían ahí cables, pero sí vendían el material. Lo que hubo, fue un adaptador de CANNON hembra a PLUG, pero tuve que comprar el cable. Y no me lo pensé dos veces, a pesar de que en mi casa, ya tenía dos de ese tipo, pero regresar implicaba más tiempo. Más tiempo vs menos dinero.

Finalmente, regresé a Ciencias como a las 4:30.

Afuera del auditorio practiqué una vuelta de mi código, y por primera vez conté, que duraba nueve minutos. Los aplausos contiguos me pusieron nerviosa y consideré que debía echar una ojeada a las otras presentaciones. Saludé a Rocío Azul y a su novio. Platicamos sobre su presentación y le mencioné mi nerviosismo.

Me tocó apreciar piezas de piano, poesías y un monólogo. Asimismo, me di cuenta de que había gente que yo conocía, como Efraín, Ananda, Alma, incluso creí ver a Jaime Lobato.

También, entre los programados para hacer show estaban Claudia y Andrés (los amigos de Alfredo, con quienes alguna vez platiqué tomando chelas artesanales al lado del CNA y quienes, desde esa ocasión, establecieron que eran mitad artistas). Claudia haría danza árabe, y Andrés, “El Capitán”, recitaría unos lipogramas utilizando la vocal “e.”

Cerca ya de mi sesión, me costó trabajo decidir si quedarme a ver las presentaciones, o ponerle atención a la computadora, revisando al menos dos veces que todo estuviera listo. Y opté por lo segundo.

Luego me dio pánico escénico, pero este estuvo muy lejos de ser la destrucción total. Se manifestó más bien en el detalle de que, cuando estoy nerviosa, suelo evadir al público. Y suelo ocultar todo tipo de carisma; algo que yo debiera atender.

Mientras que Natalia y el técnico del auditorio conectaban mi computadora al proyector de pantalla, yo dije unas palabras.

Algo así:

“Lo que presentaré es música electrónica usando la computadora. Presentaré un live coding, que es improvisar música usando un lenguaje de programación. Como no tengo mucho tiempo, preparé ya cierto código, para que no sea muy monótono. Yo he estado checando que no haya problemas técnicos, y todo parece bien. Espero que todo vaya bien.”

Mencioné dos veces que el live coding es utilizar la computadora utilizando un lenguaje de programación y creo que no era necesario. Lo mismo, mencioné dos veces que ya tenía preparado un código. Si me topé con la cara de alguien, fue con la del chavo del monólogo cómico, que era sonriente, “y yo no”. Pero en su generalidad, hablé con la mirada hacia el suelo o viendo a la pared.

Luego, como mi computadora ya se reflejaba en la pantalla del auditorio, fue momento de comenzar la música.

Empecé a hacerlo así, y no reparé siquiera en echarle un ojo a la proyección, ya con un código rodando; para corroborar si, en efecto, este estaba mostrándose ante todos.

Asumí que el código se veía, y no. Únicamente se mostró el fondo de pantalla de mi compu, que es color morado. Pero mientras yo hacía códigos, sentí la especial sensibilidad de que lo que escribí, los demás lo podían juzgar. Y ni conté cuánto tiempo duró lo que presenté, pero tuve una sensación (tal vez ilusoria) de que fue la vez en que la pieza practicada fue más corta de lo normal.

Soy muy crítica conmigo misma, al punto de que, en medio de la presentación, me culpé a mí misma acerca del general bajo volumen, pero no tuve el tiempo (por haber estado nerviosa) o la ocurrencia de preguntar en voz alta, si era yo, o había que subirle más al volumen, pues desde mi interfaz de audio habría podido fácilmente incrementarlo.

Por mi cuenta concluí que pudo haberse escuchado más cualitativo, aunque muy trabajoso en cuanto a transporte, si yo hubiera aportado mis propias bocinas. Y si con tiempo, hubiese hecho las pruebas de audio y sonido que concernían a mi presentación. Pero faltó el cable.

Después de mí hubo un dueto teatral, gracioso. Uno de los personajes era “el cero.”

Varios rieron.

Me enfaticé mi falta de simpatía, y a eso le siguió la danza árabe, de la cual me gustó la selección de música de la chica, que con gran volumen se escuchaba. Además poseía toques electrónicos.

Y ella realmente bailaba con gracia. Sonando los adornos de la falta y oleando, en una de las piezas, una especie de rebozo rojo gigantesco. Muy padre… Parecía una diablilla. Ella misma pidió repetir el baile para amigos que llegaron después, y se lo permitieron.

Más poesías, y a continuación, existieron varias personas que, a petición de Natalia, echaron un palomazo para esperar a un grupo musical atorado el tráfico.

Hubo, durante el tiempo de sobra, guitarras clásicas, un compositor cantautor, y una pianista que convocó a la audiencia a cantar con ella a coro, una canción muy popular que “seguro nos la sabíamos”.
Hubo quienes sí la conocían, la acompañaron cantando y se escuchó bonito.

Llegó el dueto, que eran unas muchachas que interpretaban canciones de videojuegos.

Las intervenciones artísticas cerraron con un monólogo de un chavo matemático que justamente habló del pánico escénico, al igual que expresó ser un nerd que se dedicaba investigar en categorías y topología, y consideré que fue una buena manera de terminar las sesiones porque en su diálogo, él habló muy inclusivo con la audiencia. En parte también, resulta que los monólogos matemáticos están de moda.

Todo concluyó con los agradecimientos hacia los y las organizadoras, hacia los participantes y hacia la audiencia.

Aquí puedes escuchar la pieza que yo presenté:

(Entre los eventos artísticos ocurridos durante el Congreso de Matemáticas, que tuvo sede en la Facultad de Ciencias, estuvo la Bohemia Matemática, en la que participé. Y fue lo que escribí acerca de ella).

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.

18 de julio de 2017

El 20 de julio es la fecha límite para mandar propuestas de artículos a ICLC. Hoy es dieciocho y sigo considerando más prioritario el hecho de mejorar el código de mi propia página web, que intentar escribir un artículo para dentro de un día y medio, con todo y referencias.

Pero voy a hacer el intento de poner mis ideas en claro. Mis observaciones acerca de la práctica del live coding, con toda la franqueza que pueda.

Primeramente, considero que no tengo material suficiente para escribir un artículo, porque no tengo ganas de ser la poeta o la apasionada dentro de un conjunto de artículos que, en su mayoría describen los programas computacionales que están en vías de desarrollo.

Y por otro lado, mi propia obra artística no es lo suficientemente completa como para que yo la considere digna de relatarse en un artículo académico. Creo que lo que yo llevo hecho, es algo que, en cuanto a técnicas y modos de llevar a cabo, tampoco es muy relevante. Y lo establece la misma crítica a mi propuesta de live coding que yo hice hace ya casi tres años: “mi propuesta no era lo suficientemente novedosa técnicamente hablando”…, “aunque la forma en que describí los acontecimientos relatados en mi propuesta eran interesantes.”

Un poco refiriéndome a esto, establezco que no estoy tan peleada con la academia y su organización, que mucho de jerárquico tiene. Pero justamente me cayó gorda la observación de que mi propuesta no era lo suficientemente propositiva, técnicamente hablando.

Creo que, siendo el live coding un espacio para la interdisciplina, sería de esperarse que hubiera más apertura hacia los aspectos músicales, o hacia el significado de crear una obra, utilizando una herramienta particular. Los músicos, por ejemplo, suelen dedicarse a explorar lo sonoro, dar giras y realizar grabaciones, y hay varias maneras de apreciar los tecnicismos. Bajo el criterio de “entregar una serie de grabaciones,” no hay novedad. Pero también está el criterio de apreciar los contenidos, ver “cómo está ejecutado lo que está dentro de esa grabación,” si es bueno o malo, y bajo qué parámetros.

Alex Mclean es de los que ven a Tidal como un instrumento musical. Y entonces tendría sentido abrir los ojos a ver a Tidal como un instrumento musical, explorar sus posibilidades musicales, abrirse a la comprensión de ese espectro, independientemente de hacer crecer a Tidal como un lenguaje de programación. De momento, casi todo lo que he visto que rodea a Tidal, es una sed de sus usuarios por programar más y más, y en especial seguir construyendo “la expresividad digital.”

Hay “excepciones”, como el caso de 65daysofstatic, la banda de rock. O como “kindohm,” que tiene la habilidad de improvisar “demasiada” música, a la par que colaborar en la programación de Tidal.

Yo misma también me considero excepción.

Por ejemplo, leía una entrevista a Alexandra Cárdenas, que dice: “De momento me considero una usuaria de TidalCycles, pero lo que yo quiero hacer en algún momento, es construir mi propio lenguaje de programación que funcione exactamente de la manera en que quiero.”

Yo más bien soy de la opinión de que el lenguaje Tidal, fue un descubrimiento para mí, y para las propias preguntas que yo misma me hacía. Descubrí una máquina para hacer música interesante, y no me dan ganas de construir otra por mí misma, sino de hacer música con el hallazgo.

“¿Se puede hacer un programa de computadora que improvise en vivo y que sea musicalmente agradable, con mucha estructura y no consista únicamente de hacer ruidos?”,

“¿Se puede construir un programa que improvise música y con posibilidades que reten al intelecto?,”

“¿Cómo se mejoraría la improvisación con una computadora a algo más que Ableton Live?”

“¿Existe una persona que entienda mis abstracciones músico-matemáticas y las pueda responder?”

El paquete Tidal-Alex Mclean – Dave Griffiths respondió estas preguntas, y puso en claro una manera de abordar estos cuestionamientos propios, más prácticamente. En general, el encuentro Vivo 2012 ocurrido en el Centro Multimedia, en la Ciudad de México, reunió a gente igualmente interesante, ya conocedora del live coding; por ejemplo, Julian Rohrhuber o Alberto De Campo.

Aunque por mucho, me inspiró la presentación en vivo de Slub (el grupo de live coding de Alex y Dave), al igual que el taller de estos cuates, que se llamó “El tiempo como funciones en el espacio.” Era gente que había aplicado ciertos conceptos matemáticos, y los había implementado en un par de programas para hacer música (ciertos conceptos de teoría de gráficas por ejemplo). Gente que es buena en matemáticas, aunque ambos son programadores.

Desde ese entonces pensé. “¡Yo quisiera tener acceso a este programa (Tidal), para hacer música!” Y hasta años después fue que me cayó el veinte de que el programa es abierto al público, sencillo de descargar y usar. Pero dominar las estructuras musicales de las que Tidal nos provee, no es tan sencillo. Y tampoco es sencillo hacer un ensamble musical que lo incluya, cosa que ya he intentado. Intenté juntar Tidal y un bajo.

El dueto tuvo buenos momentos, y otros no tanto, y pudimos haber sido más persistentes con los ensayos; tomar las cosas más en serio. Es una dificultad que compete a la creación musical.

También quiero poner sobre la mesa que tengo un objetivo muy claro, y es el de incorporar a Tidal como algo que forme parte de mis canciones. Porque soy cantante ocasional, he estudiado canto y suelo escribir canciones y grabarlas.

Durante mi trayectoria como cantante, me interesé por hacer música con otras personas, por aprender a hacer un home studio y producir música profesionalmente. Creo que es deducible que, si encontré en Tidal una forma de hacer música interesante, también me interese el tema de incorporarlo en mis canciones género pop-alternativo. Y tengo observaciones objetivas sobre la dificultad que implica lograr esto, pero estoy abierta a la lucha.

Con esto último me refiero a que, cuando una persona como yo, quiso hacer canciones con Tidal, hubieron dos grandes problemas, que fueron: el de separar la señal de Tidal, y el de intentar sincronizar un programa que es Open Source, con uno que no lo es; Ableton Live. Pues, de no poder lograr lo primero, se tendría que, a pesar de que los ritmos creados en Tidal fueran interesantes, una imposibilidad de mezcla evitaría la grabación profesional de un proyecto musical.

Ahora, no está bien documentado cómo sincronizar Tidal y Ableton Live de la manera más eficiente. Utilizando de por medio Max/MSP ha sido lo más cercano a lograr esto, que yo conozca. Y es comprensible que no haya buena documentación, porque para muchos programadores es muy importante mantener la cualidad OpenSource de Tidal. Pero desde mi perspectiva de músico, y conociendo a personas apegadas a grabar sus obras sin muchas más complicaciones que la propia música e ingeniería de audio, soy de las que ciertamente sacrificarán la idea de crear algo puramente basado en la cultura Open Source. Me da gusto saber de la existencia de proyectos como Gibberwocky, sistema que combina las posibilidades creativas de Ableton, con el live coding.

Opino que, si bien es cierto que en SuperCollider se puede grabar todo un proyecto, yo prefiero otorgar mis esfuerzos en conseguir una mejor expresividad con Tidal y conocer este lenguaje. Pero Tidal no es el centro de toda mi atención.

Como la cantante interior que aún no satisface completamente sus deseos solistas, el live coding me presenta un dilema, y de momento adoptaré como solución el utilizarlo para componer música, y no para mejorar su funcionamiento con otras interfaces.

“Establecer lo que voy a hacer”, no es tan digno de compartirse en un artículo académico según yo. Sería más ilustrativo si presentara en unas páginas el proceso mediante el cual llevé a cabo una canción, y el lugar que al final fue otorgado al live coding. Pero claramente, esto no sucederá, porque el cierre de propuestas para el próximo ICLC es el veinte.

Hay momentos en que el live coding sí llama mi atención como un movimiento, porque en el medio, es donde me he topado con personas con intereses y preguntas muy afines a los míos y con gran visión. Pero otra parte mía no toma el live coding como un movimiento, sino simplemente como una forma de hacer música y arte, que está en vías de desarrollo. “Si me gusta esta técnica, la uso.” Pero si no se está en el mismo medio que otros live coders, muy frecuentemente habrán errores con la computadora, que retrasarán una obra artística, por lo que no me puedo mantener muy relegada de la comunidad. Y muy frecuentemente sucedería que gente desconocedora del live coding, su potencial, y actual ideología, sean despectivas de esta forma creativa.

Yo siempre termino encontrando pros y contras muy pronunciados a la hora de adoptar este camino creativo. En mi caso, forzosamente tiene que haber una combinación.

Shelly Knotts estudió violín. Y ahora es programadora. Pero a ella, a diferencia mía, lo que le parece atractivo del live coding es la capacidad que esta práctica aporta para generar música o ruido, de una forma desapegada a las reglas tradicionales de composición musical.

Yo, como fan del rock, me siento atraída por ciertas estructuras comunes. Conceptos como tonalidad, cadencias, estrofas, coros, puentes y desenlaces. Me gusta cantar, hacer canciones, y encontrar dentro de eso un espacio para la programación. Se puede. Björk hizo eso.

Hace casi tres años, cuando mandé mi propuesta en ICLC, yo afirmaba que mi intervención de tweets a Denise Maerker formaba parte de mi experiencia como live coder, pero ahora pienso que no estoy tan de acuerdo, o que no tengo comentarios. Porque cuando una entra al Facebook, es exactamente lo mismo: gente está al tanto de otra gente a través de una red social, y la diferencia es que yo me tomé muy en serio mi trabajo y mis tweets, que finalmente hablan de matemáticas. Fue un poco la época en que aprendía a programar, y tenía mucha energía especial por todas partes, que estaba combinada. Hice unos live codings guiados por esa energía. Pero esos mismos live codings, y esa intención, resultó motivo de confusión en mi propuesta. Y ya dije, y lo repito: No es como poeta, como yo me veo en los artículos del ICLC.

Es un problema, pues realmente no tengo qué escribir, que yo considere sea digno de un artículo sobre live coding.

La comunidad abre la posibilidad de compartirme en el aspecto de la música y las matemáticas, pero de momento, mi cerebro tiene muy delimitado que una cosa es programación, y otra es matemáticas. Y que suele ser muy redundante incluir mis abstracciones matemáticas, si no están bien expresadas.

Una abstracción que me gusta es la de los grupos y el sonido multicanal, o más sencillamente, los grupos en un sonido estéreo. O los grupos en el ritmo, y Tidal se presta para eso, porque con él se pueden crear ritmos que yo no soy capaz de ejecutar en una batería, además de que la abstracción matemática ya viene incluida en el código a la hora de programar. Pero todo eso forma más bien parte de un sentimiento muy personal al momento de crear y organizar la música para ser ejecutada, y no tanto como una aspiración a un proyecto de investigación.

Podría intentar describir mejor esta idea, primero en palabras, hasta llegar a escribir las abstracciones matemáticas asociadas, pero no tengo mucho tiempo para eso. Creo que ciertamente se pueden encontrar analogías entre permutaciones de grupos y mezclar música, o la acción de poder separar ciertos sonidos y ubicarlos en unas bocinas.

Pero me guío más por el sentimiento de crear una música, que incluya la programación, y que la pueda compartir con la gente.

También estoy al tanto de que existen libros sobre teoría de grupos y música, como el de Julio Estrada, del cual tengo una copia.

En estas épocas, la cultura de la programación es importante, pues hay una gran diferencia entre estar frente a una computadora, siendo creativa con ella, y estar frente a una computadora, siempre viendo Netflix o el timeline de Facebook. Y en ese sentido, sí considero al live coding como una contraparte importante ante la pasividad y el confort. Es una buena forma de enterarse cómo funcionan las nuevas tecnologías, y una puerta para aprender a utilizarlas de modos más inteligentes.

Hay quienes establecen que la programación está cerrando las brechas de género, en pos de la equidad. Yo de momento no tengo mucho que opinar al respecto, pero también ese tema me interesa y un poco puedo percibir por qué lo dicen.

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"]

Sinte en SuperCollider

 

Un sinte que escribí.

// código


(
SynthDef(\d, {|fre=4 freq=500|
var adjust, sig;
adjust = AmpCompA.kr(freq, 500, 0.6, 0.3);
a = Pulse.ar(
LFPulse.kr(fre, 0, 0.5, freq * 0.5, [freq, freq]),
Line.kr(0, 1, 15) , 0.5
)!2;
sig= a*adjust;
Out.ar(0,sig);
}).add;
)

(
Pseq([
Pbind(
\instrument, \d,
\fre, Pseq([4,4, 4, 4, 2, 2, 2, 2,8,8,8,8], inf),
\dur, 6,
\amp, 0.6,
\freq, Pseq([100, 200, 300, 400], inf),
)], inf).play;
)

Algofive

Cada vez se aleja más y más la fecha del 17 de marzo de 2017, fecha en la cual ocurrió la celebración de los primeros cinco años del “Algorave.” Y más que haberme emocionado mucho, es una buena ocasión para compartir ejemplos de cosas que yo no hice, pero que se relacionan con la forma en la que recientemente hago música. Sirva esto también para defender un poco ese proceso creativo, antes de que otro más llegue y diga: “¿Pero para qué te metes en tanto rollo? ¿Acaso no sería más fácil que sólo uses Ableton?”

Esto del Algorave, en gran medida forma parte de una corriente Open Source, e incluso hay un “Live Coding Manifesto.”

Hay quienes están en esto porque tienen una posición política muy bien definida, y en ocasiones, puede ser chocante que alguien te insinúe que para producir música hay que: o piratear un software, o comprarlo a precio de doce mil pesos (aproximadamente).

Yo para nada que estoy en contra de tal inversión. Creo que Ableton es una maravilla. Pero con decir esto podría dar al traste con el objetivo de este post. Difundir el Algorave es el objetivo. Mostrar un círculo en donde hay músicos, artistas visuales, programadores, filósofos y científicos, entre otros.

Me emocionó descubrir recientemente un libro electrónico dedicado a SuperCollider, que se puede ver en este link: https://www.gitbook.com/book/thormagnusson/scoring/details

A continuación pego videos que me resultaron interesantes, ocurridos en Algofive (si gustas ver más, no sería difícil llegar al canal de EulerRoom).