Acercamiento a la música por live coding

Acercamiento a la música por live coding

Los algoritmos son el conjunto ordenado y “posiblemente” finito de operaciones que permiten hallar la solución a un problema. La música como proceso creativo es algorítmica, se basa en reglas, métodos y sistemas que permiten la producción de material sonoro, el cual, después es llamado obra o pieza musical. Estas reglas musicales han variado según el contexto social, político, económico y geográfico, es decir, los algoritmos se han transformado según la época y el lugar, creando así disciplinas, normas y fórmulas para la invención de música; es allí, donde aparecen los manuales de armonía, contrapunto, y la teoría musical y se instauran instituciones académicas en torno a sus propios algoritmos (formas de hacer música).

Llevando la palabra “algoritmo” a otro campo de estudio sería posible decir que la actividad humana es algorítmica ya que siempre se busca soluciones para transformar el entorno, el planeta tierra es algorítmico, pero esta es una discusión para otro momento.

 Desde los años noventa los computadores, celulares, tabletas y otros dispositivos electrónicos empezaron hacer parte importante de la creación e interpretación de música a nivel global, el desarrollo tecnológico  hacía que el nivel de procesamiento de los dispositivos fueran mejorando cada vez más, hasta incluirlos en las creaciones artísticas, museográficas y performativas.

 El live coding es una práctica musical derivada de la programación, la cual permite la creación en tiempo real (interpretación) de sonidos y patrones con expresiones matemáticas, dichas forma de interpretación son usadas actualmente para el desarollo de música electrónica de carácter bailable, es decir su uso actual está enfocado en la interpretación de música para discotecas (raves), creando así, festivales, concursos, convocatorias y becas entorno a ello; esto establece una apropiación, asimilación o adquisición de culturas musicales extranjeras y a su vez un olvido paulatino o gradual de las diferentes músicas regionales.

No solo la música electrónica se puede interpretar con live coding, absolutamente cualquier género musical se puede codificar en cualquier lenguaje de programación.

 Hacer música con lenguajes de programación comenzó a tomar fuerza principalmente en Europa en los años 90, y actualmente es un ejercicio dentro del arte electrónico experimental en el mundo entero.  Alex McLean músico e investigador británico, desarrollador de varios lenguajes para hacer live coding como Tidal, además de ser uno de los fundadores del encuentro de música realizada con computador más  importante de la actualidad, ALGORAVE, menciona que el término: programación en vivo o live coding, surgió alrededor del 2003 para describir una actividad con una aproximación a nuevas formas de hacer música por computadora y video animación. Asimismo, sugiere que el término live coding se usa más en el contexto de la improvisación. La actividad de programar y manipular el tiempo hace que escribir código se convierta en una actividad cercana a una práctica musical experimental.

 A Continuación se mencionan algunas agrupaciones y/o ensambles de ordenadores más importantes en el mundo:

 The Hub es un ensamble de programadores/compositores pioneros en la práctica de Música por Computadora en Red. Este ensamble se caracteriza por compartir datos e información a través de una red para ser modificados durante la presentación. El ensamble está formado por Tim Perkins, John Bischoff, Chris Brown, Scot Gresham-Lancaster, Mark Trayle y Phil Stone.

 Slub es un ensamble originalmente formado en Londres por Alex McLean y Adrian Ward, quienes diseñan sus programas de audio con base en lenguajes como Perl y REALBasic. Posteriormente, Dave Griffiths se unió a este ensamble de música por computadora, quien en sus presentaciones utiliza el programa de su autoría Scheme Bricks.

 PowerBooks Unplugged es un ensamble formado en el 2003 por seis músicos que usan la computadora como un instrumento autónomo, aprovechando la capacidad de conexión inalámbrica. Está constituído por Alberto de Campo, Echo Ho, Hannes Hoelzl, Jan-Kees van Kampen, Julian Rohrhuber y Renate Wiser.

 PB UP es un colectivo en donde interpretan música con sus ordenadores, sin conectarse a un sistema de sonido, intercambiando código a través de una red, el cual van generando y modificando en el momento de la presentación.

aa-cell es un dúo australiano de live coding activo desde el 2005, conformado por Andrew R. Brown y Andrew Sorenson, quienes usan el programa Impromptu en sus presentaciones, el cual ha sido diseñado por Sorenson.

 Benoît and the Mandelbrots, es un ensemble de live coding formado en el 2009 en Karlsruhe. Conectados a través de una red, se sincronizan y envían datos. Integrado por Juan A. Romero (colombiano), Patrick Borgeat, Holger Ballweg y Matthias Schneiderbanger.

 Existen muchos artistas que usan el código como fuente de composición; Alexandra Cárdenas es Colombiana, lidera el grupo de Supercollider más grande de habla hispana y fue de las primeras mujeres que usó el código para la creación musical.

 También es importante mencionar los primeros festivales de live coding conocidos como “Changing Grammars” organizados en 2004 en Hamburgo y “LOS Livecode” en el 2007 en Sheffield y ALGORAVE, y por último cabe mencionar la organización TOPLAP (Temporary Organisation for The Promotion of Live Algorithm Programming) un grupo de live coders establecido para discutir y promover el live coding.

 Supercollider es uno de los entornos y lenguajes de programación más populares en la música algorítmica, ya que permite hacer programación interactiva, síntesis de audio, investigar sobre acústica y hacer “Live Coding”, por su similitud a los lenguajes de programación “Smalltalk” y “C” permite tener una plataforma multi-proceso para ejecutar líneas de comando simultáneamente, además es una herramienta gratuita y de código abierto disponible para sistemas operativos Windows, MacOS y Linux.

 SuperCollider presenta tres componentes principales:

  • sc synth, un servidor de audio en tiempo real, forma el núcleo de la plataforma. Cuenta con más de 400 generadores de unidades (“UGens”) para análisis y procesamiento de señal. Su modularidad permite la combinación fluida de muchas técnicas de síntesis, entre otras, aditiva, sustractiva, FM, granular y por modelado físico. Puede escribir sus propios UGens en C++, y los usuarios ya han aportado muchos más, los cuales se encuentran disponibles en el repositorio “sc3-plugins”.
  • sclang, un lenguaje de programación interpretado. Se centra en el sonido, pero no se limita a ningún dominio específico. sclang controla sc synth a través de Open Sound Control. Puede ser usado para la composición algorítmica y la generación de secuencias de datos, permitiendo explorar técnicas de síntesis de sonido, vincular hardware externo (incluidos controladores MIDI, música de red, GUI´s de escritura y pantallas visuales). Tiene un stock de extensiones contribuidas por el usuario llamadas Quarks.
  • Scide es un editor de sclang con un sistema de ayuda integrado. 

SuperCollider fue desarrollado por James McCartney y originalmente lanzado en 1996. En 2002, lo lanzó generosamente como software libre bajo la Licencia Pública General de GNU

La composición musical con algoritmos expresa la estrecha relación con otras disciplinas artísticas, científicas y tecnológicas, desde esta mirada realizar algoritmos de música tradicional propone un reto en el análisis y la aplicación concreta de de procesos algorítmicos, y más que la creación de un método compositivo, se incita al análisis de piezas concretas, centradas en el paradigma de sistemas compositivos, es decir sistemas de reglas, procedimientos e instrucciones que se dan naturalmente a la hora de crear músicas regionales colombianas.

Para la interpretación expresiva de un código, se deben tener presentes dos grandes factores; la métrica (tiempo) y el sonido. A continuación se explicará la incidencia de estos en la interpretación.

 La métrica

En  la teoría, la mayor parte de la música tradicional cumple unas condiciones de tiempo; donde existen notaciones que representan la duración de una nota (sonido) o silencio en el tiempo, dicha duración se multiplica o se divide en sus múltiplos y a su vez, la agrupación de estos genera unos compases.

Estos parámetros de duración hacen que el músico instrumentista intérprete una serie de notas (sonidos) con excelente precisión. Sin embargo, el código puede ser aún más exacto con la métrica que un instrumentista tradicional.

Por otro lado, el código permite programar atrasos y adelantos en el tiempo con el fin de  que la obra final se asemeje a una ejecutada con instrumentos tradicionales teniendo como resultado una sensación de mayor fluidez y expresividad musical.

 El sonido

La música creada desde la programación es generada por un DAC de la computadora, el cual es el encargado de convertir los códigos binarios en señales eléctricas para poder ser reproducidos por cualquier altavoz; la mayoría de elementos tecnológicos, como celulares, reproductores de música, tabletas y computadoras portátiles o de escritorio poseen un DAC, siendo aptos para la creación de obras musicales con código.

La creación de los propios sonidos juega un papel muy importante a la hora de hacer música por computadora a través de la síntesis de audio, que consiste en un proceso donde se diseña el sonido deseado con base en diferentes técnicas como la  “feedback”, la síntesis por fase, la granular, la síntesis aditiva o sustractiva, la síntesis por frecuencia modulada (fm) y por amplitud modulada ( am), estas dos últimas son las más comunes, en donde la primera (fm) permite la variación de una frecuencia base con otra, de forma aditiva o sustractiva dependiendo de lo armónicos que se desean intervenir, y la segunda (am)  se basa en el mismo método de la síntesis fm pero cambiando la frecuencia por la amplitud (volumen) de la onda.

Es así como se pueden utilizar estas técnicas, e incluso combinarlas permitiendo recrear cualquier sonido existente o la creación de un sonido nuevo.

Así pues, la síntesis proporcionará  varios “instrumentos” virtuales para la realización de la obra, cada uno con características  diferentes en la frecuencia, intensidad, duración y timbre. 

Ejemplo: https://diegomolinaquintero.com/diego-molina/

Esta obra usa el lenguaje de programación Supercollider como forma de interpretación y creación , con la particularidad que este código esta totalmente comentado para que cualquier persona pueda lo pueda modificar de forma fácil, y es este aspecto que le da particularidad a   Melodía_programada ya que al instante de ejecutar el código (compilar) el interprete se vuelve compositor y el decide que parámetros modificar, cuando acabar, también es posible solo ejecutar el código y dejarlo sonar sin intervenirlo. Obra resultado de proceso joven investigador ITM 2017 de la ciudad de Medellín.

 

//prendalo//prendalo
s.bootServer.killAll
//Cuantizar tempo
p=ProxySpace.push.quant_(4);p.clock=TempoClock.default.tempo_(60/60);

//preambulo{ SinOscFB.ar([[67,71,62,66].midicps,301], MouseX.kr(0,4),0.3); }.scope;

//Melodia
(SynthDef(\melodi,{|gate=1,freq| var envo,onda,noti; envo= (EnvGen.kr(Env.perc(0,4),gate,doneAction:2)); noti= Pulse.ar(freq,0.3,0.2); onda =(RLPF.ar(noti,LFNoise0.kr(12,3900,4100),LFNoise0.kr(6,0.3,0.3)));Out.ar(0,Pan2.ar(envoonda,SinOsc.kr(1),0.5))}).send(s);)
a=Synth(\melodi,[\freq,63.midicps
12.midiratio])a.free

//Mueve la Melodia
~h1.play~h1=Pbind(\instrument, \melodi, \dur, Pseq([2,2,2,2,2,2,2,2,4], inf), \vol, Pseq([1.0,3,0.5,1], inf), \freq, Pseq([71,66,69,64,67,62,66,62,71,67,71,67,62,62,61,64,61,71,69,61,69,62,61,69,68,71,69,62,68,69,69,62,67,62,67,69,62,69,66,67].midicps12.midiratio, inf))~h1.release
//Pastel de ritmos// 0.8, 1.2, 2    intro// 1 pre verso// 0.5 puente// 0.25, 0.5, 0.5, 0.25, 1, 0.5, 0.25, 1, 0.25  verso
//pastel Frecuencias//71,66,69,64,67,62,66,62,71,67,71,67,62,62,61,64,61,71,69,61,69,62,61,69,68,71,69,62,68,69,69,62,67,62,67,69,62,69,66,67




//armonia//ayuda de Hernani Villaseñor Ramírez supercollider MX
(SynthDef(\string, {|gate=1, acordes=440, am=1|var onda,envo;envo= EnvGen.kr(Env.asr(0,0.5,0.5), gate, doneAction:2); //cambié el env, doneAction:2onda= SinOsc.ar(acordes, 0, SinOsc.kr(am,0,0.3,0.3));Out.ar(0,Pan2.ar(envo * onda, 0))}).add; // mejor add que send)
d= Synth(\string)
//Mueve la Armonia

~h2.play;~h2=Pdef(\string, Pbind(\instrument, \string, \dur, Pseq([2,2,2,2,2,2,2,2,4], inf), \acordes, Pseq([[67,71,62,66],[60,64,67,71], [66,69,60,64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 60, 64, 67], [67,71,62,66],[60,64,67,71],[62, 66, 69, 61],[67, 71, 62, 66], [61, 64, 67, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 61, 64, 67],[62, 66, 69, 61],[69, 61, 64, 68],[62, 66, 69, 61], [68, 71, 62, 66], [61, 64, 68, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 68, 71, 62],[69, 61, 64, 68]].mirror2.midicps, inf),\am, Prand([1,2,8,1,4,Pn(0.5,4),16],inf))); // no es necesario \vol~h2.release; // stop en lugar de release
///Finis~h2=Pdef(\string, Pbind(\instrument, \string, \dur, Pseq([1,0.5,Pn(0.25,4),2,1,1,Pn(0.5,2)], inf), \acordes, Pseq([[67,71,62,66],[60,64,67,71], [66,69,60,64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 60, 64, 67], [67,71,62,66],[60,64,67,71],[62, 66, 69, 61],[67, 71, 62, 66], [61, 64, 67, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 61, 64, 67],[62, 66, 69, 61],[69, 61, 64, 68],[62, 66, 69, 61], [68, 71, 62, 66], [61, 64, 68, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 68, 71, 62],[69, 61, 64, 68]].mirror2.midicps
(-12).midiratio, inf),\am, Prand([1,2,8,4,8,Pn(0.5,2),16],inf))); // no es necesario \vol
//Pastel de Acordes
// Tonalidad = Sol Mayor// G,C, F#º, Bm, Em, Am, D, G =//[[67,71,62,66],[60,64,67,71], [66,69,60,64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 60, 64, 67], [67,71,62,66],[60,64,67,71]]
//Tonalidad = Re Mayor// D , G, C#º, F#m, Bm, Em, A, D =//[[62, 66, 69, 61],[67, 71, 62, 66], [61, 64, 67, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 61, 64, 67],[62, 66, 69, 61]]
//Tonalidad = La Mayor// A, D, G#º, C#m, F#m, Bm, E, A =//[[69, 61, 64, 68],[62, 66, 69, 61], [68, 71, 62, 66], [61, 64, 68, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 68, 71, 62],[69, 61, 64, 68]]
//Tonalidad todas juntas//[[67,71,62,66],[60,64,67,71], [66,69,60,64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 60, 64, 67], [67,71,62,66],[60,64,67,71],[62, 66, 69, 61],[67, 71, 62, 66], [61, 64, 67, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 61, 64, 67],[62, 66, 69, 61],[69, 61, 64, 68],[62, 66, 69, 61], [68, 71, 62, 66], [61, 64, 68, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 68, 71, 62],[69, 61, 64, 68]]
//Pastel de ritmos
//2,2,2,2,2,2,2,2,4




//Bombo kick
(SynthDef(\kik, { |preamp = 1, amp = 1|var freq = EnvGen.kr(Env([400, 66], [0.08], -3)),sig = SinOsc.ar(freq, 0.5pi, preamp).distort * amp* EnvGen.kr(Env([0, 1, 0.8, 0], [0.01, 0.1, 0.2]), doneAction: 0);Out.ar(0, sig ! 2);}).send(s);)
c= Synth(\kik)

//Mueve el Kick
~h4.play~h4=Pbind(\instrument, \kik, \dur, Pseq([8,0.25], inf), \vol, Pseq([0], inf), \preamp, Pseq([4],inf), \amp,Pseq([1], inf))~h4.release




//Bombo Noise
(SynthDef(\noise, { |preamp = 1, amp = 1|var freq = EnvGen.kr(Env([400, 66], [0.08], -3)), sig = SinOscFB.ar((67).midicpsSinOscFB.ar(MouseY.kr(1,1000,’exponential’))+200,MouseX.kr(0.5pi,pi))0.1* amp * EnvGen.kr(Env([0, 1, 2, 0], [4, 0.1, 2]), doneAction: 0);Out.ar(0, sig ! 2);}).send(s);)
c= Synth(\kik)

//Mueve el Noise
~h3.play~h3=Pbind(\instrument, \noise, \dur, Pseq([2], inf), \vol, Pseq([0], inf), \preamp, Pseq([0.5],inf), \amp,Pseq([1], inf))~h3.release




//Todo junto
~h2=Pdef(\string, Pbind(\instrument, \string, \dur, Pseq([2,2,2,2,2,2,2,2,4], inf), \acordes, Pseq([[67,71,62,66],[60,64,67,71], [66,69,60,64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 60, 64, 67], [67,71,62,66],[60,64,67,71],[62, 66, 69, 61],[67, 71, 62, 66], [61, 64, 67, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 67, 71, 62], [69, 61, 64, 67],[62, 66, 69, 61],[69, 61, 64, 68],[62, 66, 69, 61], [68, 71, 62, 66], [61, 64, 68, 71], [66, 69, 61, 64], [71, 62, 66, 69], [64, 68, 71, 62],[69, 61, 64, 68]].mirror2.midicps, inf),\am, Prand([1,2,8,1,4,Pn(0.5,4),16],inf))); // no es necesario \vol


 

 

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s