Dinou

Dinou – Algoambient

Aquesta és la versió estéreo i més breu de la peça per 8 canals que vaig tocar dissabte passat a l’Antic Forn de Vallcarca, amb visuals de Turbulente, en el context de l’Algobiente IV. Copio el codi en SuperCollider a continuació:

//sintes

(
SynthDef(\serra_multi, {
   arg freq=220, width=0.1, pan=0, atk=0.1, rel=0.4, vol=0.5;
   var env, sig;
   env = EnvGen.kr(Env([0.01, 1, 0.01], [atk, rel], \exp), doneAction: 2);
   sig =
   VarSaw.ar(Rand(freq*0.95, freq*1.05), width: width, mul: 0.2) +
   VarSaw.ar(Rand(freq*0.95, freq*1.05), width: width, mul: 0.2) +
   VarSaw.ar(Rand(freq*0.95, freq*1.05), width: width, mul: 0.2) +
   VarSaw.ar(Rand(freq*0.95, freq*1.05), width: width, mul: 0.2) +
   VarSaw.ar(Rand(freq*0.95, freq*1.05), width: width, mul: 0.2) +
   VarSaw.ar(Rand(freq*0.95, freq*1.05), width: width, mul: 0.2) +
   VarSaw.ar(Rand(freq*0.95, freq*1.05), width: width, mul: 0.2) +
   VarSaw.ar(Rand(freq*0.95, freq*1.05), width: width, mul: 0.2);
   sig = sig * env;
   sig = Pan2.ar(sig, pan, vol);
   //sig = PanAz.ar(8, sig, pan, vol, 2, 0);
   Out.ar(0, sig);
}).add;
)

(
SynthDef(\sinus_perc_multi, {
   arg freq=100, pan=0, vol=0.2, atk=0.05, rel=0.2, curve= -8;
   var sig;
   sig =
   SinOsc.ar(Rand(freq*0.99, freq*1.01), Rand(0, pi/2))*EnvGen.kr(Env.perc(atk, rel, curve: curve), doneAction: 2) +
   SinOsc.ar(Rand(freq*0.99, freq*1.01), Rand(0, pi/2))*EnvGen.kr(Env.perc(atk, rel, curve: curve), doneAction: 2) +
   SinOsc.ar(Rand(freq*0.99, freq*1.01), Rand(0, pi/2))*EnvGen.kr(Env.perc(atk, rel, curve: curve), doneAction: 2) +
   SinOsc.ar(Rand(freq*0.99, freq*1.01), Rand(0, pi/2))*EnvGen.kr(Env.perc(atk, rel, curve: curve), doneAction: 2) +
   SinOsc.ar(Rand(freq*0.99, freq*1.01), Rand(0, pi/2))*EnvGen.kr(Env.perc(atk, rel, curve: curve), doneAction: 2) +
   SinOsc.ar(Rand(freq*0.99, freq*1.01), Rand(0, pi/2))*EnvGen.kr(Env.perc(atk, rel, curve: curve), doneAction: 2) +
   SinOsc.ar(Rand(freq*0.99, freq*1.01), Rand(0, pi/2))*EnvGen.kr(Env.perc(atk, rel, curve: curve), doneAction: 2) +
   SinOsc.ar(Rand(freq*0.99, freq*1.01), Rand(0, pi/2))*EnvGen.kr(Env.perc(atk, rel, curve: curve), doneAction: 2);
   sig = Pan2.ar(sig, pan, vol);
   //sig = PanAz.ar(8, sig, pan, vol, 2, 0);
   Out.ar(0, sig);
}).add;
)

(
SynthDef(\pulse_multi, {
   arg freq=100, atk=0.04, dur=5, rel=1, pan=0, vol=0.5;
   var sig, env;
   env = EnvGen.kr(Env([0.01, 0.5, 1, 0.01], [atk, dur, rel], \exp), doneAction: 2);
   sig =
   Pulse.ar(freq*Rand(0.98, 1.02), SinOsc.kr(2).range(0.02, 0.98), 0.03) +
   Pulse.ar(freq*Rand(0.98, 1.02), SinOsc.kr(2).range(0.02, 0.98), 0.03) +
   Pulse.ar(freq*Rand(0.98, 1.02), SinOsc.kr(2).range(0.02, 0.98), 0.03) +
   Pulse.ar(freq*Rand(0.98, 1.02), SinOsc.kr(2).range(0.02, 0.98), 0.03) +
   Pulse.ar(freq*Rand(0.98, 1.02), SinOsc.kr(2).range(0.02, 0.98), 0.03) +
   Pulse.ar(freq*Rand(0.98, 1.02), SinOsc.kr(2).range(0.02, 0.98), 0.03) +
   Pulse.ar(freq*Rand(0.98, 1.02), SinOsc.kr(2).range(0.02, 0.98), 0.03) +
   Pulse.ar(freq*Rand(0.98, 1.02), SinOsc.kr(2).range(0.02, 0.98), 0.03);
   sig = sig * env;
   sig = Pan2.ar(sig, pan, vol);
   //sig = PanAz.ar(8, sig, pan, vol, 2, 0);
   Out.ar(0, sig);
}).add;
)


//patrons

(
Pdef(\agobiante,
   Pbind(
     \instrument, \serra_multi,
     \freq, Pexprand(40, 8000),
     \width, Pwhite(0.1, 0.9),
     \dur, Pwhite(0.5, 16),
     \atk, Pwhite(0.01, 16),
     \rel, Pwhite(0.01, 16),
     \vol, Pexprand(0.01, 1),
     //\pan, Pwhite(0, 2.5)
     \pan, Pwhite(-1, 1)
   )
).play;
)

(
Pdef(\ocells,
   Pbind(
     \instrument, \sinus_perc_multi,
     \freq, Pexprand(4000, 8000),
     \curve, Pwhite(-8, 0),
     \dur, Prand([0.125, 0.25, 8], inf),
     \rel, Pwhite(0.1, 0.4),
     \vol, Pexprand(0.01, 0.15),
     \pan, Pwhite(0, 2.5)
     //\pan, Pwhite(-1, 1)
   )
).play;
)

(
Pdef(\gotes,
   Pbind(
     \instrument, \sinus_perc_multi,
     \midinote,
     Pfsm([ //Gràcies RJdC ;-)
       #[0],
       70, #[1],
       69, #[2],
       67, #[0, 3],
       65, #[4],
       63, #[3, 5],
       62, #[6],
       60, #[7],
       58, #[0, 7, 8],
       57, #[9],
       55, #[10],
       53, #[9, 11],
       51, #[12],
       50, #[2, 7, 13],
       48, #[14],
       46, #[15],
       45, #[4, 0],
     ], inf),
     \curve, -8,
     \dur, Prand([0.125, 0.25, 8], inf),
     \vol, Pexprand(0.02, 0.05),
     //\pan, Pwhite(0, 2.5)
     \pan, Pwhite(-1, 1)
  )
).play(quant: 0.5);
)

(
Pdef(\drama,
   Pbind(
     \instrument, \pulse_multi,
     \midinote, Pseq([58, 60, 61, 60], inf),
     \dur, 2,
     \vol, 1,
     //\pan, Pwhite(0, 2.5)
     \pan, Pwhite(-1, 1)
  )
).play(quant: 8);
)

(
Pdef(\mes_drama,
   Pbind(
     \instrument, \pulse_multi,
     \midinote, Prand([64, 66, 67, 66], inf),
     \dur, 2,
     \vol, 1,
     //\pan, Pwhite(0, 2.5)
     \pan, Pwhite(-1, 1)
   )
).play(quant: 8);
)

Dinou – La diferència entre el ritme i l’afinació és il·lusòria

A l’inici de l’àudio que pots sentir a continuació, el canal de l’esquerra fa un pulsació per segon, i el de la dreta 1,25 pulsacions per segon (és a dir 5 pulsacions cada 4 segons). El que sona doncs és una polirítmia de 4 contra 5 pulsacions (si ho penses en notació musical tradicional, quatre negres al canal esquerra contra un cinquet de negres al canal dret). Passats els primers 10 segons, la freqüència de les dues pulsacions s’accelera paulatinament, fins valors 220 vegades superiors als inicials. Així, ara al canal de l’esquerra hi sonen 1 x 220 = 220 polsos per segon, i al dret 1,25 x 220 = 275 polsos per segon. La ràtio entre les freqüències de les dues pulsacions s’ha mantingut constant, 275 / 220 = 1.25. Les dues pulsacions mantenen doncs la mateixa relació, però el que sentim ara ja no és una polirítmia de 4 contra 5 pulsacions, sinó l’interval La – Do # (un interval de tercera major). Passats 10 segons més, les dues freqüències tornen progressivament als seus valors inicials, d’1 i 1,25 pulsacions per segons.

La senyal d’un i altre canal no han variat al llarg del procés, només n’hem augmentat i disminuït la freqüència, i malgrat tot el que sentim a l’inici de l’àudio, una polirítmia, és completament diferent del què sentim al tram central, l’interval entre dues notes diferents. És per això que puc afirmar que la diferència entre el ritme i l’afinació és il·lusòria. Per il·lusòria no vull dir que sigui falsa, sinó simplement que depèn de la percepció humana (que això són les il·lusions al cap i la fi). Aquestes dues senyals s’han accelerat i alentit, però és enraonat afirmar que, en allò substancial, s’han mantingut sempre iguals. El què ens fa sentir-hi una transformació tan significativa és la naturalesa del nostre sistema auditiu.

Aquest és el codi en SuperCollider de l’àudio anterior:

(
{
   var sig, freq;
   freq = EnvGen.kr(Env([1, 1, 220, 220, 1, 1], [10, 30, 10, 30, 10], \exp), doneAction: 2);
   sig = [Pulse.ar(freq), Pulse.ar(freq*1.25)];
   sig;
}.play
)

Dinou – Roda dentada

Copio a continuació el codi en SuperCollider d’aquesta peça musical, titulada Roda dentada. De nou es tracta d’una peça de duració indefinidament llarga, que si bé té un inici ben definit, no pot tenir cap final concret, més enllà de la disgregació de l’escolta a partir d’un cert punt. A l’arxiu d’àudio que podeu sentir aquí hi ha gravats 20 minuts aproximadament de la peça, però això no vol dir res. Senzillament m’ha semblat que era un temps suficient per donar a entendre la idea que la peça evoluciona lentament i que es pot deixar sonar tant com es vulgui.

(
SynthDef(\serra, {
  arg freq, vol=0.1, center=0, width=0.1;
  var sig, env;
  env = EnvGen.kr(Env.perc(curve: -4), doneAction: 2);
  sig = VarSaw.ar({ExpRand(freq*0.99, freq*1.01)}!19, width: width);
  sig = Splay.ar(sig, level: vol, center: center);
  sig = sig * env;
  Out.ar(0, sig);
}).add;
)

(
Pdef(\veu1,
  Pbind(
    \instrument, \serra,
    \dur, 0.125,
    \center, Pwhite(-2, 2),
    \width, Pwhite(0, 1),
    \vol, Pexprand(0.05, 0.15),
    \midinote, Pseq([
      45, 48, 52, 53, 55, 59,
      42, 48, 52, 53, 55, 62,
      39, 48, 52, 53, 55, 64,
      36, 48, 52, 53, 55, 59, 63, 66
    ], inf)
  )
).play(quant: 3.25);

Pdef(\veu2,
  Pbind(
    \instrument, \serra,
    \dur, 0.1251,
    \center, Pwhite(-2, 2),
    \width, Pwhite(0, 1),
    \vol, Pexprand(0.05, 0.15),
    \midinote, Pseq([
      45, 48, 52, 53, 55, 59,
      42, 48, 52, 53, 55, 62,
      39, 48, 52, 53, 55, 64,
      36, 48, 52, 53, 55, 59, 63, 69
    ], inf)
  )
).play(quant: 3.25);

Pdef(\veu3,
  Pbind(
    \instrument, \serra,
    \dur, 0.1252,
    \center, Pwhite(-2, 2),
    \width, Pwhite(0, 1),
    \vol, Pexprand(0.05, 0.15),
    \midinote, Pseq([
      45, 48, 52, 53, 55, 59,
      42, 48, 52, 53, 55, 62,
      39, 48, 52, 53, 55, 64,
      36, 48, 52, 53, 55, 59, 63, 72
    ], inf)
  )
).play(quant: 3.25);
)

Dinou – Perduts matí i vespre

Perdut matí:

Perdut vespre:

Copio a continuació el codi en SuperCollider que he fet servir per generar aquestes dues peces musicals, titulades Perdut matí i Perdut vespre. En els dos casos es tracta d’un acompanyament fixat, repetitiu, sobre el qual evoluciona una melodia aleatòria.

És important dir que els dos arxius que pots reproduir a l’inici d’aquesta entrada són dos enregistraments particulars, d’uns 5 minuts cadascun aproximadament, d’aquestes peces, però que no són en cap cas les peces. Serien, per dir-ho així, interpretacions concretes de les peces (interpretacions fetes per l’ordinador, en aquest cas). Una interpretació de Perdut matí i de Perdut vespre consistiria en una execució concreta del codi que copio a sota, en unes circumstàncies determinades. Perdut matí consta de les veus anomenades \baix, \harmonia i \melodia1; Perdut vespre consta de les veus \baix i \melodia2. En si les dues peces tenen una duració indefinida i, en rigor, excepte accidents (és clar), no es repeteixen mai.

La Lúa Coderch em deia l’altre dia que aquestes peces són caixetes de música. Penso que té raó. Però són caixetes de música no mecàniques, caixetes computacionals, aleatòries i infinites.

(
SynthDef(\ding, {
     arg freq;
     var env = EnvGen.kr(Env.perc(releaseTime: 3, level: {Rand(0.05, 0.2)}), doneAction: 2);
     var sig = SinOsc.ar(freq*{Rand(0.99, 1.01)}!2)*env;
     Out.ar(0, sig);
}).add
)

(
x = Pdef(\baix,
     Pbind(
         \instrument, \ding,
         \dur, Pseq([2, 3], inf),
         \degree, Pseq([-3, -2, 0], inf),
         \scale, Scale.minor
     )
).play(TempoClock.default)
)

x.clear

(
y = Pdef(\harmonia,
     Pbind(
         \instrument, \ding,
         \dur, Pseq([0.5, 0.25, 0.25, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25], inf),
         \degree, Pseq([0, 2, 4, 1, 3, 4, 2, 0, 1, 3], inf),
         \scale, Scale.minor
     )
).play(TempoClock.default)
)

y.clear

(
z = Pdef(\melodia1,
     Pbind(
         \instrument, \ding,
         \dur, Pseq([Prand([0.5, 0.25])], inf),
         \degree, Pseq([Prand([2, 3, 4, 6, 7, 8, 9, 10, 11, 12])], inf),
         \scale, Scale.minor
     )
).play(TempoClock.default)
)

z.clear

(
t = Pdef(\melodia2,
     Pbind(
         \instrument, \ding,
         \dur, Pseq([Prand([0.5, 1, 1.5, 2])], inf),
         \degree, Pseq([Prand([1, 2, 3, 4, 5, 6, 7, 8])], inf),
         \scale, Scale.minor
     )
).play(TempoClock.default)
)

t.clear

Dinou – Dents de serra

Copio a continuació el codi en SuperCollider d’aquesta peça, titulada Dents de serra. En aquesta ocasió la peça dura exactament una hora. Evoluciona durant els primers 30 minuts, fins el punt central de la peça, a partir del qual desfà els seus passos, de manera exacta, fins que torna al punt inicial.

(
SynthDef(\drone, {
     arg dur=3600, fon=150;
     var env, veu1, veu2, veu3, veu4, veu5, veu6, veu7, veu8, veu9, veu10, veu11, veu12, veu13, veu14, veu15, veu16, veu17, veu18, veu19;
     env = EnvGen.kr(Env.new([0, 0.25, 0.25, 0], [5, dur-10, 5]), doneAction: 2);
     veu1 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/19))
     )*env;
     veu2 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/2)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/18))
     )*env;
     veu3 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/3)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/17))
     )*env;
     veu4 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/4)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/16))
     )*env;
     veu5 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/5)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/15))
     )*env;
     veu6 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/6)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/14))
     )*env;
     veu7 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/7)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/13))
     )*env;
     veu8 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/8)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/12))
     )*env;
     veu9 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/9)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/11))
     )*env;
     veu10 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/10)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/10))
     )*env;
     veu11 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/11)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/9))
     )*env;
     veu12 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/12)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/8))
     )*env;
     veu13 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/13)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/7))
     )*env;
     veu14 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/14)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/6))
     )*env;
     veu15 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/15)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/5))
     )*env;
     veu16 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/16)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/4))
     )*env;
     veu17 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/17)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/3))
     )*env;
     veu18 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/18)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800/2))
     )*env;
     veu19 = VarSaw.ar(
         EnvGen.kr(Env.circle([fon, fon*1.5], 1800/19)), 0,
         EnvGen.kr(Env.circle([0, 1], 1800))
     )*env;
     Out.ar(0, Splay.ar([veu1, veu2, veu3, veu4, veu5, veu6, veu7, veu8, veu9, veu10, veu11, veu12, veu13, veu14, veu15, veu16, veu17, veu18, veu19]));
}).add
)

x = Synth(\drone);

Dinou – M4

Copio a continuació el codi en SuperCollider d’aquesta peça musical, titulada M4.

(
SynthDef.new(\m4, {
     arg fon=40, dur=3600;
     var freq1, freq2, freq3, freq4, veu1, veu2, veu3, veu4, env;
     env = EnvGen.kr(Env.new([0.01, 0.5, 0.5, 0.01], [20, dur-40, 20], \exp), doneAction: 2);
     freq1 = EnvGen.kr(Env.circle([fon, fon*4/3, fon*5/4, fon*4/3], [600, 600, 600], \exp));
     freq2 = EnvGen.kr(Env.circle([fon, fon*4/3, fon*5/4, fon*4/3], [750, 750, 750], \exp));
     freq3 = EnvGen.kr(Env.circle([fon, fon*4/3, fon*5/4, fon*4/3], [900, 900, 900], \exp));
     freq4 = EnvGen.kr(Env.circle([fon, fon*4/3, fon*5/4, fon*4/3], [1050, 1050, 1050], \exp));
     veu1 = VarSaw.ar(freq1)*env;
     veu2 = VarSaw.ar(freq2)*env;
     veu3 = VarSaw.ar(freq3)*env;
     veu4 = VarSaw.ar(freq4)*env;
     Out.ar(0, Splay.ar([veu1, veu2, veu3, veu4]));
}).add;
)

x = Synth.new(\m4);

M4 té una duració indefinida. Al codi tal com l’he escrit aquí, i a l’arxiu d’àudio que pots reproduir a l’inici d’aquesta entrada, la duració de la peça és d’un hora (3600 segons), però he fixat aquesta duració de forma arbitrària. La peça pot ser tan llarga com es vulgui. En tant que peça, és virtualment infinita. Si no he errat els càlculs, M4 és un loop de 70 hores de duració: cada 70 hores, la peça torna a començar, i es repeteix exactament igual. Podem identificar aquest fet llegint el codi de la peça, però és un fet imperceptible per l’oïda humana, així que pot ser que no tingui cap rellevància musical.