I Moduli
La scrittura dei moduli riflette la semplicità del linguaggio: benché lo script possa essere anche di notevole complessità (a scelta e tempo dell'autore), l'output prevede sempre la scrittura di una serie di codici (vedi Manuale - Codici).
Ad es., un modulo che genera eventi di tipo "n" dovrà restituire sequenze costituite da: $sequenza[]="n:canale,nota,valore,dinamica,nome"; La variabile "nome" contiene il nome della funzione generatrice, utile in sede di analisi e revisione dei contenuti (il nome della funzione può essere agevolmente ricavato dalla meta-funzione _FUNCTION_). Gli esempi del manuale sono più che sufficienti a documentare l'uso dei moduli. La variabile $sequenza è un array autoincrementale passato al programma di compilazione. Esaminiamo, ad es., un semplice modulo di tipo rnd: rnd-a,b. Il modulo utilizza una funzione di poche linee (function rnd ($pmt) - Nota: l'argomento dovrà avere sempre nome "pmt"): function rnd ($pmt) { $par=explode(",",$pmt); $voci=$par[0]; $eventi=$par[1]; $fct= __FUNCTION__; $sequenza=""; $dati=array(C,D,E,F,G,A,B); $ottave=array(0,1,2,3,4,5,6,7); $alter=array(d,b,n); $din=array(ppp,pp,p,mp,mf,f,ff,fff); $den=array(2,4,8,16,32,64); for ($i=1;$i<=$eventi;$i++) { $n1=rand (0,6); // dati $n2=rand (0,7); // ottave $n3=rand (0,2); // alter $n4=rand (0,7); // din $n5=rand (1,4); // num $n6=rand (0,5); // den $n7=rand (1,$voci); // chan $sequenza[]="n:$n7,".$dati[$n1].$alter[$n3].$ottave[$n2].",".$n5."/".$den[$n6].",".$din[$n4].",".$fct; } return $sequenza; } Si consideri che gli script non sono stati ancora ottimizzati, per cui molte routine potrebbero essere abbreviate e migliorate sotto tutti i punti di vista. Alla funzione viene passato l'argomento $pmt, nel nostro caso definito dalle lettere a,b. Il modulo determina la generazione di un evento sonoro multiplo casuale controllato. Il codice è costituito dal marker mod: seguito dal nome del modulo (rnd) e dal numero delle voci complessive (a) separate da un trattino (rnd-a). Separato da una virgola è indicato il numero complessivo degli eventi singoli (b). Può essere ripetuto ed inserito in qualsiasi sequenza di flusso. Il range comprende: note (C,D,E,F,G,A,B); ottave (da 0 a 7); alterazioni (d,b,n); dinamiche (ppp,pp,p,mp,mf,f,ff,fff); numeratore (da 1 a 4); denominatore (2,4,8,16,32,64). Nel file di flusso appare l'istruzione: mod:rnd-a,b La funzione si limita ad espandere la richiesta trasformando la riga di comando in una serie di note (eventi tipo "n"). I parametri elaborati casualmente, su range controllato, sono quelli relativi a: note, ottave, alterazioni, dinamiche, numeratore, denominatore e canale. Va da sé che potrebbero essere scritti migliaia di moduli tipo rnd con modalità diverse di elaborazione dei dati: i due punti fermi sono esclusivamente la variabile passata (identificativa della riga della linea di flusso, denominata sempre "pmt") e la sequenza generata ($sequenza[], tipo array monodimensionale autoincrementale). I moduli possono essere generati dagli utenti: se conformi al protocollo vengono inseriti, dopo essere stati esaminati e testati, nel linguaggio (ogni modulo deve essere accompagnato dal file allegato di manuale consultando le regole di compilazione nell'apposita sezione). I moduli sono identificati dal marker "mod": il nome deve pertanto iniziare con tale marker. I file sono salvati con il prefisso "m_" ed estensione .php ( ad esempio: m_chord.php). Gli Oggetti Gli oggetti sono costituiti da sequenze di moduli. Il marker identificativo è "ogg": ad esso segue il modulo completo dei suoi parametri. I file sono salvati con prefisso "o_" ed estensione .php (ad es.: o_gruppo.php). La variabile passata avrà sempre nome "pmt"; la sequenza sarà del tipo: $sequenza[]="mod:cpunto_d-x,y,z"; Gli oggetti possono generare eventi di notevole complessità strutturale: ciò comporta un intervento importante sia in fase di composizione (abbinamento delle geometrie e dei timbri) che, con proporzionale richiesta di impegno, in fase di esecuzione. Trattandosi di problematiche di tipo estetico, non mi soffermo oltre sugli Oggetti: in questa sede vengono descritte esclusivamente le procedure "tecniche" e operative relative al linguaggio. Per un'ampia descrizione teorica degli oggetti si rimanda al testo "Teoria dei Sonemi" (Parte III - Cap. XIV) disponibile in → iTunes U.
|