Expresión artística en la que se crea música y/o visuales en directo, normalmente de forma improvisada, escribiendo código con diferentes lenguajes de programación.
TOPLAP ~> Manifesto!
“Show us your screens!!”
Composiciones efímeras y improvisadas ~> Algorave.
Filosofía open source.
No tiene un género musical concreto: EDM, Jazz, Música Clásica, noise …
ChucK, Cyril, SuperCollider, Fluxus, Overtone, Extempore (antes Impromptu).
Patrones: ixi lang, FoxDot, TidalCycles.
Educativo: Sonic Pi.
Basados en la web y audiovisual: Livecodelab, Gibber.
Incluso con una gamepad.
Awesome Live coding: lista de software sonoro y visual para hacer live coding.
Benoît and the Mandelbrots @ Stadtgeburtstag Karlsruhe (2013)
Yaxu (TidalCycles) + Rituals (visual) (2016)
Qirky (FoxDot) (Algosix Live Stream Performance - 2018)
Sam Aaron - Sonic Pi + Guitarra (2014)
Dr. Sam Aaron.
Universidad de Cambridge.
Primera versión fue en 2012.
Pedagogía de programación.
Disponible para Mac, Windows, GNU/Linux y Raspberry Pi.
play 50
play :D3
50 es la nota midi que se corresponde al Re
de la 3ª octava
sample :bd_haus
synth :chipbass
use_synth :chiplead
play :e1
play 60
play 67
play 69
play 60
sleep 1
play 67
sleep 1
play 69
sleep 1, significa que Sonic Pi espera 1 beat (=1 segundo) para ejecutar el siguiente sonido.
Beats por minuto -> cantidad de notas por minuto
use_bpm 120
play 60
sleep 1
play 67
sleep 1
play 69
4.times do
sample :bd_haus
sleep 1
end
loop do
sample :bd_haus
sleep 1
end
4.times do
sample :bd_haus
sleep 1
end
8.times do
sample :sn_dolf
sleep 1
end
loop do
sample :bd_haus
sleep 1
end
loop do
sample :sn_dolf
sleep 1
end
¿y ahora?
in_thread do
sample :bd_haus
sleep 1
end
loop do
sample :sn_dolf
sleep 1
end
live_loop :nombre do
sample :bd_haus
sleep 1
end
live_loop :drum do
sample :bd_haus
sleep 1
end
live_loop :sna do
sample :sn_dolf
sleep 1
end
➔ tiene que llevar nombre
➔ puedes poner cuantos quieras, suenan a la vez!!
➔ se pueden modificar en directo
➔ rrand() ~> número aleatorio entre un minimo y un maximo (no inclusives)
play rrand (60, 90)
➔ rrand_i() ~> número natural aleatorio entre minimo y maximo (inclusives)
play rrand_i (50, 100)
➔ rand() ~> número entre 0 y un máximo (por defecto es 1)
play 60, amp: rand
➔ rand_i() ~> número natural entre 0 y un máximo (por defecto es 1)
play 60, amp: rand_i(4)
play choose([60, 65, 72])
puts one_in(6)
puts ([:e2,:e4,:e1]).shuffle
dice(6)
use_random_seed 34553
loop do
play 50, amp: 0.3, release: 2
play 53, amp: 0.3, release: 2 if one_in(2)
play 57, amp: 0.3, release: 2 if one_in(3)
play 60, amp: 0.3, release: 2 if one_in(4)
sleep 1.5
end
loop do
if one_in(2)
sample :drum_heavy_kick
else
sample :drum_cymbal_closed
end
sleep 0.5
end
live_loop :efecto do
with_fx :reverb do
play 50
sleep 0.5
sample :elec_plip
sleep 0.5
play 62
end
end
prueba echo
, wobble
, distorsion
, slicer
, …
play :e3, amp: 0.5, pan: 0, attack: 0.1, decay: 0.1,
sustain: 0.2, release: 2
synth :chipbass, note: :e4, amp: 0.5, pan: 0,
attack: 0.1, decay: 0.1, sustain: 0.2, release: 2
synth :chipbass, note: :e4, amp: 0.5,
pan: 0, attack: 0.1, decay: 0.1, sustain: 0.2, release: 2
rate (solo para samples): el tiempo que tarda en ejecutar el sample.
sample :drum_bass_hard, rate: 1
por defecto es 1. Con rate 2 el sonido se ejecuta en la mitad de tiempo.
sample :loop_amen, start: 0.5, finish: 0.8,
cutoff: 80, rate: 1
Lista finita de valores…
[1,-1,2,-2] posición 0= [1,-1,2,-2][0] = 1 posición 1= [1,-1,2,-2][1] = -1 posición 2= [1,-1,2,-2][2] = 2 …
play 48
sleep 0.5
play 50
sleep 0.5
play 52
sleep 0.5
play 53
sleep 0.5
play 55
sleep 0.5
play 57
sleep 0.5
play 59
sleep 0.5
Lista infinita de valores …
(ring 1,2,3,4)= 1,2,3,4,1,2,3,4… posición 0= (ring 1,2,3,4)[0] = 1 posición 1= (ring 1,2,3,4)[1] = -1 …
play_pattern_timed [48,50,52,53,55,57,59],0,5
play_pattern_timed
[48,50,52,53,55,57,59],[0.5,0.5,0.5,0.5,0.5,0.5,0.5]
Acorde mayor de MI (e3):
(chord :e3, :major)
~> Es el anillo (ring 52,56,59) que a su vez es la secuencia 52,56,59,52,56,59,52,56,59, …
Escala mayor de MI (e3), con 3 octavas:
(scale :e3, :major, num_octaves: 3)
~> es el anillo (ring 52,54,56,57,59,61,63,64)
que a su vez es
la secuencia 52,54,56,57,59,61,63,64,52,54,56,57,5…
use_synth :fm
print "Escala normal"
escala = [:c,:cs,:d,:ds,:e,:f,:fs,:g,:gs,:a,:as,:b,:c5]
escala.each do |nota|
play nota
print midi_to_hz(nota)
sleep 0.5
end
vol=1
play :e4, amp: vol
n=(ring :e1,:e2)
4.times do
play n.choose
sleep 0.4
end
live_loop :tick do
play (ring 60, 55, 50).tick
sleep 1
end
##… que se incrementa en uno cada ciclo
live_loop :random do
use_synth :tb303
use_random_seed 30
notas = (scale :e3, :minor_pentatonic).shuffle
16.times do
play notas.tick, release: 0.125, cutoff: rrand(60,90)
sleep 0.25
end
end
live_loop :look do
tick
play (ring 60, 55, 50).look
sleep 1
end
define :melodia do
play 50
sleep 1
play 55
sleep 0.5
end
Para usarlo, escribimos el nombre de la función, en este caso:
melodia
Entrada de Live coding en la Wikipedia.
TOPLAP: organización para la promoción y el estudio del Live Coding.
Algorave: el lugar donde surgen las algoraves.
Presentación realizada con Github y Jekyll con el tema web-presentation de deepidea