<< Chapter < Page Chapter >> Page >

Idiosincrasie grafiche

Ogniqualvolta un messaggio è inviato ad un oggetto, questi può diventare mittente a sua volta verso altri oggetti. Inaltri termini, si configura un albero di ricezioni di messaggi. Secondo il manuale di Pure Data l'ordine di esecuzione utilizzato è depth-first , cioè ogni ramo è esplorato fino alle foglie prima diprocedere con gli altri rami. L'ordine di esecuzione tra nodi allo stesso livello dell'albero sarebbe invece da considerarsiindeterminato. In realtà, provando ad eseguire l' esempio di [link] e ridisponendo le connessioni tra i nodi dell'albero con ordini diversi ci si accorge che non si può nemmeno contare sull'ordine depth-first, in quanto esso interferisce con l'ordine di immissione delle connessioni. In Max/MSP la situazione è ancora peggiore perché muovendo messaggi e bang in posti diversi della finestra, a parità di configurazione topologica, si ottengono sequenze di attivazione diverse. L'elaborazione di tipo dataflow può dare luogo a loop noncomputabili, quale è quello riportato in [link] . Pure Data, in questo caso, riporta un messaggio di "stack overflow" sulla consolle. Per rendereil loop computabile è sufficiente inserire un elemento di disaccoppiamento quale è un pipe (si veda [link] ). Per quanto sia piccolo il parametro ritardo di questo pipe (al limite anche nullo), essoterrà memoria del dato in ingresso per consumarlo al ciclo successivo di calcolo.

Nella maggior parte degli oggetti, la inlet di sinistra è hot , nel senso che messaggi che ad essa arrivano scatenano messaggi in output.E' spesso desiderabile inviare messaggi a due o più inlet di un oggetto, ma il risultato dell'operazione può dipenderedall'ordine con cui si sono fatte le connessioni. Ciò mina l'efficacia semantica del programma visuale, in quantopotremmo avere due patch apparentemente identiche che però si comportano diversamente perché costruite con un ordinediverso. Ad esempio, si provi a fare la somma di un numero con sè stesso secondo la [link] .

La sequenza di creazione delle connessioni determina la correttezza o meno del risultato. Per imporre chiarezzasemantica al patch è opportuno inserire un oggetto trigger che forza l'ordine di attivazione delle outlet da destra a sinistra, come indicato in [link] .

Elementi di gui

In [link] è illustrata l'utilizzazione di un generatore periodico di bang . Si noti il parametro di metro che stabilisce l'intervallo (di 500 millisecondi) tra duebang. Il quadrato in alto è un elemento di GUI detto toggle switch, in pratica un interruttore.

Un altro elemento di GUI, il vslider , è illustrato in [link] . In questo patch è anche visibile un oggetto number, il quale invia un numero in uscita( outlet ) ogni volta che ne viene cambiato il valore, per dragging con il mouse o per immissione dinumeri dal suo input.

Array

In Pure Data, un array è un contenitore di numeri ed un elemento di visualizzazione al tempo stesso. Infatti,l'oggetto table istanzia l'array e crea un subpatch che ne visualizza la rappresentazionegrafica. Questa rappresentazione è anche uno strumento di input, in quanto i valori dell'array possono essere"disegnati" con il mouse. Per leggere e scrivere i singoli elementi dell'array si usano gli oggetti tabread e tabwrite . L'utilizzazione di tabread per scandire un array è illustrata in [link] .

Selezioni, routing, multiplexing

In [link] sono illustrati blocchi di confronto e selezione . In particolare, il blocco select attiva l'uscita di sinistra se l'ingresso ( inlet ) è uguale al suo parametro, altrimenti attiva l'uscita di destra.

In [link] sono illustrati tre elementi di routing . Il blocco spigot trasmette messaggi dall'inlet di sinistra all'outlet in dipendenza dallo statodell'ingresso (di controllo) di destra. In sostanza si tratta di un gate con controllo di apertura e chiusura. Invece, moses consente di smistare alle uscite sinistra e destra i valori diingresso che sono rispettivamente minori o maggiori (o uguali) del valore di controllo passato dalla inlet didestra. Infine, route smista dei messaggi ricevuti in ingresso sulla base del loro primo elemento,mettendolo a confronto con gli argomenti. Un multiplexer si può ottenere combinando la route con la pack .

Realizzare un multiplexer e un demultiplexer utilizzando gli oggetti pack , route e spigot .

Ritardi, code e gestione del tempo

In [link] è illustrata l'utilizzazione di ritardi e code . La delay ritarda un bang in ingresso di un numero di millisecondi pari al suo argomento. Se si vuole ritardareun flusso di dati bisogna usare la pipe , la quale è realizzata come coda a buffer circolare .

In [link] si vedono alcuni oggetti che consentono di scandire, misurare, e avanzare il tempo. Rispettivamente, ciò si ottiene con metro , timer , e line . Quest'ultimo oggetto genera una rampa lineare, da un valore iniziale a uno finale, in un certotempo.

Nel patch di [link] , si provi a rimuovere e ripristinare i collegamenti che arrivanoalla inlet di destra dell'oggetto float , e si verifichi che il reset dell'indice una voltaraggiunto il limite di 128 può non avere luogo. Perché? Come si può introdurre in maniera deterministica ilreset dell'indice?

E' sufficiente introdurre un elemento di disaccoppiamento (ad esempio, una pipe 0 ) che imponga un ordine tra l'immissione del numeroincrementato e l'immissione di 0 nella inlet di destra.

Message passing

Il funzionamento dataflow di Pure Data avviene mediante pipe che corrispondono alle connessionitra oggetti. E' anche possibile operare in regime di message passing , cioè ricevere ( receive ) e spedire ( send ) dati tra diverse parti di un patch o tra patch diversi. Ciò è illustrato in [link] . Invece, l'oggetto value realizza una sorta di variabile globale.

Modularità

Nella programmazione visuale la modularità si ottiene con i meccanismi di subpatching che, in Pure Data, sono di due tipi:

  • Si utilizza l'oggetto pd per dichiarare un subpatch. In quest'ultimo, si specificano le inlet e outlet . Si veda [link] .
  • Si costruisce un patch come file separato, che a questo punto diventa uno deglioggetti a disposizione di Pure Data. Si veda [link] .

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Programmazione di artefatti interattivi. OpenStax CNX. Dec 09, 2010 Download for free at http://cnx.org/content/col10417/1.9
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Programmazione di artefatti interattivi' conversation and receive update notifications?

Ask