il REBOP "incoraggia la creatività per se stessi piuttosto che per il consumo culturale". Non produce alcuna opera completa, quindi non esiste nulla da diciamo consumare e valutare. Il REBOP crea sempre composizioni parziali quindi mai complete; non crea opere musicali da consumare passivamente; quello che viene creato con il REBOP (che poi è solo una fotografia di una piccola parte dell'intero processo), può certamente essere condiviso open source, può essere quindi fonte di ispirazione e di studio, può essere analizzato e esplorato, ma ha già esaurito la sua funzione primaria : quella di portare il compositore in uno stato meditativo intenso; il REBOP è un processo di Esplorazione Realtime e dall'Hacking, dal LiveCoding, dal Reverse Engineering, dalla Composizione Algoritmica e dalla Sintesi del Suono, a tendere, si allargherà per pervadere e comprendere ogni momento e aspetto della vita quotidiana, in termini Situazionisti;

(
var c,e;
var bassAmp = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]*0.6;
c=Pseq([4,0,0,4,4,0,0,0,4,0,0,0,4,4,3.5,0]*1,1);
e=Pseq([0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,3.5]*1,1);
Pbindef(~bzbass2,\instrument,\bz_bass,\scale,Scale.yu,\root,5,\octave,2,
\degree,Pseq([Pn(c,3),Pn(e,3)],inf),\dur,1/2,\amp,Pseq(bassAmp,inf),\rel,
0.3,\pan,-0.3);
Pbindef(~bzbass2).play;
)
(
var c,e;
var synth2Amp = [ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1 ]*0.2;
c=Pseq([4,0,0,4,4,0,0,0,4,0,0,0,4,4,3.5,0]*1,1);
e=Pseq([0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,3.5]*1,1);
Pbindef(~synth2,\instrument,\sinfb,\scale,Scale.yu,\root,5,\octave,5,
\degree,Pseq([Pn(c,3),Pn(e,3)],inf),\dur,1/2,\amp,Pseq(synth2Amp,inf),\rel,
1.9,\pan,-0.7,\fb,1.7);
Pbindef(~synth2).play;
)

(
var c,e;
var bassAmp = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]*0.3;
c=Pseq([4,0,0,4,4,0,0,0,4,0,0,0,4,4,3.5,0]*1,1);
Pbindef(~flute,\instrument,\flute,\scale,Scale.yu,\root,5,\octave,4,
\degree,Pseq([Pn(c,3)],inf),\dur,1/2,\amp,Pseq(bassAmp,inf),\rel,
0.3,\pan,0.7);
)

(
var c,e;
var bassAmp = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]*0.2;
c=Pseq([4,0,4,4,4,0,4,4,4,0,4,4,4,4,3.5,0]*1,1);
e=Pseq([0,3.5,3.5,4]*1,4);
c=Pseq([0,1,3.5,3,4,5,6,7,0,1,3.5,3,4,5,6,7]*1,2);
e=Pseq([4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4]*1,1);
Pbindef(~xx,\instrument,\synth,\scale,Scale.yu,\root,5,\octave,3,
\degree,Pseq([Pn(c,3),Pn(e,3)],inf),\dur,1/4,\amp,Pseq(bassAmp,inf),\rel,
0.3,\pan,0.3);
)

(
~b=Pbind(\instrument,\bz_bass,\scale,Scale.yu,\root,5,\octave,2,\degree,Pseq([0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,3.5]*1,inf),\dur,1/2,\amp,0.5);
~b.play;
)

(
//var kickAmps = [ 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ]*0.3;
var kickAmps = [ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]*0.3;
Pbindef(~k2, \instrument, \bplay, \buf, d["k"][0], \dur, 1/4, \amp,  Pseq(kickAmps, inf),
\rate, 1,\pan, 0.1);
Pbindef(~k2).play
)
(
var kickAmps = [ 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ]*0.3;
~k1=Pbind( \instrument, \bplay, \buf, d["k"][1], \dur, 1/4, \amp,  Pseq(kickAmps, inf),
\rate, 1,\pan, -0.3);
~k1.play;
)

(
//var snareAmps = [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0 ]*0.2; // 16 beats
var snareAmps = [ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1 ]*0.15; // 16 beats
//var snareAmps = [ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ]*0.1; // 16 beats
~sn = Pbind(\instrument,\bplay,\buf,d["s"][0],\dur,1/4,\amp,Pseq(snareAmps,inf),\pan,-0.1);
~sn.play;
)

(
//var hatAmps = [ 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 ]*0.1; // 16 beats
var hatAmps = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]*0.1; // 16 beats
~h = Pbind(\instrument,\bplay,\buf,d["ch"][0],\dur,1/4,\amp,Pseq(hatAmps,inf),\pan,0.3);
~h.play;
)

(
//var hatAmps = [ 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 ]*0.1; // 16 beats
var hatAmps = [ 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0 ]*0.1; // 16 beats
~h2 = Pbind(\instrument,\bplay,\buf,d["ch"][3],\dur,1/4,\amp,Pseq(hatAmps,inf),\pan,-0.3);
~h2.play;
)


(
var voAmps = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]*0.4; // 16 beats
~v = Pbind(\instrument,\bplay,\buf,d["voices"][2],\dur,120,\amp,Pseq(voAmps,inf),\pan,0.3);
~v.play;
)
(
var voAmps = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]*0.4; // 16 beats
~v1 = Pbind(\instrument,\bplay,\buf,d["voices"][4],\dur,120,\amp,Pseq(voAmps,inf),\pan,0.3);
~v1.play;
)






REBOP : Realtime Exploration Beyond Ordinary Possibilities

Il REBOP nasce dalle mie esperienze di composizione algoritmica con SuperCollider e con l'OpenGL GLSL e da alcune consapevolezze raggiunte durante i vari esperimenti; il REBOP "incoraggia la creatività per se stessi piuttosto che per il consumo culturale". Non produce alcuna opera completa, quindi non esiste nulla da diciamo consumare e valutare. Il REBOP crea sempre composizioni parziali, quindi, mai complete; non crea opere musicali e non da consumare, oltretutto nella maggiorparte dei casi come succede sempre più spesso, passivamente; quello che magari viene creato con il REBOP (che poi è solo una fotografia di una piccola parte dell'intero processo), può certamente essere condiviso Open Source, può essere quindi fonte di ispirazione e di studio, può essere analizzato e esplorato, ma ha già esaurito la sua funzione primaria : quella di portare il compositore in uno stato meditativo intenso, che è poi la funzione primaria dell'intero processo del REBOP; il REBOP è un viaggio esplorativo di Codifica Live, Realtime, Just In Time Programming, verso nuove e non ordinarie possibilità, compositive e non; il REBOP non è un fine ma un mezzo; il REBOP dalla Composizione Realtime, a tendere, si allargherà per pervadere e comprendere ogni momento e aspetto della vita quotidiana, in termini situazionisti;

Per i nostri scopi, "meditativo" non ha nulla a che fare con l'entrare in trance, elevarsi, fuggire dalla realtà, non ha nulla a che fare con l'auto-aiuto, con il superare malattie mentali o capire come gli algoritmi o la codifica "estendano" la mente. Queste potrebbero essere conseguenze secondarie estemporanee anche non desiderabili. Né il REBOP tratta di bellezza o di godimento di un'esperienza pura ed estetica. "Meditativo", in questo testo, ha a che fare con il coltivare la consapevolezza del momento presente.

Se il nostro intento è generare opere musicali durante la codifica e l'esplorazione realtime, qualsiasi idea su come confezionarle, venderle o distribuirle o su cosa fare affinchè risultino interessanti a un ipotetico pubblico anche virtuale, ci allontana inevitabilmente dal momento presente. Se, durante il REBOP, i nostri pensieri vagano assorbiti dalle preoccupazioni su come presentare e rappresentare il nostro lavoro in futuro, allora abbiamo lasciato nuovamente il momento presente.

Confrontare il lavoro che si sta creando con altri lavori precedenti, ci porta dal presente al passato. Abbiamo bisogno di capire come l'intenzione di creare opere musicali influenzi il potenziale meditativo della nostra esperienza.

I compositori sperimentali non sono in genere interessati a prescrivere un oggetto temporale definito i cui materiali, strutture e relazioni siano calcolati e disposti in anticipo, ma sono più eccitati dalla prospettiva di delineare una situazione in cui possono verificarsi suoni e melodie, un processo di generazione di suoni, uno spazio magari delimitato da certe "regole non regole" compositive.

Oltre a lasciare andare le idee sull'opera musicale durante gli eventi di codifica e esplorazione realtime, faremmo anche bene a lasciare andare le nostre idee sulla musica. Se l'obiettivo durante la codifica REBOP meditativa è lasciare andare il giudizio, allora una musica definita come "ordinata", "gradevole", "espressiva" o "bella" non ci offre nulla. La musica generata durante il REBOP può comunque essere ordinata, gradevole, espressiva, per alcuni e per il compositore stesso, ma questo non è lo scopo del REBOP, come non lo sono venderla o ottenere apprezzamenti; per la codifica REBOP esplorativa, dobbiamo spostare l'enfasi dagli oggetti musicali alle attività musicali; porre attenzione al processo REBOP e lasciare andare gli oggetti musicali, semplicemente osservarli;

Quando spostiamo il nostro pensiero dagli oggetti musicali e iniziamo a osservare attività, relazioni e eventi, riduciamo la necessità di raggiungere o ottenere, e creiamo spazio per sperimentare.
Per il Rebopper qualsiasi scoperta può essere "vera"; un Rebopper considera qualsiasi ipotesi o analisi e misura le sue conseguenze pratiche per determinare ciò che può migliorare l'esperienza.

I praticanti del Pali-language Theravada (Buddhisti) usano il canto specificamente per coltivare la consapevolezza e non descrivono i suoni che producono come "musica".

Il REBOP ci chiede di rimanere nel momento, il che richiede meno sforzo quando vediamo un processo di codifica e esplorazione realtime come un'attività che non deve produrre certe cose o conformarsi a regole immaginarie come quelle che definiscono le opere musicali.

Strettamente legato al free jazz e spesso associata a musicisti come John Zorn, Anthony Braxton e Derek Bailey, l'improvvisazione libera è nota per la sua mancanza di regole. I Rebopper  possono iniziare con l'editor vuoto o da un codice preparato in anticipo e gradualmente allontanarsene; scartano completamente le nozioni di lavoro musicale e lasciano cadere i giudizi sugli oggetti musicali per porre attenzione al processo di esplorazione e codifica REBOP;

Non dobbiamo mai giudicare un'esperienza di codifica e esplorazione realtime come un fallimento, un successo o peggio come qualcosa di neutrale. La realtà è che "solo prestare attenzione" è tanto difficile quanto semplice. Va contro il nostro condizionamento culturale il fatto che la produzione musicale non porti alcuna informazione e che non significhi nulla. Ma se codificare REBOP diventa un'esperienza meditativa che coltiva la consapevolezza, allora possiamo iniziare riconoscendo come le nostre idee sulle opere musicali, sulla musica e sull'interpretazione influenzino le nostre esperienze. Per fortuna, è difficile aggrapparsi a idee che contraddicano l'esperienza personale, quindi anche solo vivere un piccolo momento di un evento di codifica e esplorazione realtime senza giudizio può avere un impatto duraturo e positivo e portarci a consapevolezze altre.

il REBOP è un'esplorazione in tempo reale al di là delle ordinarie possibilità; quali sono le mie ordinarie possibilità come artista, musicista mashupper? con il REBOP sto esplorarando altre possibilità compositive e non attraverso la composizione algoritmica e il live coding ('on-the-fly programming','just in time programming', 'conversational programming', 'slow coding', 'realtime coding'); ma è una composizione appunto fatta per altri scopi, come appunto coltivare la consapevolezza del momento presente; il REBOP è intelligenza giocosa, è improvvisazione, spontaneità, è esplorazione, hacking; cè molto REBOP anche nello SnowCrash Project anche se apparentemente questo non risulta evidente;

Il termine REBOP (prima versione del più conosciutò BEBOP) è un'onomatopea che imita una brevissima frase di due note usata talvolta nell'ambito del jazz come "segnale" per terminare un brano;

Diverse parti del testo sono frutto della traduzione e della rielaborazione di frammenti dell'articolo "Meditative Live Coding and Musicological Hindrances" di Matthew Tift Lullabot




// This is a rework of https://www.shadertoy.com/view/lsfGzr,
// created by @paulofalcao, with sound, by Radical Ed
// License: Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License


#define time iTime

float makePoint(float x,float y,float fx,float fy,float sx,float sy,float t, float w){
   float xx=x+sin(t*fx)*sx*tan(fx*t)*log(fx*t);
   float yy=y+cos(t*fy)*sy*tan(fy*t)*log(fy*t);
   return 5.0*abs(sin(25.0*t/337.0))/sqrt(xx*xx+yy*yy)+log(w/4.0);
}

void mainImage( out vec4 fragColor, in vec2 fragCoord ) {

   vec2 p=(fragCoord.xy/iResolution.x)*2.0-vec2(1.0,iResolution.y/iResolution.x);


 
   // create pixel coordinates
   vec2 uv = fragCoord.xy / iResolution.xy;

   // the sound texture is 512x2
   int tx = int(uv.x*512.0);
 

   // second row is the sound wave, one texel is one mono sample
   float wave = texelFetch( iChannel0, ivec2(tx,1), 0 ).x;
 
   vec2 translate = vec2(cos(iTime),sin(iTime));
 
 
 
   p=p*7.0*abs(sin(iTime));
   p += translate*1.35*sin(iTime);
 
   float x=p.x;
   float y=p.y;
 
   vec3 col = vec3( 0.0, 0.0, 0.0);

    // add wave form on top
   //col += smoothstep( 0.0, 0.15, abs(wave- uv.x)/2.0 );
 
    //if (wave > 0.4) { wave = 0.4 ;}
 

   float a=
   makePoint(x + col.x,y + col.y,2.0,2.9,0.3,0.3,time, wave);
   a=a+makePoint(x + col.x,y + col.y,1.9,2.0,0.4,0.4,time, wave);
   a=a+makePoint(x + col.x,y + col.y,0.8,0.7,0.4,0.5,time, wave);
   a=a+makePoint(x + col.x,y + col.y,2.3,0.1,0.6,0.3,time, wave);
   a=a+makePoint(x + col.x,y + col.y,0.8,1.7,0.5,0.4,time, wave);
   a=a+makePoint(x + col.x,y + col.y,0.3,1.0,0.4,0.4,time, wave);
   a=a+makePoint(x + col.x,y + col.y,1.4,1.7,0.4,0.5,time, wave);
   a=a+makePoint(x + col.x,y + col.y,1.3,2.1,0.6,0.3,time, wave);
   a=a+makePoint(x + col.x,y + col.y,1.8,1.7,0.5,0.4,time, wave);
   
 
   float b=
   makePoint(x + col.x,y + col.y,1.2,1.9,0.3,0.3,time, wave);
   b=b+makePoint(x + col.x,y + col.y,0.7,2.7,0.4,0.4,time, wave);
   b=b+makePoint(x + col.x,y + col.y,1.4,0.6,0.4,0.5,time, wave);
   b=b+makePoint(x + col.x,y + col.y,2.6,0.4,0.6,0.3,time, wave);
   b=b+makePoint(x + col.x,y + col.y,0.7,1.4,0.5,0.4,time, wave);
   b=b+makePoint(x + col.x,y + col.y,0.7,1.7,0.4,0.4,time, wave);
   b=b+makePoint(x + col.x,y + col.y,0.8,0.5,0.4,0.5,time, wave);
   b=b+makePoint(x + col.x,y + col.y,1.4,0.9,0.6,0.3,time, wave);
   b=b+makePoint(x + col.x,y + col.y,0.7,1.3,0.5,0.4,time, wave);
 

   float c=
   makePoint(x + col.x,y + col.y,3.7,0.3,0.3,0.3,time, wave);
   c=c+makePoint(x + col.x,y + col.y,1.9,1.3,0.4,0.4,time, wave);
   c=c+makePoint(x + col.x,y + col.y,0.8,0.9,0.4,0.5,time, wave);
   c=c+makePoint(x + col.x,y + col.y,1.2,1.7,0.6,0.3,time, wave);
   c=c+makePoint(x + col.x,y + col.y,0.3,0.6,0.5,0.4,time, wave);
   c=c+makePoint(x + col.x,y + col.y,0.3,0.3,0.4,0.4,time, wave);
   c=c+makePoint(x + col.x,y + col.y,1.4,0.8,0.4,0.5,time, wave);
   c=c+makePoint(x + col.x,y + col.y,0.2,0.6,0.6,0.3,time, wave);
   c=c+makePoint(x + col.x,y + col.y,1.3,0.5,0.5,0.4,time, wave);
 
 
   vec3 d=vec3(a,b,c)/22.0;
 
 
   fragColor = vec4(d.x*2.0,d.x,d.x,1.0);
}