ADN First Generative Try (:minor)
Primer intento con la música generativa, usando SonicPi. Es parte del proyecto “Rivers of Souls”. Le falta mucho pero tiene buena pinta.
A quien le interese el tema de la música generativa le recomiendo este vídeo de Andrew Sorensen.
Esta canción es el primer borrador de un proyecto. Aquí vemos que hay cuatro acordes C,F,G y A que hacen referencia a los a=adenina=La, g=guanina=Sol, c=citosina=do y finalmente hice un match raro con timina, escogiendo f=timina=Fa.
Cuando el proyecto esté acabado será una sistema de copia de ADN. Por ahora es un ritmo, un bajo simple, un arpegio 1ª,7ª,3ª,1ª,5ª,3ª
play_pattern_timed [cr[0],cr[3],cr[1],cr[0],cr[2],cr[1]]
Y repite lo mismo en una octava arriba con #lead usando un acorde con 9ª.
play_pattern_timed [cr[5],cr[3],cr[5],cr[4],cr[2],cr[5]]
Todo usando una escala menor
sc=:minor
Debajo está el código…
# Welcome to Sonic Pi v2.8 toL=:C2 toR=:C4 toH=:C6 #escala sc=:minor #adn=grados utilizables adn=(ring :i ,:iv,:v,:vi) # CFGA #prg=cadena de adn prg=(ring 0,1,0,3,2) #CFCAG #tempo bit=0.25 #tbit/4 total de tempos en compas tbit=6 #patrones rítmicos ry=(spread rrand(3, tbit), tbit) #bass ry2=(spread rrand(1, tbit), tbit) #cymball #en el arpegio lead el volumen y la distorción varían v=(range 0,1, step:bit) + (range 1,0, step:bit) #índice del programa prgi=0 #total de vueltas ctotal=0 46.times do #c=chord base que copiamos del programa #más adelante prg mutará c=adn[prg[prgi]] puts prgi ,prg[prgi],c, ctotal in_thread do #rythm j=0 tbit.times do if ry[j] sample :drum_bass_hard, amp:3 end if ry2[j] sample :drum_cymbal_pedal, amp:0.5 end j=j+1 sleep bit end end if ctotal > 1 in_thread do #Bass use_synth :fm with_fx(:level, amp:5) do play degree(c,toL,sc), release: bit * tbit end end end if ctotal > 4 and ctotal < 40 in_thread do #Chord use_synth :tb303 cr=chord_degree(c,toR,sc,4) with_fx(:reverb, room:1 ) do play_pattern_timed [cr[0],cr[3],cr[1],cr[0],cr[2],cr[1]], bit end end end if ctotal > 9 and ctotal < 35 in_thread do #lead use_synth :tri cr=chord_degree(c,toH,sc,5) with_fx(:distortion, distort: v[ctotal]/1.25, amp: v[ctotal]/2) do play_pattern_timed [cr[5],cr[3],cr[5],cr[4],cr[2],cr[5]], bit end end end #los thread se ejecutan tbits y acaban sincronizados #el hilo principal duerme hasta que terminan sleep bit * tbit prgi=prgi+1 if prgi>4 prgi=0 #elegir otro patrón rítimco ry=(spread rrand(3, tbit) , tbit) ry2=(spread rrand(1, tbit), tbit) end ctotal=ctotal+1 if factor?(ctotal,tbit) end end