Quando negli anni '80 si scatenò negli Stati Uniti la furia dell'esercito di perbenisti, un'armata grottesca di mammine pancine anti-rock, raffinate e feroci altoborghesi in fregola di politicamente corretto e nerd progressisti decerebrati con l'intento di mettere le mutande alle parole e farla finita con la libertà d'espressione degli artisti, si erse gigantesca la figura di Frank Zappa a ribattere colpo su colpo a ognuna delle loro idiozie.

Oggi abbiamo gli scientisti ritardati, i debunker sfigati e prezzolati e gli algoritmi dei social con il QI di un elettore del PD. La battaglia per la libera espressione è la stessa, oltre ad essere la battaglia per la difesa dell'articolo 21 della Costituzione Italiana; Abbiamo quindi bisogno di tanti Frank Zappa CyberPunk;

"La censura online, al di là di quello che è successo a Byoblu, è un tema enorme. Distorce la trasparenza del dibattito pubblico, che è governata da leggi e istituzioni. Parlo dell'articolo 21, così come delle leggi sulla diffamazione e dell'Ordine dei giornalisti. Sono loro preposti al rispetto delle norme vigenti nel nostro Stato, non YouTube o i social, che quindi disconoscono le norme del nostro ordinamento e agiscono tramite un algoritmo in modo incostituzionale decidendo di cosa si possa o meno parlare e censurando il resto. Sono monopolisti e sono diventati editori a tutti gli effetti. A differenza di quello che dicono loro, non sono fornitori di servizi". Claudio Messora, fondatore di Byoblu, ricostruisce le tappe che hanno portato alla chiusura del canale su YouTube. Un canale "con più di 500mila iscritti e più di duecento milioni di visualizzazioni", sul quale erano stati caricati 14 anni di contenuti video, con interviste, analisi, convegni e manifestazioni pubbliche. La chiusura del canale è avvenuta dopo un avviso e tre avvertimenti, l’iter "classico" che, attraverso progressive sospensioni, porta poi all'oscuramento definitivo. A decidere è un algoritmo che stabilisce se siano state o meno violate le regole della policy fissate dal social. Da ricordare poi che a fine 2020, a seguito della pandemia di C****-19, è stata introdotta una nuova regola di comportamento (qui) secondo cui "YouTube non tollera contenuti che diffondano disinformazione in ambito medico, in contraddizione con le informazioni fornite sul C****-19 dalle autorità sanitarie locali o dall'Organizzazione Mondiale della Sanità (OMS)". Il caso Byoblu, intanto, è finito in un'interrogazione parlamentare del senatore Gianluigi Paragone, arrivato sotto forma di ricorso all’Agcom – ricevuto e accettato il 25 febbraio – e il 5 maggio sarà discusso in Tribunale a Milano per, dice Messora, "far cessare questa condotta persecutoria di Youtube".

"Alcuni scienziati affermano che l'idrogeno, poiché sembra essere ovunque, è la sostanza basilare dell'universo; non sono d'accordo. Io dico che c'è molta più stupidità che idrogeno, e che quella è la vera sostanza costitutiva dell'universo"Frank Zappa

"Perché devi aver per forza torto solo se alcuni milioni di persone pensano così?" Frank Zappa





«Il cielo sopra il porto aveva il colore della televisione sintonizzata su un canale morto.»
(Incipit di Neuromante, William Gibson)

I Blam Punk del Collettivo Decoder lottano contro Le Multinazionali della Silicon Life Society; un movimento di Resistenza, si oppone al Nuovo Ordine Mondiale; è nato dalla strada e costituito da Hacker, Ladri di Dati, Decifratori, Veterani delle Guerre Informatiche e Neuromanti, i Mash Up Umani, Hacker, Artisti e Visionari.

il REBOP Coding è Punk; per la parte del Live MashUp, lavoro essenzialmente con sequenze video create da gif animate, spesso di scarsa qualità, che monto seguendo un tema concettuale e che utilizzo Live per creare sincronie audio/video; il tutto è registrato Live e improvvisato; ogni volta il brano, se possiamo chiamarlo in questo modo, risulta sempre diverso; non sto ricercando un effetto particolare, sto giocando e mi piace molto che risulti tutto imperfetto, sporco, rotto e che vi sia spazio per errori inaspettati ma perfetti che arricchiscono la fotografia audiovisiva finale; più Punk e Anima, meno Cerone, Ombretto e Plastica Industriale; più Ricerca e Esplorazione, meno Merce Morta e Scimmie Ammaestrate;




"Ubriaco senza vino; sazio senza cibo; turbato, affamato e insonne; un Re sotto un umile manto; un tesoro all'interno di una rovina; nè di aria, nè di terra, nè di fuoco e nè di acqua; un mare senza limiti; egli ha cento soli e cento lune e cento cieli; è saggio grazie all'Universo.. non un erudito da libri;" Rumi

Il Randori (Ran: confusione, Dori: controllare, fermare)

Filosoficamente, indica una riduzione alla quiete di un sistema caotico. Un contrasto che richiama ciò che l'atleta vede all'esterno e ciò che, ordinatamente, il suo spirito dovrebbe compiere nell'affrontare quell’esperienza: ricercare l'ippon, liberare il corpo, renderlo creativo, stemperare le paure connesse all'attribuzione di un punteggio, bandire tattiche ed ostruzionismi tipici della gara che sono da ostacolo alla miglior gestione della propria energia, al confronto costruttivo, al reciproco miglioramento ed al concetto di altruità

"Il valore del Randori risiede nel fatto che conferisce prontezza e agilità nell'adattarsi alle situazioni, poiché il suo esercizio risiede soprattutto nell'interagire con l'azione avversaria, e per fronteggiare questi frangenti, occorre applicarsi mentalmente e fisicamente, opportunità offerta soltanto dal Randori"

"Il Randori è un mezzo efficace anche per la coltivazione mentale. Difatti nel Randori esistono azioni differenziate che portano a un continuo gioco di abilità e di intelligenza e più complesso è il gioco, più invitante ne diventa la ricerca"

"Il Randori è un esercizio in cui si impara a rimanere dinamici e reattivi sotto la pressione di più attacchi. Più l'abilità del Randoka o Randi cresce, più egli diventa in grado di fronteggiare attacchi veloci e decisi"

Dori è la sonorizzazione di Tori. La D diventa T quando il termine viene accostato ad un'altra parola. Tori è il sostantivo del verbo toru "prendere", pertanto Tori/Dori significa "presa".

Ran, pronunciato nella sua lettura sino-giapponese, significa "rivolta", "ribellione", "guerra", "disordine".

Randori, fermare la rivolta interiore, la confusione, riduzione alla quiete di un sistema caotico.

Il Sufi a volte danza, ma, mentre danza, al centro rimane assolutamente immobile, il centro del ciclone; la danza è il ciclone, tutto il suo corpo è in movimento, è fluido, dinamico, ma al centro la coscienza osserva in silenzio, indisturbata e senza distrazioni; esteriormente si può solo imparare l'esercizio; esteriormente non si conoscerà mai quello che accade dentro il danzatore; e la vera storia è tutta interiore;

"Non c'è bisogno di edifici, soldi, potere o status sociale per praticare l'Arte della Pace. Il cielo si trova proprio dove voi vi trovate, e quello è il luogo dove praticare" Morihei Ueshiba

Randori Dojo





REBOP Coding From Scratch - Introduzione della gestione delle Scale con i nuovi Operatori; nella sezione dei Tabs, è stata introdotta la possibilità di generare Scale di Note, con i due Operatori Maggiore e Minore  > e <; con la combinazione "8>g3" per esempio, si sta dicendo al sistema REBOP, di generare 8 Note a partire dalla Nota Sol 3a Ottava, che seguono nel caso specifico del video la Scala di Sol Maggiore;


L'uomo nero non è morto, ha gli artigli come un corvo, fa paura la sua voce, prendi subito la croce. Apri gli occhi, resta sveglio, non dormire questa notte;

Gli Incubi peggiori sono quelli che facciamo ad occhi aperti; non smetterò di sognare solo perché ho avuto un Incubo;



Manco le Domande sono permesse, che i soliti RIMBAMBITI ti tacciano subito di Negazionismo; hanno imparato le paroline nuove della Neo Lingua; RIMBAMBITI da decenni tralaltro, che per decenni appunto non hanno speso una parola che sia una per tutto quello che stava accadendo e ora sono diventati etici e ricchi di morale civica e la Mascherina è diventata la bandiera del loro interesse per la Salute Pubblica;

siccome le Domande sono molto importanti e sono fondamentali per capire l'intera vicenda, eccovene alcune, tra le molte che ho in testa :

perchè continuare a tagliare e indebolire il Sistema Sanitario Nazionale, se OGNI ANNO avevamo crisi e Terapie Intensive al collasso?






siccome la letalità del Covid da quello che si evince dallo studio inviato a Maggio 2020 e accettato a Settembre 2020, di J. Ioannidis, professore di Epidemiologia a Stanford, e massimo esperto mondiale di analisi dei dati in medicina e da quello che sostiene il Virologo Palù, già Ordinario di Virologia e Microbiologia all’Università di Padova, Ordinario di Neuroscienze all'Università Temple di Philadelphia, nonchè fondatore della Società italiana di Virologia e passato presidente della Società Europea di Virologia, si attesta intorno al 0.26%, come si spiega l'anomalia dei morti di Bergamo-Brescia in relazione all' allarmismo mediatico, ai protocolli di cura sbagliati, quindi morti iatrogene dovute a terapie sbagliate, autopsie negate, cure efficaci ignorate e ostacolate, medici di base a cui è stato impedito di lavorare, infetti mandati nelle RSA, dove anche se ci mandi infetti di influenza e abbandoni la gente fai una strage, tutte cose fatte con e incoraggiate da circolari del Ministero della Salute? che relazione c'è tra queste morti e le campagne di vaccinazioni di massa AntiInfluenzali e AntiMeningite fatte in quella zona pochi mesi prima, visto che l'altro giorno è morto un volontario durante la sperimentazione del vaccino AntiCovid, a cui era stato dato come placebo un vaccino proprio AntiMeningite (cosa che dal punto di vista scientifico è un'aberrazione) e visto che ci sono studi che dicono invece che c'è correlazione tra AntiInfluenzali e amplificazione della sintomatologia Covid? fonte OMS :

Link OMS


se la tecnica di biologia molecolare PCR (Polymerase Chain Reaction) non è adeguata alla diagnosi, e lo dice colui che lha creata, il premio Nobel Kary Mullis, e il tampone si basa sulla PCR e quindi i risultati dei tamponi sono del tutto inaffidabili e tralaltro la maggiorparte dei positivi rilevati questi giorni è asintomatica, paucisintomatica o presenta sintomi lievi (95%), sintomi rinconducibili benissimo ai sintomi di una banale influenza, di che incremento di positivi Covid stiamo parlando? perchè creare un nuovo Test per distinguere l'influenza dal Covid? vuol dire che i Test che abbiamo finora utilizzato sono quindi farlocchi? sarà questo il motivo per cui stanno beccando tanti positivi nelle RSA proprio in concomitanza con le campagne di vaccino AntiInfluenzale? fai il vaccino a tappeto in una RSA e poi fai i tamponi e becchi i positivi?




chi ci guadagna dall'Emergenza Sanitaria? se il 95% dei positivi sono asintomatici, paucisintomaci o hanno sintomi lievi, perchè si parla già di Strutture Ospedaliere sotto Stress e Terapie Intensive in saturazione? forse le risposte vanno cercate in questi dati e questa testimonianza? :




Dove sono finiti i numeri dell'Influenza Stagionale, anche nei periodi estivi di Assembramenti e Movida? Fonte OMS :


Perchè a Stoccolma, che ha una densità della popolazione maggiore di quella di Roma, la situazione, il 28 Ottobre 2020, è cosi, se questo virus è cosi pericoloso?: Stoccolma la densità abitativa media è di circa 5.129,47 ab./km², Roma La densità abitativa media è di circa 2.236 ab./km²






"Ai selvaggi, ai bizzarri, ai meravigliosi.

A coloro che cavalcano le onde del mare e perdono di vista la riva.
A chi si libera delle regole, dell'etichetta, delle catene e parte alla ricerca della verità del proprio cuore.
A tutti i pezzi del puzzle scombinati, che non vengono invitati a partecipare al gioco della società, che restano indietro per imparare il proprio modo di volare, che nella sacra solitudine abbelliscono i cieli con le ali piene di libertà e la grazia del loro destino nato dall'anima incendiata.
Per i rari esseri ultraterreni che percorrono la strada meno affollata, che affrontano l'avventura con scopo e passione.
Ai ribelli, agli originali, alla solitudine che alimenta il loro spirito.
A chi non si conforma, nè torna indietro e non si fa da parte.
Per quelli che non sono nati per adattarsi ma per camminare gloriosamente altrove.
Per la tribù dei disturbatori che pensano fuori dagli schemi e sognano sui bordi dell'infinito.
A coloro che danzano anche se non conoscono i passi, che cantano anche se sono stonati e fuori sintonia.
Ai risvegliati il cui scopo è alimentare la propria anima e non morire di fame, il cui mantra è il battito del tamburo del proprio cuore e le infinite possibilità che scintillano all'orizzonte.
A quelli che hanno il coraggio di essere aperti, d'amare e vivere.
Ai maghi, ai mistici, agli incompresi.
Ai saggi che si muovono tra l'ombra e la luce.
A coloro che ululano alla Luna Piena e danzano nudi nei ruscelli.
A coloro che seguono la bussola dei loro cuori e credono nella stella polare del loro spirito.
Per chi ha il coraggio di cadere, di rompersi e frantumarsi.
Ai cacciatori di tempeste , a voi anime antiche che camminate su questa Terra.
Allo spirito selvaggio, queste parole sono per te." Anonimo

non è una mascherina, è un bavaglio da banditi;







“Signori io non vi ho mentito, avete visto coi vostri stessi occhi i mostri viventi del nostro serraglio. Voi ne avete riso o provato ribrezzo, tuttavia se lo avesse voluto la natura beffarda, anche voi potreste essere come loro. Non hanno chiesto loro di venire a questo mondo, eppure sono qui tra noi. Si riconoscono in un codice che nessuno ha mai scritto. Offendetene uno, e si sentiranno offesi tutti quanti”.

(Freaks – Tod Browning, 1932)

La vendetta dei Freak venuti dallo Spazio Esterno sarà atroce; il confine tra normale e anormale è labile: ma il vero mostro, è colui e colei che si professa sano e che si è perfettamente adattato alla società patologica in cui viviamo;



Esempio di Live Coding o Live Composition from scratch o quasi :

il REBOP, oltre ad essere un approccio esistenziale alla vita, è un sistema che ho creato, utilizzando il linguaggio SuperCollider, per la composizione Live e per il Live Coding; utilizzo il sistema REBOP operando a cuore aperto sulla composizione, che non smette mai di suonare e che reagisce ai cambiamenti nel codice, in tempo reale, man mano che lo modifico e/o ne creo di nuovo; scrivi codice, generi musica, cambi il codice, cambia la musica e cambiano i suoni; pian piano nasce una nuova composizione; dietro ogni lavoro videomusicale di REBOP Coding (che ora appunto include anche il Live MashUp con la composizione video Realtime, in tempo reale) ci sono ore e ore di Live Composition o Realtime Composition con il sistema REBOP; è esplorare suoni e melodie per arrivare a una nuova composizione a cui associo generalmente immagini e concetti per esprimere nuove idee; poi attraverso il Live Coding, che nel mio caso si chiama REBOP Coding, espongo le mie creazioni, dal vivo, durante le performance, in tempo reale;







Articolo 21

Tutti hanno diritto di manifestare liberamente il proprio pensiero con la parola, lo scritto e ogni altro mezzo di diffusione. La stampa non può essere soggetta ad autorizzazioni o censure.

Articolo 32

Nessuno può essere obbligato a un determinato trattamento sanitario se non per disposizione di legge. La legge NON PUÒ IN NESSUN CASO violare i limiti imposti dal rispetto della persona umana.






Quando un certo Errore comincia a essere commesso da un bel po' di persone, diviene un Errore Sociale, un Errore di Sistema; indotto da chi ci vuole docili e manipolabili, divisi in noi stessi, alienati e disconnessi dall'Universo;





affermare che non si è interessati al diritto alla privacy perché non si ha nulla da nascondere è come dire che non si è interessati alla libertà di parola perché non si ha nulla da dire.

e cosi, chi rinuncia alla libertà per raggiungere la sicurezza, non merita né la libertà né la sicurezza.


la caratteristica dell'improvvisazione nel Live Coding contraddice molte delle ipotesi fondamentali su cui si basano le leggi sul Copyright; la caratteristica di fissità dell'opera d'arte, nel Live Coding non è presente, essendo ogni opera parziale e diversa in ogni performance; questa contraddizione può essere utilizzata per resistere alle gabbie legali ed economiche che oggi cercano in ogni modo di imprigionare i beni culturali digitali e l'arte digitale in generale; il Live Coding può sviluppare una posizione critica e forte contro gli squilibri e le ingiustizie del regime della proprietà intellettuale e contro ogni nozione obsoleta di proprietà culturale esclusiva; integrando le emergenti pratiche artistiche con le critiche alla proprietà intellettuale, questa forma di arte e resistenza può fare molto per opporsi a queste leggi e per proporre interessanti alternative;




Viene finalmente svelato l’intento oscuro della battaglia contro le Fake News: reprimere il dissenso e censurare l’informazione alternativa, impedendo alle persone non solo di esprimersi, ma persino di pensare. Si sta cercando di introdurre il reato d'opinione e di censurare l'informazione indipendente. La battaglia contro le Fake News intende reprimere il dissenso per introdurre lo psicoreato; chi ha diffuso, però, in passato, Fake News per creare casus belli e fare le guerre e chi diffonde ora, come un untore, false notizie per contagiare la massa con il virus della paura e del panico?



il Live Coding puro, from Scratch, partendo da un editor vuoto o quasi vuoto, si colloca a un estremo dello spettro delle possibilità, mentre la Musica Generativa, si colloca all'altro estremo. Il Live Coding puro è l'idea che possiamo creare musica da zero, scrivendo codice, partendo da un editor vuoto o quasi; la Musica Generativa d'altro canto insegue l'idea che i computer possano fare musica interamente da soli, senza supervisione. Entrambi gli ideali sono impossibili da raggiungere; personalmente penso che il modo migliore di creare musica con il Live Coding durante una Performance Live, possa trovarsi in mezzo ai due estremi dello spettro delle possibilità; quando compongo in studio e uso lo strumento del Live Coding, però, parto sempre da un editor vuoto o quasi; come in questo video;

non è necessario un pubblico per fare Live Coding; penso che la migliore musica creata con il Live Coding provenga probabilmente da persone che fanno Live Coding da soli, che sviluppano un'idea in studio ad uno stato avanzato, per presentarla magari successivamente a un pubblico, per divertirsi, elaborando strategie per fare Live Coding con quell'idea ben realizzata e elaborata.








Sabato 21 dicembre 2019
presso il CSOA Forte Prenestino
Via Federico Delpino - Roma (RM)
Av.A.Na. festeggia i 25 anni, come tradizione il 21 dicembre,
LiveCoding o meglio REBOP Coding by Bz Akira Santjago;

il performer scrive e esegue il codice che viene decodificato dalla macchina e produce un risultato sonoro. La performance musicale, quindi, consiste in un dialogo continuo tra uomo e macchina, in una sorta di rapporto direttore d'orchestra <-> esecutore in cui il primo non ha mai il pieno controllo sul secondo. Il codice sorgente viene continuamente modificato e valutato dal musicista per variare i risultati musicali. Il Live Coder o meglio nel mio caso Rebopper (quindi REBOP Coding per ragioni che leggerete sotto), di conseguenza, per il fatto di essere sul palco di fronte a un pubblico, che può anche leggere ciò che sta scrivendo e/o valutando, è il vero e proprio artefice del prodotto finale e la sua è una composizione musicale improvvisata; nel mio caso il tutto è arricchito da gif animate legate al brano musicale creato in quel momento e da una prosa a tema sociale improvvisata come commento all'idea musicale;

le mie composizioni non sono semplici e minimali e le sequenze che definisco sono sicuramente più melodiche di tante altre cose che ho sentito nel mondo musicale del Live Coding; ma il problema principale è che uso un linguaggio estremamente prolisso, SuperCollider, forse il piu prolisso tra i vari linguaggi in uso nel panorama del Live Coding; in mancanza di tempo questo mi impone di partire da template prefabbricati in studio per poi combinare le varie sequenze durante il Live; ho creato queste sequenze in ore e ore di sessioni di Live Coding e il tempo a disposizione per questa Live era pochissimo, la sessione sarebbe durata 4 ore se fossi partito da zero; nel mondo del Live Coding, c'è chi parte dall'editor vuoto e chi parte da template e algoritmi prefabbricati e poi combina e modifica le sequenze come ho fatto in questa sessione Live (link TOPLAP); con Tidal, altro linguaggio di programmazione, una canzone delle mie la scrivi con 5 linee di codice; era comunque la mia prima esperienza con il Live Coding e sto creando il sistema REBOP proprio per snellire il linguaggio; questo per rispondere al "sapientone" che mi critica nel video qui sotto; ha ragione lui, il mio non è Live Coding, uso il Live Coding come strumento di composizione; il mio è REBOP Coding, visto che aggiungo anche immagini e prosa improvvisata a tema sociale come commento all'idea musicale; e la chiudiamo qui;



non la chiudiamo qui; per essere seri, e fregandosene dei rosicamenti altrui, il mio REBOP Coding è Live Coding come si può serenamente desumere dalle tante testimonianze di Live Coder della community TOPLAP; il problema è che questi discorsi allontanano le persone dal provare il Live Coding e sopratutto dal provare a creare un proprio stile di programmazione;



Alcune testimonianze dal Forum di TOPLAP (Forum Internazionale e Ufficiale della Community di Live Coding) :

"It depends on the audience and purpose of the performance, but for Algorave-style performances I prepare code for nearly everything. I typically prepare small 5-minute compositions that I can improvise with. However, I also do completely improvised stuff in live streams and in front of live audiences if the performance demands it.

The “live” part of my performance consists of:

Improvisation of the pre-written compositions
Transitions between the pre-written compositions"

---

"I prepare almost everything in my sets currently, for a few reasons:

I write songs that kind of have to be performed in vaguely predictable sections to work
Ixi uses the arrangement of the text/whitespace in physical space to determine time, so a single typo can throw you into a different time signature (this is great great great for songwriting, but super risky for live performance).
typing while singing is quite hard. :wink:
The only version of ixi that works on my computer is super unstable so however much I pre-prepare there’s always an element of risk anyway.
Probably 90% of it is pre-typed and just evaluated live"

---

"yes, I definitely think this some holds people back from jumping into the live coding community and making the music with code that best suits their own performance style/song structure. Part of the reason I wanted to start this discussion! And to be fair, I would argue that some of my favorite and most prominent live coders today definitely have structured tracks that they return to in most of their sets, regardless of how much of them they type live!"

---

"I think I respect the way that live programmers feel happy playing live, what I do not like is when you talk about “good practices” when you play from skratch, I think this demerits the practices of other live programmers who have other processes. I feel good by composing and “typed live”, for a long time I stopped thinking that things are better because they seem to be more complex, in any way, making music, under any medium, it is always a challenge, the challenge of ordering sound on time. Would it be great to eliminate these ideas about whether it is live encoding or not? Both processes are live coding from my point of view."


link ShaderToy : https://www.shadertoy.com/view/WddGWN

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

 
    float x = fragCoord.x;
    float y2 = fragCoord.y;
 
    vec2 p = fragCoord.xy / iResolution.yy;
    vec2 q = fragCoord.xy / iResolution.yy;
 
    vec2 translate = vec2(cos(iTime),sin(iTime));
    vec2 translate2 = vec2(sin(iTime),cos(iTime));
 
 
    if (sin(iTime)>0.)
    p += translate*1.35*fract(sin(iTime)*1.0);
    else
    p += translate2*1.35*fract(sin(iTime)*1.0);
 
    vec2 pix = fragCoord.xy*p;
    vec3 col = texture(iChannel0,floor(pix/17.0)*8.0/iResolution.xy).rgb;
    vec3 col2 = texture(iChannel2, floor(pix/8.0)*8.0/iResolution.xy).rgb;
    vec3 col3 = texture(iChannel1, floor(pix/8.0)*8.0/iResolution.xy).rgb;

    fragColor = vec4(0.1+col3.x+col.x*tan(iTime)+col2.x*1.8,0.3+col3.y+col2.y+col.y*cos(iTime),0.3+col3.z+col.z*sin(iTime)+col2.z,1);
 
}




Léon Theremin era un Hacker, un inventore sovietico, famoso per la creazione dell'omonimo Theremin, uno dei primi strumenti musicali elettronici. Nel 1919 stava lavorando, nel laboratorio del noto fisico Ioffe, con particolari dispositivi di sua ideazione atti a misurare la densità dei gas nel vuoto; ben presto si accorse che in certe condizioni si produceva un fischio che variava di frequenza avvicinando o allontanando la mano dai circuiti. Forte della sua esperienza di qualche anno prima in campo militare, con amplificatori e oscillatori che utilizzavano valvole termoioniche ed interessato dai possibili risvolti pratici del fenomeno, continuò a fare esperimenti fino ad inventare un vero e proprio strumento musicale cui diede il nome di eterofono.

r[\pianovel].value(b.value("f3+c6 ,off ,c3+c4 ,as4+ds4+fs3+c1  ,f3+f2 ,a3,f1 ,d2 "),z.value("f3+c6 ,off ,c3+c4 ,as4+ds4+fs3+c1  ,f3+f2 ,a3,f1 ,d2 ")*0.5, 1);

r[\bz_bass].value(b.value("f3 ,f2 ,f2 ,f1 ,f3 ,f3 ,f1 ,f2 "),z.value("f3 ,f2 ,f2 ,f1 ,f3 ,f3 ,f1 ,f2 ")*0.5);
    16.wait;
    r[\bz_slap].value(b.value("f1 ,f1 ,off ,f1 ,f1,f1,f1 ,f1 ,f1 "),z.value("f1 ,f1 ,off ,f1 ,f1,f1,f1 ,f1 ,f1 ")*0.5);

~bzbass[5] = \filter -> {arg sig; (3111.33*sig.distort/(1+ (2231.23*sig.abs))).distort*0.25};

r[\pianovel].value(b.value("f4+f5 ,e4+e5 ,ds4+ds5 ,d4+d5  ,cs4+cs5 ,c4+c5,b4+b5 ,as4+as5 "),z.value("f3+c6 ,e5+e4 ,c3+c4 ,as4+ds4+fs3+c1  ,f3+f2 ,a3,f1 ,d2 ")*0.5, 1);

//Space Theremin sound from:
//Mitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books
//under GNU GPL 3 as per SuperCollider license

(
~spacetheremin=Pfx(
    Pmono(
        \spacetheremin,
        \amp,Prand([0.4,0.45,0.5,0.55,0.5],inf),
        \midinote,Prand([0,2,3,5,6,8,9,11]+60,inf),
        \dur,Prand([1.0,1.5,0.5,0.75,1.25,2.0,0.57],inf),
        \lagTime,Pstutter(7,Pn(Pseries(0.05,0.05,8),inf)),
        \lfoRate,Pstutter(9,Pn(Pseries(6,0.5,5),inf)),
        \cutoff,Pstutter(11,Prand([1000,1500,2000,3000],inf))
    ),
    \spacereverb
)
)





può una frase musicale trasformasi in un'opera di Fiber Art Iperbolico? i gradi di una scala, di una composizione LiveCoding REBOP, essere usati come base per la creazione di una forma di Crochet Iperbolico? Evidentemente si, grazie alla Super Artista Rita Cavallaro! REBOP Fiber Iperbolico!

(
    var a,b,c;
    a=Pseq([Pser([0,1,2,3,4,5,6,7],12),Pser([1,1,1],12)],1);
    //c=Pseq([Pser([7,7,0,0,3,3,7,7].reverse,12),Pser([7,7,7],12)],1);
    c=Pseq([Pser([7,7,0,0,3,3,7,7].reverse,12)],2);
    b=Pseq([Pseq([7,6,5],2),Pseq([7,7,7],2),Pseq([7,6,5],2),Pseq([7,7,7],2)],1);
    ~piano = Pbind(\instrument,\pianovel,\scale,Scale.major,\root,5,\octave,[3,5],\degree,Pseq([Pn(a,3),Pn(c,2),Pn(b,1)],inf),\dur,Pbjorklund2(3,8)/4,\amp,1,\rel, 0.3,\pan, -0.7);
    ~piano.play;
)




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, oltretutto nella maggiorparte dei casi 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, 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;

(
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;
)



#define PERIOD 2.
#define REPETITIONS 2

const float PI = 3.1415926535;


float box(in vec2 _st, in vec2 _size){
    _size = vec2(0.5) - _size*0.5;
    vec2 uv = smoothstep(_size,
                        _size+vec2(0.001),
                        _st);
    uv *= smoothstep(_size,
                    _size+vec2(0.001),
                    vec2(1.0)-_st);
    return uv.x*uv.y;
}

float cross2(in vec2 _st, float _size){
    return  box(_st, vec2(_size,_size/4.)) +
            box(_st, vec2(_size/4.,_size));
}

vec3 shadeBlob(vec2 p, float index, float value, float scale)
{
    float screenRatio = iResolution.x / iResolution.y;
    vec2 pc = vec2(0.1 + (screenRatio - 0.2) * value, index);
 
    float d = length(pc - p) / 0.015*scale/(1.37+abs(sin(iTime)));
 
    return vec3(3. * vec3(0.5, 0.5, 0.7) / (max(d * d, 1.)));
}

float step_interp(float x) {
    return step(0.5, x);
}

float linear_interp(float x) {
    float c = clamp(x, 0., 1.);
 
    return c;
}

float cosine_interp(float x) {
    float c = clamp(x, 0., 1.);
 
    return 0.5 * (1. - cos(PI * c));
}

float smoothstep_interp(float x) {
//    return smoothstep(0., 1., x);

    float c = clamp(x, 0., 1.);
 
    return c * c * (3. - 2. * c);
}

float quintic_interp(float x) {
    float c = clamp(x, 0., 1.);
 
    return c * c * c * ((6. * c - 15.) * c + 10.);
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 p = fragCoord.xy / iResolution.yy;
    vec2 q = fragCoord.xy / iResolution.xy;
 
    int tx = int(p.x*128.0);
    int ty = int(p.y*128.0);
 
    // per lo Spectrum Audio
    float wave = texelFetch( iChannel0, ivec2(ty,1), 0 ).x;
    vec3 spec = vec3(wave/0.5);
 
 
    // per lo Spectrum Audio
    //vec4 spec = vec4(0.1,0.1,0.1,0.1);
 
    vec2 translate = vec2(cos(iTime),sin(iTime));
    vec2 translate2 = vec2(sin(iTime),cos(iTime));
    //p += translate*0.35*sin(iTime);
    q += translate2*1.35*sin(iTime);
 
    float t = abs(2. * fract(iTime / PERIOD) - 1.);
 
 
    // Background pattern
 
 
 
    vec3 col = vec3(0.0);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1, spec.x/0.4 );
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1, spec.x/0.4);
 
    //col += shadeBlob(p, 0.3, smoothstep_interp(t)*spec.x+0.2, 0.1/0.1);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.05, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.05, spec.x/0.4);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.2, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.05, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.1, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.1, 0.1/0.1);
    //col += shadeBlob(p, 0.5, cosine_interp(t)*spec.z+0.1, 0.1/0.1);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.1, spec.x/0.4);
    //col += shadeBlob(p, 0.7, quintic_interp(t)*spec.z+0.1, 0.1/0.1);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.2, spec.y/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.2, spec.y/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.2, spec.y/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.2, spec.y/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.2, spec.y/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.25, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.25, 0.1/0.1);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.25, spec.x/0.4);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.25, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.25, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.3, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.25, 0.1/0.1);
    //col += shadeBlob(p, 0.5, cosine_interp(t)*spec.z+0.25, 0.1/0.1);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.25, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.3, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.4, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.4, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.4, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.4, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.4, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.45, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.45, 0.1/0.1);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.45, spec.x/0.4);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.45, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.45, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.5, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.5, spec.x/0.4);
    //col += shadeBlob(p, 0.5, cosine_interp(t)*spec.z+0.5, 0.1/0.1);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.5, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.5, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.6, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.6, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.6, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.6, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.6, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.65, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.65, 0.1/0.1);
    //col += shadeBlob(p, 0.5, cosine_interp(t)*spec.z+0.65, 0.1/0.1);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.65, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.65, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.7, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.7, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.7, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.7, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.7, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.8, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.8, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.8, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.8, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.8, spec.x/0.4);
 
    //col += shadeBlob(p, 0.3, smoothstep_interp(t)*spec.x+0.8, 0.1/0.1);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.8, 0.1/0.1);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.85, spec.x/0.4);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.8, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.85, spec.x/0.4);
 
    //col += shadeBlob(p, 0.3, smoothstep_interp(t)*spec.x+0.8, 0.1/0.1);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.8, 0.1/0.1);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.9, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.9, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.9, spec.x/0.4);
 
 
 
    col += 1.0 -  smoothstep( 0.0, 0.15, abs(wave - q.x) );
 
    //col = pow(col, vec3(1.3));
    //col2 = pow(col2, vec3(0.45));
 
    fragColor = vec4(col, 1.0);
}

Update cookies preferences