<< Chapter < Page Chapter >> Page >

Controller come client

In questo esempio la posizione del mouse sulla finestra determina valori di ampiezza e frequenza che controllanoi parametri di un oscillatore server. Più correttamente, si assume che ci sia un oscillatore con due server giàattivi: uno in ascolto sulla porta 5214 (frequenza) e uno in ascolto sulla porta 5215 (ampiezza). Il numero IP 127.0.0.1 indica localhost, o la medesima macchina su cui sta girando il codice Processing. import processing.net.*; int portf = 5214;int porta = 5215; Client frequency, amplitude;int val = 0; void setup() {size(200, 200); frequency = new Client(this, "127.0.0.1", portf);amplitude = new Client(this, "127.0.0.1", porta); }void draw() { background(val);frequency.write(str(mouseX)); frequency.write(';');amplitude.write(str(height - mouseY)); amplitude.write(';');}

Comunicazione client-server in pure data

Pure Data mette a disposizione gli oggetti netsend e netreceive per realizzare la comunicazione di tipo client-server.L'oggetto netreceive apre un socket di ricezione TCP (stream) o UDP (datagram) su un port specificato comeargomento. Quando si usa TCP, l'outlet di destra restituisce il numero di client che hanno aperto su questo socket laconnessione. La comunicazione via UDP si sceglie aggiungendo un secondo argomento 1 a netsend e netreceive .

Dispositivi connessi alla rete

E' frequente oggigiorno l'utilizzazione di protocolli di rete per l'inviodi dati raccolti con sensori. Esempi di dispositivi che fanno questo sono le macchine Kroonde e Toaster di La Kitchen,azienda francese che ha purtroppo chiuso le proprie attività di recente. Queste macchine si appoggiano a UDP per inviare idati raccolti dai sensori, e sono a disposizione dei patch per Pure Data, basati su netreceive , sono a disposizione.

Oscillatore come server

Un oscillatore che risponde a richieste quali quelle riportate in [link] è rappresentato in [link] . Si noti come in [link] il valore numerico rappresentante la posizione del mouse viene convertito in stringa nel momentoin cui esso viene inviato. Inoltre, viene inserito il separatore ';' per consentire l'estrazione dei numeri da parte di Pure Data.

Si modifichino i client e server di [link] e [link] in maniera da realizzare una comunicazione bidirezionale. Per esempio,fare in modo che le consolle di Processing e Pure Data scrivano entrambe i valori scambiati di frequenza.

import processing.net.*; int portf = 5214;int porta = 5215; int ports = 5204;Client frequency, amplitude; Server myServer;int val = 0; void setup() {size(200, 200); frequency = new Client(this, "127.0.0.1", portf);amplitude = new Client(this, "127.0.0.1", porta); myServer = new Server(this, ports);} void draw() {background(val); frequency.write(str(mouseX));frequency.write(';'); amplitude.write(str(height - mouseY));amplitude.write(';'); Client thisClient = myServer.available();if (thisClient !=null) { String whatClientSaid = thisClient.readString();if (whatClientSaid != null) { print(whatClientSaid);} }}

Midi

Il protocollo MIDI (Musical Instrument Digital Interface; IPA) è un protocollo dicomunicazione tra dispositivi elettronici, introdotto dalle industrie degli strumenti musicali all'inizio degli anni '80per garantire l'interoperabilità dei propri apparati. Il fatto che esso non si occupa di trasmettere segnali mamessaggi relativi ad eventi ha fatto sì che la sua diffusione sia stata ampia anche in ambito non strettamente musicale.Lo standard MIDI comprende sia il protocollo di comunicazione sia la definizione dell'interfaccia fisica. Questa trasmettealla velocità di 31,250 bit al secondo dei pacchetti costituiti da un bit di start (0), otto bit (un byte) di dati,un bit di stop (1). I messaggi scambiati sono relativi a eventi discreti ( note-on , note-off , etc.) o processi che inviano flussi di valori ( pitch bend , aftertouch , control change , etc.). Tutti questi messaggi appartengono a uno (o tutti) di 16 canali. Un byte di status , contenente canale e codice relativo al tipo di messaggio, precede uno o due byte didati. Per le interazioni continue che ci si trova a dover trattare nell'interaction design, sono particolarmente utili i control change . Il MIDI ha avuto un notevole successo come standardindustriale e, per molte applicazioni, funziona egregiamente ed ha un puntodi forza nella sua semplicità. Tuttavia, ha gli svantaggi di una comunicazione seriale e a bassa velocità,nonché le limitazioni legate alla sua bassa espressività e all'origine nell'ambito degli strumenti musicali a tastiera.

In Pure Data, è disponibile una gamma di oggetti per la gestione dei messaggi MIDI. La pagina di documentazione diriferimento è riportata in [link] . Si vede, ad esempio, che l'oggetto ctlin ha tre outlet che forniscono, rispettivamente, il valore, il numero, e il canaledi un control change.

Per Processing e per Java esistono librerie che includono funzioni di sequencer . Il MIDI può essere usato anche per far dialogare tra loroapplicazioni che girano in uno stesso computer o su computer diversi all'interno di una rete. Il sistema operativo delMacintosh, ad esempio, ha una applicazione chiamata Audio MIDI Setup che consente di impostare uno Inter-Application Communication - IAC Driver o un MIDI Network driver. Se abilitati, questi device driver saranno poi selezionabili come input e output devicedalle preferences di Pure Data.

Osc

OpenSound Control - OSC è un protocollo di comunicazione che consente a diversi dispositivi elettronici e applicazioni di scambiarsi dati intempo reale su un supporto di rete. E' stato sviluppato per superare le limitazioni di MIDI e per sfruttare le possibilitàdi TCP e UDP, consentendo al tempo stesso una semantica raffinata dei messaggi.Le caratteristiche principali di OSC sono:

  • indirizzamento simbolico "tipo-URL" (e.g., /voices/synth1/osc1/modfreq )
  • indipendenza dal tipo di trasporto (tipicamente UDP socket)
  • argomenti numerici e simbolici ai messaggi
  • espressioni regolari per la specificazione di più destinatari (e.g., /voices/synth1/osc[1-4]/modfreq )
  • temporizzazione fine
  • accorpamento di messaggi in bundle che richiedono azione simultanea.
  • possibilità di interrogare un OSC server sulle sue capacità
L'unità fondamentale di OSC è il messaggio, il quale consiste di un pattern di indirizzo, una stringa di tipo( type tag ), e un certo numero di argomenti. Ad esempio, un messaggio può essere indirizzato a /voice/3/freq , specificare come type tag un singolo numero floating point, e il suo argomento può essere261.62558. L'indirizzamento aperto di OSC consente a ogni server di definire il proprio spazio di indirizzamento inrelazione alla propria organizzazione di servizi. Un'ottima introduzione a OSC si può scaricare, insieme a dettagliata documentazione e a link alle realizzazioni software presso il sito ufficiale di OSC .

Per Processing esiste la libreria oscP5 che consente di produrre ed interpretare messaggi e bundle di OSC.

Si installi oscP5 per Processing e si provino gli esempi della documentazione . In particolare, si cerchi di comprendere la composizione edecomposizione dei messaggi. Nell'esempio oscP5plug è illustrato un meccanismo di event-based programming , secondo il quale è possibile instradare messaggi con un determinato pattern diindirizzo a un metodo specifico di una classe ( event handler ).

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