<< Chapter < Page | Chapter >> Page > |
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(';');}
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
.
netreceive
,
sono a disposizione.
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);}
}}
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.
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:
/voices/synth1/osc1/modfreq
)/voices/synth1/osc[1-4]/modfreq
)/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 ).
Notification Switch
Would you like to follow the 'Programmazione di artefatti interattivi' conversation and receive update notifications?