Sonificazione con PureData per Android: dai sensori ai segnali al suono

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Sonificazione con PureData per Android: dai sensori ai segnali al suono"

Transcript

1 UNIVERSITÀ DI PISA Facoltà di Ingegneria Corso di Laurea Triennale in Ingegneria Informatica Tesi di Laurea Sonificazione con PureData per Android: dai sensori ai segnali al suono Relatori: Prof. Marco Avvenuti Ing. Mario G.C.A. Cimino Ing. Daniel Cesarini Anno Accademico 2011/2012 Candidato: Fabio Carrara

2 ii

3 Ringraziamenti Ai miei genitori, a mio zio Paolo e ai miei familiari più vicini, che mi hanno trasmesso le loro passioni e mi hanno permesso di arrivare fin qui. Uno speciale ringraziamento ai miei relatori, in particolare a Ing. Daniel Cesarini, che ha reso l ambiente di lavoro e di studio durante questa tesi piacevole e costruttivo. iii

4 iv

5 Sommario Grazie all avvento del pervasive computing, che vede un sempre maggior numero di dispositivi di calcolo inseriti nella vita quotidiana, sono possibili applicazioni che interagiscono con l ambiente circostante e con l uomo, attraverso l elaborazione e lo scambio di molte informazioni. Ne sono un esempio dispositivi come smartphones e tablets, che mettono a disposizione potenza di calcolo e sensori mobili. La loro diffusione ha permesso agli sviluppatori di rendere fruibili queste applicazioni, dette context-aware. Il potente sistema uditivo umano permette la ricezione di informazioni veicolate attraverso il suono, anche quando questo non è formato da fonemi. È possibile sfruttare questa proprietà per trasmettere informazioni tramite la sonificazione, cioè la generazione di suono parametrica. Questa tesi propone uno strumento di sonificazione e di analisi di dati utilizzabile da applicazioni mobili sviluppate per Android. Il software chiave che offre questi servizi è Pure Data, ambiente di programmazione per l elaborazione di segnali digitali, con enfasi sui segnali sonori. v

6 vi

7 Indice 1 Introduzione Struttura della tesi Potenzialità della sonificazione Auditory Display Sonificazione: una definizione Funzionalità ed esempi pratici Analisi esplorativa dei dati: sonificazione dei parametri metereologici Audificazione: analisi di onde sismiche Divertimento: gestione di uno spazio uditivo virtale per videogiochi Generazione di feedback: sincronizzazione di tracce accelerometriche Aumento della percezione umana: il caso Neil Harbisson 9 3 Il software Pure Data Funzionamento di Pure Data Finestra principale e patches Elementi del linguaggio Passaggio e ordine dei messaggi Meccanismi di astrazione Array numerici Formato del file patch Estensioni al linguaggio Internals, externals e librerie Meccanismo di inclusione vii

8 viii INDICE Struttura del codice C di un external Pure Data su Android: libpd Architettura degli wrapper Java di libpd Inclusione di libpd su Android Package io Package service Package utils Problematiche e limitazioni Assenza di real-time Latenza tra ingresso e uscita Prototipi ed esempi di applicazione realizzati Sonificazione parametrica: PdPatchRunner Estensione del servizio orientata al flusso di dati: PdSonifier Sonificazione applicata al monitoraggio di attività umane: PdFun Scooter Engine Simulator Orientation Device Guess Game Maracas Shake Magnetic Field Sonification Theremin-Like Instrument Conclusioni Sviluppi futuri A Codice Pure Data dei programmi di sintesi sonora 57 A.1 Patch presenti in PdPatchRunner A.1.1 Modulazione in frequenza A.1.2 Rimbalzi sonori A.2 Patch presenti in PdFun A.2.1 Simulatore di un motore di piccola cilindrata A.2.2 Device orientation guess A.2.3 Maracas shake A.2.4 Magnetic field sonification A.2.5 Theremin-Like instrument A.3 Programmi di signal processing

9 INDICE 1 A.3.1 Stimatore dell indice di correlazione di Pearson A.3.2 Analisi e sonificazione off-line della correlazione di tracce accelerometriche A.3.3 Rilevamento del colpo on-line e sonificazione A.4 Lista degli oggetti utilizzati nelle patches B Codice degli externals Pure Data sviluppati 75 B.1 [variance] B.2 [pearson], [pearson~] C Codice di PdFun 89 C.1 Attività principale: GameListActivity.java C.2 ScooterEngineActivity.java C.3 OrientationGuessActivity.java

10 2 INDICE

11 Capitolo 1 Introduzione Il suono e la percezione uditiva sono parte integrante della vita umana, sono onnipresenti nel nostro ambiente, ci invadono e ci condizionano ogni giorno. Il nostro sistema uditivo è in grado di estrarre informazioni dal suono, permettendoci di comunicare attraverso la voce, di percepire situazioni di pericolo, di apprezzare l estetica di un brano musicale. Lo scopo di questo studio è stato di fornire ad applicazioni mobili sviluppate per Android la possibilità di sfruttare il suono come veicolo di informazioni. Grazie allo sviluppo di reti di sensori wireless e dispositivi dotati di sensori, è possibile sviluppare applicazioni che elaborano molti dati provenienti dall ambiente in cui queste sono utilizzate. Queste applicazioni si dicono content-aware, cioè consapevoli del contesto in cui vengono utilizzate. La sonificazione di dati, cioè la generazione di suono dipendentemente dal valore di questi, è in grado di riproporre all utente in maniera intuitiva il contenuto informativo estratto tramite i sensori. Gli scopi della sonificazione possono essere molteplici, dalla semplice esplorazione dei dati alla audificazione al controllo di un feedback. La diffusione di dispositivi come smartphones e tablets, che dispongono di potenza di calcolo mobile, hanno reso possibile l ebalorazione e la sonificazione di dati provenienti da tali sensori anche in contesti dove un supporto fisso non è utilizzabile. In questo contesto, dopo una panoramica sulla sonificazione e il suo utilizzo, questa tesi presenta uno studio sul software necessario per generare suono, disponibile per una delle piattaforme mobili più diffuse, cioè Android. 3

12 4 CAPITOLO 1. INTRODUZIONE Il software chiave in questa trattazione della sonificazione per dispositivi mobili è Pure Data, un ambiente di programmazione visuale per l elaborazione di segnali digitali, con l accento sulla elaborazione di segnali audio. Questo software è facilmente integrabile su piattaforme mobili grazie anche ad un progetto ausiliario, libpd, che mira a far diventare Pure Data una libreria multipiattaforma. Sono riportati come esempi delle piccole applicazioni per piattaforma Android sviluppate durante lo studio che mostrano il funzionamento della sonificazione in dettaglio e le possibilità di applicazione che questa offre nella context-aware computing. 1.1 Struttura della tesi Dopo questo capitolo di introduzione, nel capitolo 2 è riportata una panoramica sulle potenzialità offerte dalla sonificazione, affiancata da esempi reali di utilizzo. Nel capitolo 3 è descritto brevemente il software che permette di manipolare e generare suono in modo parametrico: Pure Data. In particolare è esposto il suo linguaggio, le sue potenzialità, i suoi limiti e la sua possibilità di estensione. Nel capitolo 4 è mostrata la struttura e l utilizzo degli wrapper Java della libreria libpd, che permettono il funzionamento dell ambiente Pure Data su piattaforma Android. Nel capitolo 5 sono riportati gli esempi di applicazione realizzati, con rispettive strutture e algoritmi di sonificazione. Nel capitolo 6 si espongono le conclusioni tratte alla fine di questo studio, comprendenti rapporti di testing, problematiche e limitazioni nel funzionamento. Nell appendice A sono riportati i programmi Pure Data che implementano la sonificazione nelle applicazioni sviluppate. Nell appendice B è riportato il codice di alcune estensioni Pure Data, come esempio arricchimento di Pure Data con costrutti scritti dall utente. Nell appendice C è riportato il codice Java delle applicazioni realizzate.

13 Capitolo 2 Potenzialità della sonificazione In questo capitolo verrà trattata la tecnica della sonificazione e verranno esposte le sue potenzialità in vari ambiti. Si riporteranno esempi di impiego in diverse ricerche ed applicazioni. 2.1 Auditory Display In molti casi, non ci accorgiamo quante informazioni riusciamo a ricevere percependo del suono. Il complesso sistema uditivo umano ci fornisce uno strumento di analisi del suono molto potente. Oltre alla parola, possiamo estrarre molte informazioni dal suono, come le emozioni espresse da un eventuale interlocutore. Siamo in grado di percepire sfumature e piccoli cambiamenti, che permettono per esempio ad un meccanico di avvertire un problema al motore che altrimenti non sarebbe stato percepito. Possiamo estrarre un particolare flusso di informazioni da segnali audio molto complessi, come focalizzarci sul suono di una particolare voce in un posto affollato o su un particolare strumento musicale tra tutti i componenti di un orchestra [8]. In una interazione uomo-macchina, guidata principalmente dalla vista, possiamo affiancare anche un canale sonoro, migliorando l esperienza dell utente, specialmente in situazioni dove un canale visivo può essere sconveniente. L uso del suono, solitamente non verbale, per trasmettere informazioni all utente è detto Auditory Display. Più precisamente si pone come obiettivo 5

14 6 CAPITOLO 2. POTENZIALITÀ DELLA SONIFICAZIONE di far percepire meglio tramite il suono i cambiamenti che avvengono in una struttura dati in esame. L impiego dell Auditory Display per semplici funzioni è già diffuso: si pensi alle funzioni di allarme, di avvertimenti o notifiche diffuse su cellulari e PC. Comunque alcune forme Auditory Display possono arrivare ad aumentare le percezioni dell uomo, anche se spesso, per funzioni che permettono questo tipo di informazione molto ricca, sorge la necessità di un potente sistema real-time di elaborazione e generazione di segnali audio dipendente dai dati, nonchè un tempo di adattamento, non sempre breve, del sistema uditivo umano all Auditory Display. 2.2 Sonificazione: una definizione Un sottotipo di Auditory Display è costituita dalla sonificazione. Essa si prefigge di rappresentare delle informazioni mappandole in suono. Una delle ultime definizioni del termine sonificazione, data da Hermann, è la seguente: generazione del suono dipendente dai dati, se la trasformazione è sistematica, oggettiva e riproducibile. (Hermann 2011 [8]) Queste tre proprietà sono la chiave di una generazione sonora affinchè possa veicolare informazioni in maniera esatta. Nonostante gli studi già in anni passati di questa tecnica, la tecnologia recente ci permette di poter adoperarla in sistemi dove i tempi di reazione devono essere molto brevi. Inoltre la miniaturizzazione e la mobilità della potenza di calcolo, che ormai è onnipresente e diffusa nell ambiente in cui viviamo, ci permettono di utilizzare questa tecnica in molti ambiti, prima impensabili. 2.3 Funzionalità ed esempi pratici Andiamo a mostrare brevemente una serie di applicazioni reali della sonificazione di dati, sia in contesti di analisi off-line che real-time, che hanno

15 2.3. FUNZIONALITÀ ED ESEMPI PRATICI 7 ispirato particolarmente lo studio della sua implementazione. Ogni esempio riporta una funzionalità generale che è offerta dalla tecnica della sonificazione Analisi esplorativa dei dati: sonificazione dei parametri metereologici Una delle funzionalità della sonificazione di dati è l analisi qualitativa di un insieme di dati da esplorare. Spesso questo tipo di sonificazione mappa dati in proprietà sonore, come frequenza, intensità, timbro. Data la possibilità del nostro orecchio di percepire piccoli cambiamenti nelle caratteristiche del suono, questa tecnica ci permette di ascoltare proprietà dei dati. I suoni generati da questo mappaggio sono detti grafici audio. È spesso utilizzata per l analisi statistica di grandi insieme di dati in poco tempo, al fine di ricavare un idea qualitativa sull andamento di un insieme di dati da esplorare, per poi scegliere che tipo di analisi successiva effettuare e su quale sottoinsieme di dati. Per illustrare questa tecnica, è presentato un esempio di analisi esplorativa da uno studio non pubblicato sulla percezione di grafici metereologici, tratto da [8]. In questo studio, dati provenienti da osservazioni metereologiche di Lincoln, nel Nebraska, sono stati usati per creare dei grafici audio; uno per ogni mese di osservazione. Il suono generato consiste nella successione di gruppi di quattro note MIDI di violini: ogni gruppo presenta la temperatura massima e minima di un giorno e l altezza della nota è proporzionale al valore della temperatura. Nei giorni in cui si sono osservate precipitazioni, sono aggiunte, sulla quarta nota, da una a tre note di pianoforte, che indicano la quantità di precipitazione. L ascolto di queste tracce permette di estrapolare qualitativamente le caratteristiche del tempo nel mese di analisi e di percepire eventuali anomalie Audificazione: analisi di onde sismiche La sonificazione permette di rendere ascoltabili delle informazioni che solitamente vengono ricevute attraverso altri mezzi. La tecnica che consiste nella

16 8 CAPITOLO 2. POTENZIALITÀ DELLA SONIFICAZIONE trasformazione di informazione al fine di renderla ascoltabile dall orecchio umano è detta audificazione. Un esempio di audificazione in campo sismologico, tratto da [12], consiste nella compressione tempo-frequenziale di onde sismiche registrate dai sismografi. Questa trasformazione permette di traslare il contenuto frequenziale di onde sismiche, spesso con frequenze troppo basse per essere udite, nelle frequenze ascoltabili ( Hz). Attraverso l audificazione i sismologi sono in grado in maniera abbastanza precisa di trarre informazioni su lunghi periodi di registrazioni sismiche in poco tempo, riconoscendo particolari proprietà sonore del suono generato. Per esempio, sono in grado di riconoscere la distanza dell epicentro (dalla riverberazione del suono), la regione di rilevamento (dal timbro), la presenza di rumore di fondo e il tipo di movimento tettonico Divertimento: gestione di uno spazio uditivo virtale per videogiochi Spesso il suono è parte integrante dell intrattenimento, come il gioco, lo sport e l arte, insieme, ma non obbilgatoriamente, ad altri canali di informazione, come quello visivo. Nel campo sportivo, la sonificazione è recentemente utilizzata come percezione di comportamenti non sincroni in sport di squadra. Ha mostrato benefici come feedback real-time in sport competitivi come il canottaggio, dove la mancata sincronizzazione dei movimenti è percepita dagli atleti attraverso un suono. Nel campo artistico la sonificazione non poteva non essere considerata uno strumento chiave della computer music. Nuove forme di musica sono nate con l utilizzo della sonificazione, come la composizione algoritmica, dove l importanza non è sulla informazione veicolata, ma sull estetica del suono generato. Nel campo dell intrattenimento, quasi la totalità dei giochi elettronici sono accompagnati dal suono. Di alcuni giochi classici, come la Torre di Hanoi, sono state presentate versioni puramente sonore, prive di interfacce visive. Nei recenti videogiochi l esperienza dell utente è arricchita con suoni con proprietà dipendenti dall ambientazione del gioco; tramite il controllo di

17 2.3. FUNZIONALITÀ ED ESEMPI PRATICI 9 alcuni parametri (volume, riverberazione, panning 1 ) dei rumori di fondo, si dà all utente l idea di trovarsi in uno spazio virtuale con particolari proprietà Generazione di feedback: sincronizzazione di tracce accelerometriche Spesso l ascolto del suono è preferibile in ambienti in cui il canale visivo è occupato da altri compiti o risulta scomodo. Inoltre in alcuni casi un segnale sonoro può essere più intuitivo e più facilemente interpretabile. Una funzione che la sonificazione supporta è la generazione di feedback sonori in applicazioni di controllo umano. Un operatore umano può essere facilitato dal suono per redirigere le proprie azioni al giusto fine nella catena di controllo di un processo. Presentiamo un esempio, tratto da [13], nel quale gli studiosi si sono prefissi di mantenere sincronizzati dei movimenti prodotti da più persone, tramite l uso di un feedback sonoro musicale. Attraverso degli smartphone provvisti di accelerometri, le tracce accelerometriche provenienti da tutti i dispositivi vengono trasmesse ad un elaboratore centrale. Questo calcola la somiglianza tra le tracce e riproduce una traccia musicale dipendente da questo parametro. Se il valore di somiglianza è alto, i movimenti sono fortemente sincronizzati e il suono riprodotto è pulito e chiaro. Se invece i movimenti registrati sono poco o per niente sincronizzati, l indice di somiglianza calcolato è basso e la musica riprodotta risulta distorta da una trasformazione tempo-variante. L utente è quindi spronato a sincronizzarsi attivamente con gli altri utenti, al fine di minimizzare la distorsione della traccia e raggiungere un suono pulito Aumento della percezione umana: il caso Neil Harbisson La sonificazione è in grado di supplire alla mancata possibilità di percezione o attuazione in pazienti con disagi come la cecità, l afonia o l assenza di tatto. Particolari segnali acustici possono aiutare il paziente cieco ad orientarsi in uno spazio, o aiutare i pazienti con difficoltà di comunicazione. 1 il mixaggio di tracce audio nei diversi canali disponibili per la riproduzione.

18 10 CAPITOLO 2. POTENZIALITÀ DELLA SONIFICAZIONE L evoluzione di queste applicazioni ha permesso non solo di migliorare lo stile di vita del malato, ma anche di aumentare le percezioni e i sensi oltre il limite umano. Riportiamo di seguito il caso di Neil Harbisson ([7]), artista spagnolo affetto sin dalla nascita da acromatopsia, cioè la completa incapacità di percepire i colori. In collaborazione con Adam Montandon e Peter Kese, Harbisson ha sviluppato un dispositivo dotato di spettrografo che gli permette di ascoltare lo spettro della luce, riuscendo così a distunguere i diversi colori. Il dispositivo è installato sulla nuca e riproduce un timbro complesso con componenti frequenziali proporzionali a quelle della luce analizzata; il suono viene poi trasmesso per trasmissione ossea all apparato uditivo, creando una sinestesia tra vista e udito. Questo tipo di percezione sinestetica ha inciso moltissimo sulla sua vita e sulla sua arte. Oltre ad essersi riappropriato del concetto di colore come è percepito dall umanità (affermando di aver cominciato a sognare a colori ), Harbisson lo ha esteso, dato che tale dispositivo gli permette di percepire anche spettri luminosi non percepibili dall occhio umano, come gli infrarossi e gli ultravioletti. Posso percepire se ci sono rilevatori di movimento in una stanza o se mi stanno puntando con un telecomando, oppure posso percepire se una giornata di sole è adatta per abbronzarsi oppure ci sono troppi raggi ultravioletti, dannosi per la pelle. (Neil Harbisson 2012 [7]) L estensione delle percezioni umane può portare ad un aumento della nostra conoscenza, che è limitata dai nostri sensi e coadiuvata da strumenti esterni al nostro corpo che ci permettono di percepire oltre i limiti umani.

19 Capitolo 3 Il software Pure Data In questo capitolo viene mostrato brevemente il funzionamento del software di digital sound processing Pure Data, il suo linguaggio e le sue possibilità di estensione. Pure Data (o Pd) [3] è un ambiente di programmazione real-time per l elaborazione di segnali digitali, specialmente audio, video e grafici. Inizialmente sviluppato da Miller S. Puckette negli anni novanta come miglioramento del software di DSP 1 Max/MSP [2] [10], Pure Data e le sue estensioni sono attualmente mantenute da una comunità di sviluppatori che negli anni hanno contribuito alla crescita di questo software open source. 3.1 Funzionamento di Pure Data Pure Data è un linguaggio di programmazione orientato al flusso di dati: in un programma Pure Data (detto patch) le funzioni sono oggetti che svolgono certe operazioni, mentre la logica del programma è definita tramite il tracciamento dei collegamenti tra i vari oggetti; durante la programmazione viene costruito graficamente un grafo orientato i cui nodi sono costituiti da oggetti (dove i dati vengono elaborati) e i cui archi rappresentazio i collegamenti attraverso i quali i dati fluiscono da un oggetto all altro Finestra principale e patches Durante l esecuzione di Pd, è mostrata una finestra principale dal titolo Pd e zero o più finestre secondarie che mostrano i programmi Pd (o patches) 1 Digital Sound Processing 11

20 12 CAPITOLO 3. IL SOFTWARE PURE DATA aperti (Figura 3.1). La finestra principale permette di monitorare gli eventi audio e di modificare le opzioni audio globali. Nella parte inferiore della finestra è riportato il log di messaggi ed errori provenienti dalle patches aperte o da Pd stesso. Da questa finestra è possibile aprire (o creare) patches e di modificarle durante la loro esecuzione, rendendo l ambiente di programmazione real time. Figura 3.1: Finestra principale di Pd (dietro) e finestra di una patch aperta (davanti) Elementi del linguaggio I dati elementari gestiti da Pd sono detti atoms; questi possono essere: floats, numeri con un valore rappresentato su 32-bit in virgola mobile; symbols, stringhe di lettere non contenenti spazi bianchi;

21 3.1. FUNZIONAMENTO DI PURE DATA 13 pointers, che rappresentano una certa posizione in una struttura dati. Tutti i numeri (anche gli interi), sono gestiti da Pd come floats. Ogni stringa dell utente che non può essere ricondotta ad un float, viene interpretata come symbol. Un programma Pd è composto dalle seguenti entità: oggetti. Sono visualizzati sul programma tramite le object box, scatole dal bordo rettangolare che hanno il compito di interpretare il testo che l utente scrive al loro interno al fine di creare un unità di elaborazione che esegue le azioni desiderate. Il testo inserito viene diviso in atoms: il primo definisce la classe dell oggetto e gli altri, se presenti, formano gli argomenti di creazione dell oggetto. Se un oggetto può ricevere dati da altri oggetti è dotato di uno o più inlets, visibili come piccoli rettangolini neri posti sul bordo superiore della rappresentazione dell oggetto. Ugualmente se l oggetto è in grado di fornire dati per altri oggetti sono dotati di outlets, rappresetati dagli stessi rettangolini neri posti sul bordo inferiore dell oggetto (Figura 3.4). Gli oggetti si dividono in oggetti controllo, che svolgono la loro funzione alla risposta di eventi sporadici, e in oggetti tilde (tilde objects) che lavorano al sample rate, producendo solitamente campioni audio. Figura 3.2: osc : oggetto tilde Pd che produce un segnale audio sinusoidale alla frequenza data come argomento di creazione; la frequenza può essere modificata in real-time mediante ricezione di messaggi. messaggi. Sono l elemento di scambio tra oggetti; ogni oggetto con uno o più inlets può ricevere messaggi e ogni oggetto con uno o più outlets può inviarne. Un messaggio è composto da una lista di atoms in cui differenziamo due parti: un selettore (il primo atom della lista) e zero o più argomenti (il resto della lista). Dato che gli oggetti possono reagire in modi differenti a seconda dei messaggi che riceve, il selettore è un symbol (una stringa) che ha il compito di scegliere la giusta reazione

22 14 CAPITOLO 3. IL SOFTWARE PURE DATA dell oggetto al messaggio. Gli argomenti sono invece il contenuto del messaggio. Un messaggio particolare molto usato in Pd è un bang: questo è composto dal selettore bang e da nessun contenuto; è spesso usato come messaggio di trigger per operazioni. È possibile introdurre messaggi scritti dall utente nel flusso di dati di una patch attraverso le message box, rappresentate graficamente tramite scatole con il bordo destro a bandiera. Le message box contengono il messaggio che l utente ha scritto al loro interno al momento della creazione; hanno un inlet e un outlet: quando una message box riceve un messaggio dal suo inlet o riceve un click del mouse, spedisce attraverso il suo outlet il messaggio che contiene. Figura 3.3: Alcuni messaggi, da sinistra a destra (nella forma selettore argomenti): float 5, symbol mysymb, bang, list 1 2 three, list sym1 sym2, mysel 34 symb. Spesso la rappresentazione dei messaggi in Pd omette il selettore per tutti quelli standard, come float e list. elementi GUI. Sono tutti quegli elementi che non sono statici (come gli oggetti o le message box) e rispondono ad eventi di input da parte dell utente. Alcuni di questi sono: number box, symbol box, toggle, bang, vertical slider, horizontal slider, array. La particolarità degli elementi GUI è quella di mostrare e di poter modificare dinamicamente il loro contenuto, rendendoli elementi di controllo di un programma Pd. Per esempio una number box contiene un float ed ha un inlet e un outlet: il contenuto può essere modificato tramite il mouse o tramite messaggi ricevuti dall inlet; ogni volta che il suo contenuto è aggiornato, questo è spedito tramite il suo outlet. commenti. Sono commenti testuali che l utente può inserire liberamente sul piano di lavoro della patch. connessioni. Specificano il percorso dei dati uscenti da un elemento verso l ingresso di altri elementi. Sono rappresentate da segmenti tra object boxes, message boxes ed elementi GUI che collegano outlets e inlets. È possibile creare dei percorsi solo da outlets verso inlets (e non vice-

23 3.1. FUNZIONAMENTO DI PURE DATA 15 Figura 3.4: Elementi GUI disponibili in Pd. Grazie a questi elementi è possibile controllare graficamente il comportamento delle patch. versa). Inoltre sono distinguibili due tipi di connessioni (vd. Figura 3.1) che si differenziano per il flusso di dati che le attraversa: signal connection, che trasporta dati che vengono elaborati solitamente da tilde objects con il ritmo di campioni (float) al secondo (sample rate) trattandosi di campioni audio, control connection, attraverso il quale i dati vengono fatti scorrere e vengono elaborati il più velocemente possibile. Figura 3.5: Una semplice patch Pure Data: al click della message box il messaggio da essa contenuto viene recapitato all oggetto sommatore (costruito con argomento 13), che elabora il dato e lo consegna alla number box, che lo mostra al suo interno Passaggio e ordine dei messaggi Un messaggio è composto da un selettore seguito da un numero arbitrario di argomenti. Ogni volta che un messaggio viene passato ad un inlet di un elemento (solitamente oggetti, ma sono ammessi tutti gli elementi che possono ricevere un messaggio), questo ne controlla il selettore: se è riconosciuto come valido, viene eseguita un azione corrispondente a quel selettore. Spesso alla ricezione di un messaggio si ha come conseguenza la spedizione di un altro messaggio attraverso i prossimi elementi del grafo. L ordine di

24 16 CAPITOLO 3. IL SOFTWARE PURE DATA passaggio dei messaggi segue la regola della visita in profondità di un grafo. Consideriamo per esempio il seguente grafo: In questo esempio, quando la message box A viene sollecitata, manderà un messaggio alle message box B e C, in ordine non deterministico (dipenderà dall ordine di connessione degli oggetti, non ricostruibile). Il messaggio A non è propagato finchè non sono propagati tutti i messaggi nati da esso. Il messaggio C non è propagato finchè non è propagato D. Non è quindi possibile avere una sequenza di propagazione A-C-B-D dato che A attende che C sia totalmente propagato (in profontità). Le sequenze possibili di messaggi sono quindi A-B-C-D o A-C-D-B. Nel caso in cui si rende necessario un ordinamento temporale dei i messaggi in uscita, è possibile utilizzare particolari oggetti disponibili in Pd (come gli oggetti trigger o select). Questo tipo di propagazione dei messaggi non evita il formarsi di loop infiniti nella propagazione di messaggi. Per esempio consideriamo un oggetto float: questo oggetto ha il compito di immagazzinare un float e di porlo in output quando sollecitato. Per questo scopo ha due inlets; quello sulla sinistra che risponde a due selettori: float e bang. Quando questo inlet riceve un messaggio della forma float 34, questo riconosce il selettore float, immagazzina l argomento (34) e lo porge subito in output attraverso il suo unico outlet. Se invece riceve un messaggio della forma bang, allora porge in output il numero che aveva precedentemente immagazzinato. Dato che questo inlet quando sollecitato spedisce un messaggio in output, è detto hot inlet. L inlet sulla destra invece riconosce solo il selettore float e quando riceve un messaggio immagazzina il numero in esso contenuto senza porlo in output. Per questo è detto cold inlet.

25 3.1. FUNZIONAMENTO DI PURE DATA 17 Con pochissime eccezioni, tutti gli oggetti Pd con più di un input hanno questa differenza tra gli inlets. Questo tipo di distinzione tra hot inlet e cold inlet è necessaria per evitare condizioni di loop infiniti. Figura 3.6: Due esempi di costrutti ciclici (contatori): quello sulla destra genera un loop infinito. In figura 3.6 sono mostrati esempi di costrutti ciclici (contatori): nel caso sulla sinistra, ogni volta che il messaggio bang arriva all oggetto float ( f, abbreviazione per float), questo trasmette il suo contenuto all oggetto sommatore, che lo restituisce all oggetto float, immagazzinandolo tramite il cold inlet. Dato che l inlet non è reattivo, il contenuto viene immagazzinato nell oggetto, ma non portato in output. Nel caso sulla destra invece si ha un costrutto non corretto: se il messaggio 1 viene inviato, i due sommatori entrano in un loop di propagazione dei messaggi che non ha termine, portando così a una condizione di stack overflow. Questo perchè esiste un ciclo tra hot inlets (inlet reattivi) Meccanismi di astrazione Pure Data offre due meccanismi di astrazione per creare sottoprogrammi (sub-patches), chiamati one-off subpatch e abstraction. In tutti e due i casi, l astrazione creata apparirà nella patch come una object box. One-off subpatching Se creiamo una nuova object box e scriviamo al suo interno pd nomesubpatch, questo creerà una one-off subpatch e verrà aperta una nuova finestra nel quale è possibile stabilire il comportamento del sottoprogramma. Dentro al sottoprogramma è possibile usare gli oggetti inlet, inlet, outlet, outlet che creano i rispettivi inlet e outlet per la object box che contiene il sottoprogramma; in questo modo è possibile passare parametri e restituire risultati. È possibile duplicare le subpatch e modificare in modo indipendente ogni copia. La particolarità della one-off subpatch è che questa è salvata nello stesso file della patch principale.

26 18 CAPITOLO 3. IL SOFTWARE PURE DATA Figura 3.7: Esempio di una one-off subpatch. Il sottoprogramma può essere modificato dalla propria finestra (sulla destra). Abstraction subpatching Per creare una abstraction, è necessario salvare il sottoprogramma come patch a sè stante, per esempio con nome abstraction1.pd ; una volta disponibile questo file, è possibile richiamare il nome del file senza estensione dentro una object box per richiamare l astrazione creata. Questa tipo di sottoprogramma può essere modificata in modo indipendente dalle patch che la usano: le modifiche effettuate al file abstraction1.pd si rifletteranno in tutte le patch che lo includono. Figura 3.8: Esempio di un abstraction: il comportameto dell oggetto abstraction1 è definito dentro il file abstracion1.pd Per fare un analogia con il linguaggio di programmazione C, le one-off subpatches corrispondono ai blocchi di codice tra parentesi graffe, mentre le abstractions corrispondono a funzioni.

27 3.1. FUNZIONAMENTO DI PURE DATA Array numerici Pure Data permette di allocare array lineari (o tabelle) di floats di 32-bit. Questo tipo di strumento è molto usato nella sintetizzazione di suono, attraverso per esempio la riproduzione di una particolare forma d onda salvata come campioni audio dentro una tabella. Se la dimensione scelta dell array è N, gli indici per accedere al suo contenuto vanno da 0 a N 1. La lettura o la scrittura in un array sono demandati a specifici oggetti: tabread, tabwrite (più le versioni per dati di controllo e per segnali, che non riportiamo). Figura 3.9: Un array in Pd (sulla sinistra), la lettura del terzo elemento dell array, restituito in output dal oggetto tabread (al centro), la scrittura del valore 0.5 nel terzo elemento tramite l oggetto tabwrite (sulla destra). È possibile usare tabwrite con un messaggio dal selettore list con due elementi (come mostrato in figura) oppure usare il secondo inlet per fornire l indice, e il primo per fornire il contenuto ed effettuare la scrittura. Per questo tipo di elemento è possibile abilitare il salvataggio del suo contenuto all interno del file patch in cui è utilizzato attraverso l opzione save contents nelle sue proprietà. È consigliabile però salvare il contenuto di array, specialmente se formato da campioni audio, dentro separati file audio in formato WAV o AIFF e di caricare questi file dentro gli array al momento dell inizializzazione. Questa operazione dovrebbe essere effettuata prima dell inizio dell elaborazione audio, dato che l allocazione di memoria e le operazioni di I/O sul disco possono generare overruns o underruns del buffer audio Formato del file patch Il salvataggio di una patch creata con Pd genera un file con estensione pd. Questo file contiene in formato testuale (Figura 3.10) le informazioni che servono per ricreare oggetti e connessioni presenti al momento del salvataggio,

28 20 CAPITOLO 3. IL SOFTWARE PURE DATA ma non per ripristinare lo stato degli oggetti ed elementi GUI: ogni volta che si apre una patch, lo stato dei vari elementi è resettato. Figura 3.10: File di testo generato (sulla destra) dal salvataggio della patch mostrata sulla sinistra. Nonostante il formato del file pd sia abbastanza criptico e non facilmente modificabile tramite editor di testo, questa scelta è stata presa dagli sviluppatori di Pd per mantenere la compatibilità delle patches con software simili (Max/MSP) e per adottare un formato facilmente stampabile su carta. Le difficoltà di modifica e di leggibilità sono superate dal fatto che il software Pure Data, essendo open source, è facilmente reperibile ed installabile su molte piattaforme, non rendendo necessaria la modifica manuale dei file pd. 3.2 Estensioni al linguaggio Pure Data offre la possibilità all utente di creare nuove classi di oggetti con comportamenti specifici, attraverso l impiego di un interfaccia pubblica definita in C. Date le caratteristiche del suo linguaggio visuale, Pd è costruito seguendo il paradigma object-oriented. Sfortunatamente il linguaggio C non permette un implementazione elegante (almeno non quanto il C++) del concetto di classe; per questo sono stati creati altri strumenti che permettono l impiego della stessa interfaccia in altri linguaggi, come C++, Fortran, Python e molti altri Internals, externals e librerie In Pd si differenziano due tipi di classi: internal È una classe di oggetti che è compilata in Pd. Molti oggetti primitivi come gli operatori logico-artimetici (+, *, /, mod, >, etc..) ed oggetti di uso frequente (trigger, send, receive, tabwrite, osc, pha-

29 3.2. ESTENSIONI AL LINGUAGGIO 21 sor ) sono internals. staticamente. Il loro caricamento in memoria è effettuato external È una classe di oggetti che non è compilata in Pd; ma viene caricata dinamicamente durante l esecuzione se è richiesta. Una volta che un external è stato caricato in memoria, non è più distinguibile da un internal. Uno o più externals possono essere compilati in un unico file binario. Questa collezione di oggetti è detta libreria. I file di libreria sono semplicemente librerie caricabili dinamiche con estensione dipendente dalla piattaforma per cui sono state compilate (.pd linux,.pd darwin,.dll, etc..). La forma più semplice di libreria è quella composta da un solo external con nome coincidente a quello della libreria (libreria mylib che contiene la dichiarazione della classe di oggetti mylib) Meccanismo di inclusione Pd supporta due modalità di inclusione di librerie. Supponiamo di voler includere una libreria con nome mylib ; questo è possibile: attraverso l opzione da riga di comando: -l mylib, creando un oggetto mylib. Nel primo caso, tutti gli externals della libreria sono caricati all avvio di Pd. Questo metodo è consigliato nel caso di librerie che contengono più externals. Nel secondo caso Pd controllerà che la classe mylib sia già stata caricata. In caso negativo, Pd cercherà in tutti i percorsi dichiarati nella variabile di ambiante path un file chiamato mylib.pd linux (o con l estensione dell ambiente di esecuzione). Se il file è trovato, verranno caricati tutti gli externals contenuti nella libreria chiamando la funzione mylib setup(). Una volta caricati, Pd cercherà di istanziare la classe mylib, anche se la classe con tale nome può non essere contenuta nella libreria mylib Struttura del codice C di un external Per scrivere un external è richiesta una certa interfaccia, questa è definita nel file m pd.h. È quindi necessario includere questo file.

30 22 CAPITOLO 3. IL SOFTWARE PURE DATA #include "m_pd.h" Ricalcando il paradigma object-oriented, una classe è composta da un insieme di dati, detto dataspace, e da un insieme di operazioni di manipolazione, detto methodspace. Per prima cosa, dobbiamo definire un puntatore al tipo t class che conterrà la classe che andremo a generare. Poi definiamo il dataspace della nostra classe: static t_class *myobject_class; typedef struct _myobject { t_object x_obj; /*... altri campi necessari al mio oggetto... */ t_myobject; Il primo e unico campo obbligatorio del dataspace deve essere del tipo t object, necessario a Pd per gestire la visualizzazione grafica dell oggetto e altre strutture dati come inlets e outlets. A questa struttura posso aggiungere poi tutti i campi necessari al funzionamento del mio oggetto. Definiamo ora il methodspace dell oggetto. Ogni volta che un istanza dell oggetto riceve un messaggio, viene invocato un metodo. Un metodo è definito come una funzione void con almeno il primo parametro del tipo del dataspace da noi definito. Per esempio la seguente funzione può essere una definizione valida di un metodo per la risposta alla ricezione di messaggi di selettore bang : void myobject_bang(t_myobject *x) { // Possibile modifica del data space // attraverso il puntatore x. /*... */ Metodi di risposta ad altri messaggi possono avere intestazioni diverse, in particolare hanno solitamente come parametri il contenuto dei messaggi ricevuti. Alcuni esempi di intestazione 2 : 2 L elenco completo è reperibile in [14]

31 3.2. ESTENSIONI AL LINGUAGGIO 23 void myobject_float(t_myobject *x, t_floatarg f); void myobject_symbol(t_myobject *x, t_symbol *s); void myobject_list(t_myobject *x, t_symbol *s, int argc, t_atom* argv); Al momento abbiamo definito dataspace e methodspace della nostra classe. Possiamo ora implementare le funzioni myobject new() e myobject setup(). La prima è il costruttore di un oggetto; viene richiamata ogni volta che la nostra classe viene istanziata. La seconda viene chiamata da Pd per generare la nostra classe, abbinando ad un nome simbolico (myobject) un certo dataspace, methodspace, costruttore ed eventuale distruttore. void *myobject_new() { t_myobject *x = (t_myobject) pd_new(myobject_class); // altre inizializzazioni necessarie al nostro oggetto /*... */ return (void*) x; void myobject_setup() { myobject_class = class_new( // simbolo a cui associare la nuova classe gensym("myobject"), // il costruttore della classe (t_newmethod) myobject_new, // il distruttore, qui non definito 0, // la dimensione del dataspace sizeof(t_myobject), // tipo di visualizzazione grafica scelta per l oggetto CLASS_DEFAULT, // successivi argomenti sono per definire il tipo // degli argomenti di creazione dell oggetto,

32 24 CAPITOLO 3. IL SOFTWARE PURE DATA // lo 0 termina la lista. In questo caso non // ci sono argomenti di creazione. 0); // associazione del methodspace: associo il metodo // myobject_bang in risposta ai messaggi dal selettore "bang". class_addbang(myobject_class, myobject_bang); Una volta compilato per la piattaforma desiderata 3, l external può essere incluso nelle patch Pure Data tramite uno dei metori di inclusione elencati in Per un esempio concreto di sorgente C di un external si rimanda all appendice B. 3 Per una corretta documentazione, compilazione e pacchettizzazione, si consiglia di partire da questo scheletro (scaricabile anche tramite Subversion checkout): https:// pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/externals/template

33 Capitolo 4 Pure Data su Android: libpd In questo capitolo è mostrata la struttura e il funzionamento di libpd, un progetto che mira a far diventare Pure Data una libreria di sintesi audio multipiattaforma. libpd 1 offre piccoli strati di software che permettono l interfacciamento a Pure Data da molti linguaggi di programmazione, come Java, Objective C e Python, supportando quindi l inclusione in piattaforme mobili come Android e ios. In particolare si è approfondita la struttura del software che permette l interfacciamento con Java e delle classi che permettono di integrare Pure Data come un servizio Android. Come esposto in [5], libpd permette una separazione netta tra la progettazione sonora e l applicazione in cui questa è necessaria. Questo risultato è stato raggiunto con il grande sforzo di separare il signal processing di Pure Data da tutti i suoi elementi grafici, come la visualizzazione degli oggetti e la GUI. 4.1 Architettura degli wrapper Java di libpd Attraverso l uso di JNI 2, sono stati definiti metodi nativi in Java che si interfacciano, attraverso del middleware, alle funzioni scritte in C offerte dalla libreria libpd. È quindi possibile sfruttare la potenza di signal processing di Pd invocando questi metodi nativi. Mostriamo ora la struttura del middleware Java (Figura 4.1): 1 2 Java Native Interface: framework di programmazione che permette ad applicazioni Java di interfacciarsi con funzioni scritte in C, C++ o assembler. 25

34 26 CAPITOLO 4. PURE DATA SU ANDROID: LIBPD Figura 4.1: Diagramma UML delle classi del middleware Java di interfacciamento a libpd. (Gli elementi senza bordo con sopra un cerchietto rappresentano le interfacce.)

35 4.1. ARCHITETTURA DEGLI WRAPPER JAVA DI LIBPD 27 PdBase È lo wrapper elementare di libpd. È incaricato di riproporre la stessa interfaccia proposta dalla libreria, gestendo la conversione dei tipi tra Java e C. Inoltre provvede alla sincronizzazione tra threads, offrendo tutti i metodi pubblici synchronized. Offre metodi per l inizializzazione parametrica di Pd e per l elaborazione di segnali. Tra i molti metodi offerti da PdBase ne mettiamo in evidenza alcuni: openaudio(int inputchannels, int outputchannels, int samplerate); Inizializza il motore audio di Pd con i parametri forniti. Questa operazione deve essere effettuata prima di chiamare i metodi di signal processing. process(int ticks, float[] inbuffer, float[] outbuffer); È il cuore del signal processing. Questo metodo elabora ticks blocchi di dati (solitamente un blocco in Pd è formato da 64 campioni se non configurato diversamente), utilizzando come segnale di input inbuffer (che può essere anche vuoto o non significativo) e ponendo l output dell elaborazione in outbuffer. Il risultato dell elaborazione, se si tratta di audio, può essere instradato verso l hardware audio per la riproduzione attraverso le chiamate che il sistema operativo offre. openpatch(file file); Permette di aprire un patch Pd salvata in file e di settare così l elaborazione audio desiderata. sendband(string symbol); sendfloat(string symbol, float f); sendmessage(...);... Alcuni dei metodi offerti che permettono di inviare informazioni di controllo (come bangs, floats, messaggi, eventi MIDI, etc.) a Pd. NativeLoader, NativeLibraryLoadError la classe NativeLoader è un insieme di funzioni di utilità per la scelta della giusta piattaforma e per il caricamento del corretto codice nativo. La classe di errore NativeLibraryLoadError è una specializzazione di UnsatisfiedLinkError, una cui istanza viene sollevata in caso di errori di caricamento. Questi elementi sono utilizzati da PdBase in fase di inizializzazione di Pd.

36 28 CAPITOLO 4. PURE DATA SU ANDROID: LIBPD PdReceiver Interfaccia minima che deve essere implementata da oggetti che desiderano ricevere messaggi da Pd. Per ricevere messaggi, dobbiamo sottoscriverci a uno o più simboli Pd, tramite la chiamata al metodo subscribe() di PdBase, e registrare un ricevitore che implementa questa interfaccia a PdBase tramite il metodo setreceiver(). Ogni volta che un messaggio è diretto verso i simboli a cui siamo sottoscritti, verranno invocati i metodi del ricevitore implementati dall utente. PdMiniReceiver Ugualmente a PdReceiver, un oggetto può ricevere eventi MIDI da Pd implementando questa interfaccia, sottoscrivendosi ai simboli che gli interessano e registrando un ricevitore MIDI presso PdBase attraverso il metodo setmidireceiver(). PdDispatcher Questa classe astratta è una realizzazione parziale dell interfaccia PdReceiver, al fine di gestire, tramite il design pattern Observer, lo smistamento dei messaggi provenienti da Pd verso più destinazioni interessate solo a particolari messaggi. Più ascoltatori possono registrarsi presso un PdDispatcher tramite il metodo addlistener(), che ha come parametri il simbolo da cui l ascoltatore vuole ricevere un messaggio e un oggetto che implementa PdListener. Ogni volta che un messaggio arriva al PdDispatcher, questo ne controlla il simbolo da cui proviene; verranno chiamati i metodi corrispettivi di tutti i PdListener che sono stati associati a quel simbolo. Per istanziare un PdDispatcher è necessario implementare il metodo print(), che viene richiamato ogni volta che un messaggio viene spedito ad un oggetto [print] in una patch Pd in esecuzione. Il contenuto del messaggio da stampare verrà passato come parametro al metodo implementato. 4.2 Inclusione di libpd su Android Come esposto in [5], il sistema operativo Android non permette (o non permetteva nelle sue versioni precedenti) di connettersi dal codice nativo C ai dispositivi di input e output audio. Questo problema, che ha portato alla maturazione di libpd isolando il signal processing dal resto, è stato risolto sviluppando degli wrapper Java che gestiscono i dispositivi audio tramite le API offerte da Android. L insieme di questi wrappers è mantenuto in un sottoprogetto di libpd chiamato pd-for-android. Mostriamo ora la struttura

37 4.2. INCLUSIONE DI LIBPD SU ANDROID 29 e l utilizzo di questo software. Per facilità di esposizione, tratteremo singolarmente i tre package in cui il software è diviso (io, service, utils), partendo da quello più vicino alle API di gestione dei dispositivi audio, fino a quello più ad alto livello utilizzato dalle applicazioni, seguendo un approccio bottom-up Package io Figura 4.2: Diagramma UML delle classi del package io. Date le diversità dei device con cui Android deve interfacciarsi, è stato necessario lo sviluppo di una classe che invocasse le API Android con parametri dipendendi dal dispositivo, in modo da minimizzare la latenza (per quanto è possibile a livello di applicazione) e creare una più stretta possibile sincronizzazione dell I/O audio.

38 30 CAPITOLO 4. PURE DATA SU ANDROID: LIBPD Per questi compiti sono disponibili diverse classi wrappers e classi di utilità: AudioWrapper Questa classe nasconde la complessità di operare con campioni audio codificati PCM offrendo un interfaccia simile a quella offerta dal server audio JACK 3. Al momento della sua istanziazione, è necessario implementare il metodo process() e specificare i parametri audio, come numero dei canali di ingresso e uscita, sample rate e dimensioni del buffer. La grandezza effettiva del buffer verrà scelta come la minima grandezza del buffer multipla di quella specificata ammessa dalla piattaforma. Quando si invoca il metodo start(), questo wrapper farà partire un thread che ciclicamente preleverà segnali audio dal buffer del microfono se richiesto (tramite un oggetto AudioRecordWrapper), elaborerà l output chiamando il metodo process() implementato dallo sviluppatore, e scriverà questo output nel buffer diretto al dispositivo audio di output (tramite un oggetto AudioTrack). AudioRecordWrapper È uno wrapper per la classe offerta dal sistema AudioRecord per l acquisizione di segnali audio da dispositivi di input audio come microfono o line-in. Questa classe è nata con l intento di isolare e risolvere problemi di audio input che possono presentarsi in specifici dispositivi. AudioParameters È una classe di utilità che fornisce i migliori parametri audio (massimo numero di canali audio in ingresso e uscita, massima sample rate) supportati per la piattaforma corrente. Questi parametri sono determinati eseguendo al caricamento statico della classe dei test con varie configurazioni. VersionedAudioFormat È una classe di utilità che fornisce i giusti parametri per la selezione del formato dell audio dipendentemente dalla versione di Android che si sta utilizzando. Questo per rendere il codice portabile anche nelle versioni più vecchie di Android. Questo strato di software nasconde la gestione device-dependant, grazie all interfaccia offerta da AudioWrapper. In questo modo ogni applicazione 3 JACK Audio Connection Kit:

39 4.2. INCLUSIONE DI LIBPD SU ANDROID 31 di elaborazione audio può operare non preoccupandosi delle differenze tra i dispositivi su cui questa verrà distribuita. La classe PdAudio gestisce una istanza di AudioWrapper che usa Pure Data come metodo di elaborazione dei segnali audio. Per fare questo, PdAudio crea una istanza di classe anonima estesa da AudioWrapper implementando il metodo astratto process(...) tramite una chiamata a PdBase.process(...): public class PdAudio { private static AudioWrapper audiowrapper = null; [...] public synchronized static void initaudio([...]) { [...] audiowrapper = new AudioWrapper([...]) protected int process(short[] inbuffer, short[] outbuffer) { Arrays.fill(outBuffer, (short) 0); return PdBase.process([...], inbuffer, outbuffer); [...] Inoltre PdAudio si preoccupa contestualmente della corretta inizializzazione della libreria Pd dipendentemente dai parametri audio scelti dallo sviluppatore Package service Nella programmazione di applicazioni Android si distinguono grossolanamente due tipi di contenitori di flussi di esecuzione: le attività (Activity), che hanno una interfaccia grafica e sono eseguite solo in foreground, e i servizi (Service), che non hanno interfaccia grafica ed eseguono in background. In questo package sono presenti le classi che permettono di usare Pure Data nelle applicazioni Android come servizio locale all applicazione. Utilizzando un servizio, più attività nella stessa applicazione possono usufruire dell elaborazione audio offerta dal servizio.

40 32 CAPITOLO 4. PURE DATA SU ANDROID: LIBPD Figura 4.3: Diagramma UML delle classi del package service.

41 4.2. INCLUSIONE DI LIBPD SU ANDROID 33 Con l aggettivo locale si intende che il servizio ha la stessa vita dell applicazione e che è eseguito su un thread dello stesso processo dell applicazione che lo richiede. È possibile anche implementare un servizio remoto che esegue su un processo diverso da quella dell applicazione; questi servizi sono più veloci e flessibili, possono essere usati da più applicazioni in modo parallelo, ma richiedono un notevole overhead e un aumento della complessità del codice di gestione. La classe fondamentale contenuta in questo package è PdService, che implementa l interfaccia Service offerta da Android. Nonostante la possibilità di implementare un servizio di tipo remoto, gli sviluppatori hanno optato per un servizio locale, dato che i vantaggi offerti dal primo erano pochi e non in grado di giustificare i costi ([5]). Ogni volta che un applicazione richiede la creazione di un servizio Pd- Service, un istanza del servizio è creata e inizializzata in modo asincrono rispetto all attività che ha richiesto l attivazione. Quando il servizio è inizializzato, questo restituisce all attività un oggetto che implementa IBinder, attraverso la quale interfaccia l attività può comunicare con il servizio. Pd- Service internamente definisce un tipo PdBinder estensione di Binder che offre il metodo getservice(), che restituisce un riferimento all istanza stessa del servizio; in questo modo l attività può invocare direttamente i metodi dell istanza di PdService. I metodi initaudio(), startaudio() e stopaudio() offerti da PdService consentono, tramite la classe PdAudio, corrispettivamente di inizializzare un thread che elabora audio con Pure Data, di farlo partire e di interromperlo. La classe PdPreferences è una estensione della classe PreferenceActivity offerta da Android. Contiene un modulo comprendente una interfaccia grafica che lo sviluppatore può includere nella propria applicazione per permettere all utente di modificare i principali parametri audio con cui Pure Data è inizializzato, come il sample rate e il numero dei canali Package utils Questo piccolo package contiene due classi di utilità. La classe PdUiDispatcher è una sottoclasse di PdDispatcher che permette di eseguire le chiamate ai metodi implementati nel thread in cui

42 34 CAPITOLO 4. PURE DATA SU ANDROID: LIBPD Figura 4.4: Diagramma UML delle classi del package utils. sono stati creati (solitamente il thread UI principale dell applicazione) e non nel thread audio gestito da Pure Data. La classe Properties non ha metodi, ma solo attributi inizializzati staticamente che contengono informazioni sulla CPU e sulla versione di Android in uso. È utilizzata da PdService per caricare delle estensioni compilate native di Pure Data dipendentemente dal tipo di CPU in uso. 4.3 Problematiche e limitazioni Assenza di real-time Nella realizzazione di libpd, gli sviluppatori hanno dovuto estrarre dal codice di Pure Data la parte che gestisce il signal processing, togliendo tutta la gestione dell interfaccia grafica che permetteva di modificare in tempo reale la patch in esecuzione. In libpd è stata persa la possibilità, presente originalmente in Pure Data, di modifica on-line dei programmi in esecuzione da parte dell utente, dato che la libreria non offre chiamate che permettono di modificare connessioni ed oggetti. È quindi necessario scrivere il programma Pure Data off-line, e poi caricare il file patch definitivo nel progetto Android in cui si vuole utilizzarlo. Una soluzione potrebbe essere integrare l interfaccia di libpd con delle chiamate per la gestione degli oggetti e delle connessioni delle patch aperte,

43 4.3. PROBLEMATICHE E LIMITAZIONI 35 mediante la rifattorizzazione del codice usato in Pure Data per la gestione della GUI; ma questa soluzione prevede un grosso lavoro di studio sul sorgente di Pure Data e sulla sua integrazione in libpd Latenza tra ingresso e uscita Questo strato di software capace di integrare il signal processing di Pure Data è posizionato a livello applicazione. Nonostante le accortezze prese nelle classi wrapper per minimizzare la latenza considerando il dispositivo in uso, a questo livello non è possibile ridurre la latenza audio attuale che si aggira sui valori di diverse centinaia di millisecondi. Sono riportati nella tabella 4.1 i valori di latenza media misurati tra input e output audio mediante l applicazione PureDataLatencyTester 4 su varie configurazioni di dispositivi. I tempi di latenza indicati sono misurati nel seguente modo: vengono emessi, tramite l esecuzione di un programma Pure Data, dei segnali acustici che lo stesso programma ha il compito di rilevare nel segnale proveniente dal microfono del dispositivo. La rilevazione viene effettuata dall oggetto bonk, che rileva picchi di potenza nei segnali dati come input. Il tempo di latenza stimato è il tempo intercorso tra l emissione del segnale acustico e la sua rilevazione. Nei campi di applicazione in cui l esigenza di un feedback sonoro in tempo reale è molto stretta, questa latenza può portare ad eccessivo ritardo e quindi ad un degradamento del servizio offerto. I tempi di latenza sembrano però scendere nei nuovi dispositivi, dotati di hardware migliore e di versioni di Android più recenti. Possiamo notare come le performance di libpd sono elevate in ios, dato il supporto nativo di codice C, in cui libpd è scritto, e quindi l assenza del software di interfacciamento, necessario in Android, che introduce maggior parte della latenza misurata. 4

44 36 CAPITOLO 4. PURE DATA SU ANDROID: LIBPD Tabella 4.1: Latenza media misurata tra input audio e output audio in libpd. Dispositivo Versione SO Latenza media Inq Cloud-touch ms Samsung Galaxy Tab ms Acer Iconia A ms HTC Legend ms HTC Sensation ms Samsung Galaxy S ms Samsung Nexus S ms Evo 4g ms Samsung Infuse ms Samsung Droid Charge ms LG Optimus GT ms Nexus One ms Asus Transfromer ms LG Optimus 2x ms HTC Desire ms SE Experia ARC ms Nexus S 4.0 (beta) 380ms Samsung Galaxy S Plus ms Samsung Galaxy S II ms Samsung Galaxy Tab ms Acer Liquid MT ms Misura di riferimento effettuata su piattaforma ios (pd-for-ios) ipod Touch 2g ios ms

45 Capitolo 5 Prototipi ed esempi di applicazione realizzati In questo capitolo verranno esposti i prototipi realizzati durante lo studio dell ambiente Pure Data e la sua integrazione in Android. 5.1 Sonificazione parametrica: PdPatchRunner La prima applicazione realizzata, chiamata PdPatchRunner, consiste in una interfaccia di controllo per una collezione di esempi di sonificazione parametrica programmati in Pure Data. L applicazione si snoda in due frammenti (Figura 5.2): selezione della patch Il frammento principale è quello di selezione degli esempi. Viene mostrata una lista di programmi Pure Data con informazioni descrittive sui suoi parametri e sul suono che questi generano. La lista viene popolata in base alle informazioni presenti in file XML collocati nella cartella di progetto assets/patch metadata (Figura 5.1). Una volta che l utente sceglie un esempio dalla lista, viene inizializzato il secondo frammento, passandogli come parametro la patch selezionata. gestione della patch Una volta che la patch è stata scelta, questo frammento pensa ad avviare il servizio Pure Data e ad aprire il file patch desiderato, presente in assets/patches. Viene inoltre costruita una interfaccia che permette di cambiare i parametri che Pure Data utilizza 37

46 38CAPITOLO 5. PROTOTIPI ED ESEMPI DI APPLICAZIONE REALIZZATI <patch file="freqmodulation.pd" title="frequency Modulation"> <sink id="basefrequency" minvalue="220" maxvalue="660" defaultvalue="440" unit="hz" /> <sink id="modulationfrequency" minvalue="0" maxvalue="50" defaultvalue="5" unit="hz" /> <sink id="modulationindex" minvalue="1" maxvalue="100" defaultvalue="10" unit="" /> <description> Esempio di modulazione di un segnale sinusoidale in frequenza. </description> </patch> Figura 5.1: Esempio di descrittore di patch XML.

47 5.1. SONIFICAZIONE PARAMETRICA: PDPATCHRUNNER 39 per generare il suono. I parametri modificabili, i loro valori massimi, minimi e le loro unità di misura sono indicate nel file XML che descrive la patch. Figura 5.2: Frammenti dell applicazione: selezione della patch (a sinistra) e gestione della patch in esecuzione (al centro). A destra la patch Pure Data in esecuzione. Inoltre vengono gestiti gli eventi provenienti dal sistema Android che possono alterare il ciclo di vita dell applicazione. Nel caso in cui il sistema chieda la distruzione o la messa in pausa dell applicazione, questa provvede correttamente a fermare il servizio Pure Data e a rilasciare le risorse audio se necessario. Di seguito mostriamo il codice per la gestione di tali public void onstop() { super.onstop(); PdController.stopAudio(); public void onstart() { super.onstart(); PdController.startAudio();

48 40CAPITOLO 5. PROTOTIPI ED ESEMPI DI APPLICAZIONE public void onpause() { PdController.stopDSP(); public void onresume() { PdController.startDSP(); mdsptogglebutton.setchecked(true); super.onresume(); L oggetto PdController è uno wrapper per il servizio PdService scritto ad-hoc per questa applicazione; ha il solo compito di facilitare la lettura del programma. 5.2 Estensione del servizio orientata al flusso di dati: PdSonifier Nel trattare campioni provenienti da sensori si ha a che fare con flussi di dati che vogliamo consegnare in modo continuo al servizio che li analizza o li sonifica in real-time. Il normale meccanismo di instradamento offerto da libpd, consiste nella spedizione di un singolo messaggio Pure Data (tramite i metodi PdBase.sendMessage(), PdBase.sendFloat(), etc..) verso un particolare oggetto della patch in esecuzione (solitamente un oggetto [receive symbol name]). Questa operazione è necessaria ogni volta che è disponibile un dato dal sensore. È necessaria la scrittura di un gestore che, non appena sono disponibili nuovi dati, pensi a instradarli con tale meccanismo. Il progetto PdSonifier estende il servizio PdService offerto da libpd implementando un semplice meccanismo di instradamento di flussi di dati verso uno o più simboli Pure Data in ricezione. La classe che implementa il servizio esteso è SonificationService. Per creare e gestire un istanza di questo servizio si usa lo stesso procedimento

49 5.2. ESTENSIONE DEL SERVIZIO ORIENTATA AL FLUSSO DI DATI: PDSONIFIER41 usato per PdService, di cui riportiamo solo l oggetto ServiceConnection in Figura 5.3. private SonificationService sonificationservice = null; private final ServiceConnection sonificationserviceconnection = new ServiceConnection() public void onserviceconnected(componentname name, IBinder service) { sonificationservice = ((SonificationService.LocalBinder) service).getservice(); // inizializzo flussi da sonificare /*... */ sonificationservice.startaudio(); public void onservicedisconnected(componentname name) { Figura 5.3: Definizione di un gestore di connessione al servizio SonificationService da passare come parametro alla bindservice(). Questa classe offre i seguenti metodi aggiuntivi: Metodi per la gestione del processing audio di Pd public void startdsp(); public void stopdsp(); public void toggledsp(); public void isdspon(); public void openpatch(file patchfile) throws IOException; Questi metodi permettono di gestire lo stato del DSP (Digital Sound Processing) di Pure Data indipendentemente dall acquisizione o dal rilascio delle risorse audio.

50 42CAPITOLO 5. PROTOTIPI ED ESEMPI DI APPLICAZIONE REALIZZATI Inoltre questi metodi sollevano eventi di inizio e fine elaborazione alla patch in esecuzione, in modo da permettergli di eseguire l operazione di ducking, che consiste nel portare a zero il segnale audio in uscita in modo continuo e non repentino, al fine di evitare la riproduzione di spiacevoli clicks generati dall interpolazione effettuata dallo hardware audio. Il metodo openpatch() permette di sostituire la patch in esecuzione sollevando correttamente gli eventi di ducking alla patch entrante e a quella uscente. Se vogliamo aprire più patches contemporaneamente, possiamo ricorrere al metodo openpatch() offerto da PdBase. Metodi per la gestione delle risorse audio public void startaudio(boolean duckin); public void stopaudio(boolean duckout); public void toggleaudio(); public void isaudioon(); Questi metodi gestiscono l acquisizione e il rilascio delle risorse audio del sistema e contestualmente l inizializzazione e la gestione dello stato dell elaborazione, mediante chiamate ai metodi citati sopra. Il primo metodo permette di acquisire la risorsa audio dal sistema e di inizializzare, se necessario, i parametri dell elaborazione sonora (come sample rate, numero canali, etc..); il secondo permette l operazione inversa, cioè il rilascio delle risorse. I parametri boolean di entrambi indicano al servizio se sollevare o no gli eventi di inizio o fine elaborazione alla patch in esecuzione. Metodi per l instradamento di flussi di floats public StreamSonifierHandler newstreamsonifier(inputstream inputstream, String[] destinations); public StreamSonifierHandler newstreamsonifier(inputstream inputstream); public StreamSonifierHandler newstreamsonifier(string[] destinations); public StreamSonifierHandler newstreamsonifier(); Il metodo newstreamsonifier e le sue varianti consentono di creare un nuovo oggetto di tipo StreamSonifierHandler, un gestore di sonificazione

51 5.3. SONIFICAZIONE APPLICATA AL MONITORAGGIO DI ATTIVITÀ UMANE: PDFUN43 di un flusso. Questa classe eredita da Thread e fornisce un flusso di esecuzione ciclico che preleva dati da un InputStream con operazioni bloccanti e li instrada verso uno o più simboli di destinazione in Pd. (Figura 5.4) Il parametro inputstream permette di passare al gestore di sonificazione uno stream di dati da cui questo deve leggere e bloccarsi. Se questo è assente, verrà creato un gestore locale inizialmente privo di stream di input; attraverso il metodo getoutputstream() applicato al gestore, è possibile ricavare un riferimento ad un oggetto DataOutputStream e passare dati al gestore tramite il metodo writefloat() di questo oggetto. (Figura 5.5) Il formato dei dati passati nello stream deve essere quello di float su 4 byte network ordered; è consigliato l utilizzo del tipo wrapper DataOutputStream che ha il metodo writefloat() che permette di inserire dati in uno stream in questo formato. Il parametro destinations può essere un array di stringhe contenente i nomi dei simboli Pd di destinazione dei dati instradati dal gestore di sonificazione. Se è assente i dati non avranno destinazioni iniziali inizializzate e verranno letti e scartati. Si consiglia quindi di inizializzare una destinazione se non è tollerata la perdita di dati. Le destinazioni possono essere modificate durante l esecuzione chiamando i metodi adddestination() e removedestination() di StreamSonifierHandler. Per un esempio di creazione e utilizzo di un oggetto StreamSonifierHandler vedere Figura 5.6. Il progetto aggiunge ben poche funzionalità rispetto a quelle fornite da tutto il codice di gestione di Pure Data già scritto dagli sviluppatori di libpd,ma questo servizio è stato creato con l intenzione di contenere in futuro tutte le funzionalità che occorrono ad un applicazione di elaborazione dati provenienti da sensori che prevede la loro sonificazione real-time. 5.3 Sonificazione applicata al monitoraggio di attività umane: PdFun Questo progetto cerca di riassumere lo studio svolto in una serie di esempi a sè stanti, nei quali sono esposte solo alcune applicazioni al campo dell analisi e sonificazione di dati provenienti dal monitoraggio di attività umane attraverso sensori.

52 44CAPITOLO 5. PROTOTIPI ED ESEMPI DI APPLICAZIONE REALIZZATI public void run() { // finchè non mi interrompono continuo ad elaborare dati while (interrupted()!= true) { try { // aspetto di prelevare dati dallo stream float app = source.readfloat(); synchronized (lock) { // se ho dei simboli di destinazione settati, // instrado il dato a tutti // sennò consumo il dato per svuotare lo stream if (isactive) for (String symbol: sinks) { PdBase.sendFloat(symbol, volumes.get(symbol)[0]* app); catch (InterruptedIOException e) { try { source.close(); catch (IOException e1) { Log.e(TAG, e1.tostring()); break; catch (IOException e) { Log.e(TAG, e.tostring()); break; Figura 5.4: Implementazione del metodo run() di StreamSonifierHandler: ciclicamente leggo in app un float proveniente dallo stream source, lo moltiplico per un fattore di amplificazione/attenuazione volumes.get(symbol)[0] e lo instrado verso ogni destinazione presente nell array symbols.

53 5.3. SONIFICAZIONE APPLICATA AL MONITORAGGIO DI ATTIVITÀ UMANE: PDFUN45 StreamSonifierHandler xaxisaccelsonification = ss.newstreamsonifier(); xaxisaccelsonification.adddestination("frequency"); xaxisaccelsonification.adddestination("amplitude"); DataOutputStream pushdatahere = xaxisaccelsonification.getoutputstream(); while (interrupted()!= true) { pushdatahere.writefloat(math.random()); Thread.sleep(500); Figura 5.5: Creazione e utilizzo di un gestore di sonificazione locale : ss è un riferimento ad un istanza di SonificationService. InputStream tobesonified = risorsa.getinputstream(); StreamSonifierHandler xaxisaccelsonification = ss.newstreamsonifier(tobesonified, new String[] {"Frequency", "Amplitude"); Figura 5.6: Creazione e utilizzo di un gestore di sonificazione di un flusso dato come parametro: ss è un riferimento ad un istanza di SonificationService.

54 46CAPITOLO 5. PROTOTIPI ED ESEMPI DI APPLICAZIONE REALIZZATI L attività principale che viene eseguita all avvio dell applicazione è una interfaccia che mostra la lista degli esempi e ne gestisce l avvio (Figura 5.7). Non si notano particolarità in questo modulo dell applicazione; il codice è riportato in Appendice C. Figura 5.7: Activity principale: lista degli esempi. Gli esempi sono implementati come sottoclassi di Activity. Ogni esempio gestisce l istanza di un servizio SonificationService (vd. 5.2) che utilizza per sonificare dati provenienti da sorgenti diverse. In tutti gli esempi le sorgenti dei dati sono i sensori interni presenti nel dispositivo, ai quali abbiamo acceduto mediante l uso delle API fornite dal sistema Android. In linea di principio, niente vieta di sostituire tali sorgenti con altre sorgenti di dati come sockets o files, che per esempio possono essere utilizzati rispettivamente per l analisi e/o la sonificazione on-line o off-line di dati provenienti da ambienti esterni Scooter Engine Simulator Questo esempio mostra una possibilità di rappresentazione audio di un accelerazione, misurata in questo caso dall accelerometro interno al dispositivo. L attività che implementa questo esempio è ScooterEngineActivity, il cui layout è riportato in figura 5.8.

55 5.3. SONIFICAZIONE APPLICATA AL MONITORAGGIO DI ATTIVITÀ UMANE: PDFUN47 Figura 5.8: Layout di ScooterEngineActivity.

56 48CAPITOLO 5. PROTOTIPI ED ESEMPI DI APPLICAZIONE REALIZZATI Durante l inizializzazione di questa attività, viene creato un servizio SonificazionService e, una volta connesso, viene registrata la funzione OnSensorChanged() come gestore di eventi provenienti dal sensore di accelerazione. Ogni volta che questa funzione viene richiamata, viene scritto il nuovo valore proveniente dal sensore nella pipe di uno StreamSonifierHandler precedentemente creato, che pensa ad instradare i valori alla patch Pure Data aperta. La patch Pure Data che gestisce la sonificazione, riportata in A.2.1, è Motorino.pd, collocato nella cartella di progetto assets/patches. Questa riceve sul simbolo gas, tramite un oggetto [r gas], i valori dell accelerazione. Attraverso un oggetto [vline~], generatore di rampe, ed altri oggetti logici, viene generato un segnale che modula in ampiezza e in frequenza il suono del motore. Questo segnale è l interpolazione tramite spezzate dei valori dell accelerazione maggiori di una certa soglia dinamica. La soglia è posta inizialmente a zero; ogni volta che arriva un campione di valore maggiore del valore della soglia, quest ultima si porta a tale valore per poi decrescere linearmente a zero con una certa pendenza. Se durante la decrescita arriva un nuovo campione minore del valore attuale della soglia, questo viene scartato. Se il nuovo campione è maggiore del valore attuale della soglia, quest ultima risale a quel valore per poi riscendere a zero in un arco di tempo dipendente dal valore di picco. Tramite trasformazioni lineari di questo segnale, è possibile pilotare oggetti che gestiscono la frequenza del suono (frequenza dell oggetto [osc~]) e degli scoppi del motore (frequenza dell oggetto [phasor~], che genera un segnale a dente di sega che modula in ampiezza il suono del motore, producendo gli scoppi). In conclusione, l utente è in grado di capire l entità dell accelerazione che ha impresso al suo dispositivo ascoltando la sua familiare sonificazione come un motore di piccola cilindrata Orientation Device Guess Game Questo esempio mostra come è possibile sonificare dati al fine di generare un feedback utile all utente per raggiungere un qualche scopo o migliorare le sue prestazioni.

57 5.3. SONIFICAZIONE APPLICATA AL MONITORAGGIO DI ATTIVITÀ UMANE: PDFUN49 L attività OrientationGuessActivity implementa un semplice gioco, il cui scopo è quello di guidare l utente ad ottenere un particolare orientamento del dispositivo, scelto casualmente, mediante l uso di segnali acustici. In fase di inizializzazione, viene creato e connesso un servizio SonificationService, ma non viene utilizzato uno StreamSonifierHandler per instradare i dati dei sensori verso Pd. Bensì si utilizza il metodo inizialmente offerto da libpd per comunicare con Pd. Il gestore di eventi del sensore OnSensorChanged() viene richiamato ogni volta che un nuovo orientamento del dispositivo viene rilevato; tramite il metodo PdBase.sendList() viene mandato un messaggio list al simbolo CurrentOrientation della patch in esecuzione contenente i tre valori assiali degli angoli di rotazione del dispositivo. La patch (riportata in A.2.2) che gestisce il gioco è orientation guess.pd, collocata nella cartella di progetto assets/patches. Questa ha il compito di scegliere casualmente un orientamento, cioè tre valori angolari nei tre assi. Ogni volta che il simbolo CurrentOrientation riceve una lista di tre floats, viene calcolato l errore dell orientamento corrente rispetto a quello scelto, sommando i valori assoluti delle differenze dei tre valori angolari. Tramite un valore inversamente proporzionale a questo errore, viene modulato in ampiezza un tono puro sinusoidale, creando una sequenza di beeps a frequenza variabile. Inoltre, l angolo di azimuth viene usato per effettuare un diverso mixaggio del segnale audio verso i due canali stereo disponibili, al fine di creare una sorgente virtuale di suono, in modo che l utente possa più facilmente percepire verso quale direzione orientare il dispositivo. La patch pensa anche a spedire verso il simbolo android una percentuale di avvicinamento all obiettivo, che viene ricevuta dalla attività e mostrata a schermo (Figura 5.9). La ricezione di messaggi da Pd è resa possibile dalla registrazione, tramite il metodo PdBase.setReceiver(), di un PdReceiver, i cui metodi sono stati implementati col codice necessario per l aggiornamento della percentuale mostrata sul layout. Quando l errore tra l orientamento scelto dall utente e quello prefissato dalla patch Pure Data è sotto una certa soglia, vengono emessi tre segnali acustici in sequenza per avvertire l utente che ha raggiunto l obiettivo.

58 50CAPITOLO 5. PROTOTIPI ED ESEMPI DI APPLICAZIONE REALIZZATI Figura 5.9: Layout di OrientationGuessActivity: la percentuale mostrata è calcolata dalla patch Pure Data.

Pure-Data Una piattaforma per la sintesi e l elaborazione audio in tempo reale

Pure-Data Una piattaforma per la sintesi e l elaborazione audio in tempo reale Pure-Data Una piattaforma per la sintesi e l elaborazione audio in tempo reale Federico Avanzini http://www.dei.unipd.it/ avanzini Corso di Sistemi di elaborazione per la musica

Dettagli

Introduzione a Pure Data

Introduzione a Pure Data Introduzione a Pure Data Laurea Magistrale in Ingegneria e Scienze Informatiche Corso di Interazione non Visuale a.a. 2009/2010 Stefano Papetti Un po' di storia: Il paradigma Max Nome scelto in onore di

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Giampiero Allamprese 0000260193 PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Reti di Calcolatori LS prof. Antonio Corradi A.A. 2007/2008 ABSTRACT L obiettivo di questo progetto è la realizzazione

Dettagli

APPENDICE I Pratiche di tecnologie informatiche per la elaborazione della musica e del suono

APPENDICE I Pratiche di tecnologie informatiche per la elaborazione della musica e del suono APPENDICE I Pratiche di tecnologie informatiche per la elaborazione della musica e del suono 135 L elaborazione digitale del segnale audio 136 L appendice dedicata alle Pratiche di tecnologie informatiche

Dettagli

Strumenti per lo sviluppo del software

Strumenti per lo sviluppo del software Lo sviluppo del software Strumenti per lo sviluppo del software Lo sviluppo del software è l attività centrale del progetto e ha lo scopo di produrre il codice sorgente che, una volta compilato e messo

Dettagli

Struttura di un programma Java

Struttura di un programma Java Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che

Dettagli

Music Everywhere with BT

Music Everywhere with BT Music Everywhere with BT Acquaviva Luca 231767 luca.acquaviva@studio.unibo.it Colombini Gabriele 231491 gabriele.colombini@studio.unibo.it Manservisi Alberto 258370 alberto.manservisi@studio.unibo.it Abstract

Dettagli

Capitolo 2. Esplorare l interfaccia tra uomo e computer

Capitolo 2. Esplorare l interfaccia tra uomo e computer Capitolo 2 Esplorare l interfaccia tra uomo e computer Imparare la tecnologia Gli esseri umani non hanno abilità tecnologiche innate La nostra precedente esperienza nell uso di dispositivi simili, incluse

Dettagli

Sistema Operativo Compilatore

Sistema Operativo Compilatore MASTER Information Technology Excellence Road (I.T.E.R.) Sistema Operativo Compilatore Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Il Sistema

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Java? Sì, grazie. Scopo del corso

Java? Sì, grazie. Scopo del corso Modulo di Java? Sì, grazie Il linguaggio di Internet? Portabilità su qualunque piattaforma (non solo calcolatori): It works everywhere Supporto e disponibilità di strumenti, librerie e documentazione garantiti

Dettagli

PROGETTI DISPONIBILI IL CORSO DI PROGETTO DI RETI E SISTEMI INFORMATICI

PROGETTI DISPONIBILI IL CORSO DI PROGETTO DI RETI E SISTEMI INFORMATICI PROGETTI DISPONIBILI IL CORSO DI PROGETTO DI RETI E SISTEMI INFORMATICI 1 Web Link Monitor... 2 2 Database Browser... 4 3 Network Monitor... 5 4 Ghost Site... 7 5 Copy Search... 9 6 Remote Audio Video

Dettagli

DATA A ACQUISITIONA TOOLBOX. Il sistema per analisi ed acquisizioni integrate basato sulla programmazione ad oggetti è definitivamente disponibile

DATA A ACQUISITIONA TOOLBOX. Il sistema per analisi ed acquisizioni integrate basato sulla programmazione ad oggetti è definitivamente disponibile DA A ACQUISITIONA TOOLBOX Il sistema per analisi ed acquisizioni integrate basato sulla programmazione ad oggetti è definitivamente disponibile Nel precedente articolo ho illustrato le modalità in cui

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Il Sistema Operativo Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Cos

Dettagli

Manuale semplificato per l uso delle tastiere Bontempi con il Computer

Manuale semplificato per l uso delle tastiere Bontempi con il Computer Manuale semplificato per l uso delle tastiere Bontempi con il Computer Le tastiere Bontempi dotate di presa Midi o di presa USB-Midi possono essere collegate ad un personal computer. La tastiera invia

Dettagli

LabVIEW. Apertura del programma

LabVIEW. Apertura del programma LabVIEW Il termine LabVIEW significa Laboratory Virtual Instrument Engineering Workbench. LabVIEW è un prodotto che si è imposto nel tempo come standard di riferimento per la gestione e la elaborazione

Dettagli

Ing. Paolo Domenici PREFAZIONE

Ing. Paolo Domenici PREFAZIONE Ing. Paolo Domenici SISTEMI A MICROPROCESSORE PREFAZIONE Il corso ha lo scopo di fornire i concetti fondamentali dei sistemi a microprocessore in modo semplice e interattivo. È costituito da una parte

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 A1 - Interfacce grafiche 1 Prerequisiti Utilizzo di un sistema operativo Programmazione elementare ad oggetti Concetto di macchina virtuale Tipi di interfaccia Riferimento

Dettagli

Struttura di un sistema operativo. Struttura dei Sistemi Operativi. Servizi per l utente generico. Servizi per l utente generico

Struttura di un sistema operativo. Struttura dei Sistemi Operativi. Servizi per l utente generico. Servizi per l utente generico Impossibile visualizzare l'immagine. Struttura di un sistema operativo Struttura dei Sistemi Operativi Servizi di un sistema operativo Interfaccia Utente Capitolo 2 -- Silberschatz Chiamate di sistema

Dettagli

La specifica del problema

La specifica del problema 2.9 (Caso di studio facoltativo) Pensare a oggetti: esame del problema Iniziamo ora a esaminare il nostro caso di studio di progettazione e implementazione orientate agli oggetti. Le sezioni Pensare a

Dettagli

CORSO DI LAUREA IN SCIENZE ERBORISTICHE E DEI PRODOTTI NUTRACEUTICI

CORSO DI LAUREA IN SCIENZE ERBORISTICHE E DEI PRODOTTI NUTRACEUTICI CORSO DI LAUREA IN SCIENZE ERBORISTICHE E DEI PRODOTTI NUTRACEUTICI Informatica con esercitazioni Prof. Onofrio Greco Modulo 1 Concetti di base dell ICT Modulo 2 Uso del Computer e Gestione dei File Modulo

Dettagli

Introduzione a Classi e Oggetti

Introduzione a Classi e Oggetti Introduzione a Classi e Oggetti Oggetto: concetto astratto Entità di un programma dotata di tre proprietà caratteristiche stato informazioni conservate nell oggetto condizionano il comportamento dell oggetto

Dettagli

La Login in Prestito!!Disponbilità Tesi. Categorie di Progetti di Ingegneria del Software

La Login in Prestito!!Disponbilità Tesi. Categorie di Progetti di Ingegneria del Software Draft versione 1.1 Categorie di Progetti di Ingegneria del Software Tutti i temi Progettuali proposti rientrano in una delle seguenti categorie. 1. Temi sull'elaborazione di Dati Multimediali Temi su Audio,

Dettagli

Object Oriented Programming

Object Oriented Programming OOP Object Oriented Programming Programmazione orientata agli oggetti La programmazione orientata agli oggetti (Object Oriented Programming) è un paradigma di programmazione Permette di raggruppare in

Dettagli

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Introduzione Il meccanismo dell eredità consente di sfruttare delle relazioni tipo/sottotipo, ereditando attributi

Dettagli

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Corso Base Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Java Java è un Linguaggio di Programmazione orientato agli oggetti. Un Linguaggio di Programmazione è un linguaggio ad alto livello, dotato

Dettagli

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Progettazione OO E. TINELLI Punto di Partenza Il modello di analisi E una rappresentazione minima del

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16 Pietro Frasca Lezione 15 Martedì 24-11-2015 Struttura logica del sottosistema di I/O Processi

Dettagli

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso Obiettivi formativi Introdurre i principi del funzionamento di un elaboratore e della programmazione. Presentare gli approcci elementari alla soluzione di problemi (algoritmi)e al progetto di strutture

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

Dettagli

How to Develop Accessible Linux Applications

How to Develop Accessible Linux Applications How to Develop Accessible Linux Applications Sharon Snider Copyright 2002 IBM Corporation v1.1, 2002-05-03 Diario delle Revisioni Revisione v1.1 2002-05-03 Revisionato da: sds Convertito in DocBook XML

Dettagli

Capitolo 2 -- Silberschatz

Capitolo 2 -- Silberschatz Struttura dei Sistemi Operativi Capitolo 2 -- Silberschatz Struttura di un sistema operativo Servizi di un sistema operativo Interfaccia Utente Chiamate di sistema Tipi di chiamate Programma di sistema

Dettagli

Università degli Studi di Napoli Federico II. FACOLTÀ DI INGEGNERIA Corso di Laurea in Ingegneria Informatica LM. Progetto di un applicazione Android

Università degli Studi di Napoli Federico II. FACOLTÀ DI INGEGNERIA Corso di Laurea in Ingegneria Informatica LM. Progetto di un applicazione Android Università degli Studi di Napoli Federico II FACOLTÀ DI INGEGNERIA Corso di Laurea in Ingegneria Informatica LM Progetto di un applicazione Android Briscola bluetooth Candidati: Giuliano Formato Daniele

Dettagli

WGDESIGNER Manuale Utente

WGDESIGNER Manuale Utente WGDESIGNER Manuale Utente Pagina 1 SOMMARIO 1 Introduzione... 3 1.1 Requisiti hardware e software... 3 2 Configurazione... 3 3 Installazione... 4 3.1 Da Webgate Setup Manager... 4 3.2 Da pacchetto autoestraente...

Dettagli

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50 Guida all uso dell ambiente di sviluppo 1 integrato o IDE JCreator LE 4.50 Inizializzazione: creazione del nuovo progetto e del file sorgente in ambiente JCreator Al lancio del programma si apre la finestra

Dettagli

Corso di INFORMATICA 2 (Matematica e Applicazioni)

Corso di INFORMATICA 2 (Matematica e Applicazioni) Università di Camerino Scuola di Scienze e Tecnologie Sezione di Matematica Corso di INFORMATICA 2 (Matematica e Applicazioni) Anno Accademico 2014/15 3 Anno Primo Semestre Docenti: Paolo Gaspari Roberto

Dettagli

Anno Accademico 1999/2000

Anno Accademico 1999/2000 progettare sistemi software di grandi dimensioni richiede adeguati supporti crisi del software : i costi di gestione diventano preponderanti su quelli di produzione il software dovrebbe essere protetto,

Dettagli

Controllo remoto di SPEEDY

Controllo remoto di SPEEDY UNIVERSITÀ DI BRESCIA FACOLTÀ DI INGEGNERIA Dipartimento di Elettronica per l Automazione Laboratorio di Robotica Avanzata Advanced Robotics Laboratory Corso di Robotica (Prof. Riccardo Cassinis) Controllo

Dettagli

CAPITOLO 27 SCAMBIO DI MESSAGGI

CAPITOLO 27 SCAMBIO DI MESSAGGI CAPITOLO 27 SCAMBIO DI MESSAGGI SCAMBIO DI MESSAGGI Sia che si guardi al microkernel, sia a SMP, sia ai sistemi distribuiti, Quando i processi interagiscono fra loro, devono soddisfare due requisiti fondamentali:

Dettagli

EUROPEAN COMPUTER DRIVING LICENCE. Multimedia Audio Editing. Syllabus

EUROPEAN COMPUTER DRIVING LICENCE. Multimedia Audio Editing. Syllabus EUROPEAN COMPUTER DRIVING LICENCE Multimedia Audio Editing Syllabus Scopo Questo documento presenta il syllabus di ECDL Multimedia Modulo 1 Audio Editing. Il syllabus descrive, attraverso i risultati del

Dettagli

L informatica comprende:

L informatica comprende: Varie definizioni: INFORMATICA Scienza degli elaboratori elettronici (Computer Science) Scienza dell informazione Definizione proposta: Scienza della rappresentazione e dell elaborazione dell informazione

Dettagli

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE Relatore: prof. Michele Moro Laureando: Marco Beggio Corso di laurea in Ingegneria Informatica Anno Accademico 2006-2007

Dettagli

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore Relazioni tra oggetti e classi : Generalizzazione Fondamenti di Informatica II 20. Laboratorio 6 Collegamenti e associazioni Le relazioni di tipo generalizzazione (specializzazione), servono per poter

Dettagli

Xpress MANUALE OPERATIVO. Software di configurazione e controllo remoto I440I04_15

Xpress MANUALE OPERATIVO. Software di configurazione e controllo remoto I440I04_15 Xpress I440I04_15 Software di configurazione e controllo remoto MANUALE OPERATIVO INDICE 1 INTRODUZIONE... 3 2 REQUISITI HARDWARE E SOFTWARE... 3 3 SETUP... 3 4 PASSWORD... 4 5 HOME PAGE... 4 6 CANALE...

Dettagli

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2014/2015

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2014/2015 ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2014/2015 Classe: 4^A inf Prof.ssa Lami Carla Prof. Simone Calugi Programma di INFORMATICA GENERALE, APPLICAZIONI

Dettagli

Sistemi Operativi. Funzioni e strategie di progettazione: dai kernel monolitici alle macchine virtuali

Sistemi Operativi. Funzioni e strategie di progettazione: dai kernel monolitici alle macchine virtuali Modulo di Sistemi Operativi per il corso di Master RISS: Ricerca e Innovazione nelle Scienze della Salute Unisa, 17-26 Luglio 2012 Sistemi Operativi Funzioni e strategie di progettazione: dai kernel monolitici

Dettagli

Il Provvedimento del Garante

Il Provvedimento del Garante Il Provvedimento del Garante Il provvedimento del Garante per la Protezione dei dati personali relativo agli Amministratori di Sistema (AdS) Misure e accorgimenti prescritti ai titolari dei trattamenti

Dettagli

Il sistema operativo

Il sistema operativo Il sistema operativo Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Cos è un Sistema Operativo? Per capirlo, immaginiamo inizialmente

Dettagli

SOMMARIO. Programmazione orientata agli eventi. Programmazione orientata agli eventi. Programmazione orientata agli eventi

SOMMARIO. Programmazione orientata agli eventi. Programmazione orientata agli eventi. Programmazione orientata agli eventi SOMMARIO Programmazione orientata agli eventi Graphical User Interface (GUI) Programmazione in Windows MFC GUI multipiattaforma Qt Applicazione di esempio (Qt) Programmazione orientata agli eventi Un evento

Dettagli

Programmazione in ambiente

Programmazione in ambiente Università Politecnica delle Marche Dipartimento di Ingegneria dell Informazione Programmazione in ambiente Android Laura Montanini - laura.montanini@univpm.it Corso di Tecnologie per le TLC 2013-2014

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

SMS-GPS MANAGER. Software per la gestione remota ed automatizzata dei telecontrolli gsm con e senza gps

SMS-GPS MANAGER. Software per la gestione remota ed automatizzata dei telecontrolli gsm con e senza gps SOFTWARE PER LA GESTIONE DEI TELECONTROLLI SMS-GPS MANAGER Software per la gestione remota ed automatizzata dei telecontrolli gsm con e senza gps Rev.1009 Pag.1 di 10 www.carrideo.it INDICE 1. DESCRIZIONE

Dettagli

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A. 2011-2012

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A. 2011-2012 Sapienza Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica Corso di Laurea in Ingegneria dei Sistemi Informatici

Dettagli

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

Il lavoro condotto ha portato alla realizzazione di tre sistemi: - Ingranditore e Lettore di testi - Controller digitale - Comunicatore

Il lavoro condotto ha portato alla realizzazione di tre sistemi: - Ingranditore e Lettore di testi - Controller digitale - Comunicatore Il progetto Freedom è nato dalla volontà di applicare alcune moderne ed innovative tecnologie alle semplici attività giornaliere. L obiettivo del progetto è stato quello di fornire nuovi e semplici strumenti

Dettagli

Architetture Applicative

Architetture Applicative Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture

Dettagli

PalmViewCAM MANUALE D USO E INSTALLAZIONE (VERSIONE 1.0)

PalmViewCAM MANUALE D USO E INSTALLAZIONE (VERSIONE 1.0) PalmViewCAM POWERLINE DIGITAL VIDEO RECORDER MANUALE D USO E INSTALLAZIONE (VERSIONE 1.0) Vi ringraziamo per aver scelto il nostro prodotto. Vi invitiamo a leggere attentamente il presente manuale di istruzioni

Dettagli

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.

Dettagli

Percorso Video Game. Percorsi per la Laurea Magistrale in Informatica. Obiettivi generali. Sbocchi professionali

Percorso Video Game. Percorsi per la Laurea Magistrale in Informatica. Obiettivi generali. Sbocchi professionali Percorsi per la Laurea Magistrale in Informatica Percorso Video Game Docenti di riferimento: Dr. Dario Maggiorini, Dr. Laura Anna Ripamonti Sede di erogazione: Milano Obiettivi generali Il mercato dei

Dettagli

ISTITUTO TECNICO INDUSTRIALE STATALE "G. MARCONI" Via Milano n. 51-56025 PONTEDERA (PI) DIPARTIMENTO: Discipline Informatiche

ISTITUTO TECNICO INDUSTRIALE STATALE G. MARCONI Via Milano n. 51-56025 PONTEDERA (PI) DIPARTIMENTO: Discipline Informatiche PROGRAMMAZIONE COORDINATA TEMPORALMENTE Monte ore annuo 66 Libro di Testo A.LORENZI M.GOVONI APPLICAZIONI SCIENTIFICHE per il Liceo Scientifico delle Scienze applicate - ATLAS SETTEMBRE Modulo 0 : COLLEGAMENTO

Dettagli

Sistemi Web per il turismo - lezione 2 -

Sistemi Web per il turismo - lezione 2 - Sistemi Web per il turismo - lezione 2 - 8 Considerare il computer coma una calcolatrice sembra un po limitativo rispetto a quello che solitamente vediamo succedere sui computer intorno a noi come ad esempio

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni)

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni) Progettazione di Sistemi Interattivi Struttura e supporti all implementazione di applicazioni in rete (cenni) Docente: Daniela Fogli Gli strati e la rete Stratificazione da un altro punto di vista: i calcolatori

Dettagli

SWIM v2 Design Document

SWIM v2 Design Document PROGETTO DI INGEGNERIA DEL SOFTWARE 2 SWIM v2 DD Design Document Matteo Danelli Daniel Cantoni 22 Dicembre 2012 1 Indice Progettazione concettuale Modello ER Entità e relazioni nel dettaglio User Feedback

Dettagli

Progetto per un Sistema di Video/Audio Sorveglianza Remota RemoteGuard

Progetto per un Sistema di Video/Audio Sorveglianza Remota RemoteGuard La Sapienza Università di Roma Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Anno Accedemico 2008-2009 Corso di Progetto di Reti di Calcolatori e Sistemi Informatici Prof. Stefano Millozzi

Dettagli

È possibile caratterizzare un percorso formativo per gli studenti sulla base di due aree di specializzazione (indirizzi):

È possibile caratterizzare un percorso formativo per gli studenti sulla base di due aree di specializzazione (indirizzi): Percorsi per la Laurea Magistrale in Informatica Percorso Video Game Docenti di riferimento: Dario Maggiorini, Laura Anna Ripamonti Sede di erogazione: Milano LIKE THIS! Obiettivi generali Il mercato dei

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

Ingegneria del Software UML - Unified Modeling Language

Ingegneria del Software UML - Unified Modeling Language Ingegneria del Software UML - Unified Modeling Language Obiettivi. Presentare un approccio visuale alla progettazione. Illustrare i vantaggi dell utilizzo di diagrammi nella fase di progettazione. Rispondere

Dettagli

Corso Android Corso Online Programmatore Android

Corso Android Corso Online Programmatore Android Corso Android Corso Online Programmatore Android Accademia Domani Via Pietro Blaserna, 101-00146 ROMA (RM) info@accademiadomani.it Programma Generale del Corso Modulo Uno - Programmazione J2ee 1) Programmazione

Dettagli

D3.1 Documento di analisi della visualizzazione 3D in ambiente Cloud e relative problematiche

D3.1 Documento di analisi della visualizzazione 3D in ambiente Cloud e relative problematiche D3.1 Documento di analisi della visualizzazione 3D in ambiente Cloud e relative problematiche Il Cloud Computing La visualizzazione nella Cloud Problematiche Virtualizzazione della GPU Front end Virtualization

Dettagli

Arduino: domotica open source

Arduino: domotica open source Arduino: domotica open source Emanuele Palazzetti Feedback: http://tinyurl.com/arduinold2011 1 Physical Computing Costruire dei sistemi fisici interattivi tramite l'uso di software e di hardware in grado

Dettagli

GRIGLIA PER L ACCERTAMENTO DEI PREREQUISITI SCUOLA PRIMARIA

GRIGLIA PER L ACCERTAMENTO DEI PREREQUISITI SCUOLA PRIMARIA GRIGLIA PER L ACCERTAMENTO DEI PREREQUISITI SCUOLA PRIMARIA Alunno CLASSI PRIME Valutazione Competenze trasversali Sì In parte NO Riconosce i colori fondamentali Riconosce le forme Riconosce le varie grandezze

Dettagli

FONDAMENTI di INFORMATICA Prof. Lorenzo Mezzalira

FONDAMENTI di INFORMATICA Prof. Lorenzo Mezzalira FONDAMENTI di INFORMATICA Prof. Lorenzo Mezzalira Appunti del corso 1 Introduzione all informatica: algoritmi, linguaggi e programmi Indice 1. Introduzione 2. Risoluzione automatica di problemi - Algoritmi

Dettagli

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it Programmazione II Lezione 4 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 30/09/2011 1/46 Programmazione II Lezione 4 30/09/2011 Sommario 1 Esercitazione 2 Panoramica della Programmazione Ad Oggetti 3

Dettagli

Sommario della lezione

Sommario della lezione Sistemi Operativi Docente: Ugo Erra ugoerr+so@dia.unisa.it 2 LEZIONE STRUTTURE DEI SISTEMI OPERATIVI CORSO DI LAUREA TRIENNALE IN INFORMATICA UNIVERSITA DEGLI STUDI DELLA BASILICATA Sommario della lezione

Dettagli

Software che sovrintende al funzionamento del computer eseguendo compiti diversi:

Software che sovrintende al funzionamento del computer eseguendo compiti diversi: Sistema Operativo dispensa a cura di Alessandro Bellini Software che sovrintende al funzionamento del computer eseguendo compiti diversi: 1. Gestire interazione utente macchina 2. Fornire un interfaccia

Dettagli

uomo Software (sistema operativo) hardware

uomo Software (sistema operativo) hardware uomo Software (sistema operativo) hardware 1 Sistema operativo Insieme di programmi che svolgono funzioni essenziali per l uso del sistema di elaborazione Questi programmi sono i primi ad essere eseguiti

Dettagli

Mexal SAR. SAR (Servizio Assistenza Remota) TARGET DEL MODULO

Mexal SAR. SAR (Servizio Assistenza Remota) TARGET DEL MODULO SAR (Servizio Assistenza Remota) TARGET DEL MODULO Il modulo SAR, destinato ad Aziende e Professionisti, è stato progettato per fornire assistenza e consulenza a distanza. Se da una parte, i professionisti

Dettagli

Proff. Fabio Ciao e Raffaele Bortone

Proff. Fabio Ciao e Raffaele Bortone ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMAZIONE ANNUALE A.S. 2014/2015 Classe IV C Informatica Proff. Fabio Ciao e Raffaele Bortone Libro di testo: Cloud

Dettagli

GESTIONE DEI PROCESSI

GESTIONE DEI PROCESSI Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto

Dettagli

UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTA DI INGEGNERIA DIPARTIMENTO DI SISTEMI E INFORMATICA. Elaborato di Tecnologie del Software per Internet

UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTA DI INGEGNERIA DIPARTIMENTO DI SISTEMI E INFORMATICA. Elaborato di Tecnologie del Software per Internet UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTA DI INGEGNERIA DIPARTIMENTO DI SISTEMI E INFORMATICA Elaborato di Tecnologie del Software per Internet JMSWEB 2 SISTEMA PER LO SCAMBIO DI MESSAGGI TRA APPLICAZIONI

Dettagli

Sommario. Davide Casella 1 FMSMEETING 2

Sommario. Davide Casella 1 FMSMEETING 2 Guida all utilizzo di FMSmeeting Sommario FMSMEETING 2 BARRA DELLA IMPOSTAZIONI 3 WHITEBOARD / PRESENTATION BOARD 4 AREE VIDEO 7 CHAT BOARD 7 PEOPLE LIST 8 AREA ZOOM 8 F.A.Q.: PROBLEMI ALL UTILIZZO DI

Dettagli

Il linguaggio C# Eventi ed eccezioni

Il linguaggio C# Eventi ed eccezioni Tecniche di Programmazione avanzata Corso di Laurea Specialistica in Ingegneria Telematica Università Kore Enna A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it

Dettagli

Robot Operating System

Robot Operating System Robot Operating System Lezione 1 A cura di: Jonathan Cacace 1 Outline Lezione 1: Introduzione; Architettura ROS; Protocolli di comunicazione; Concetti base; Primi passi. Lezione 2: ROS Stage; 2 Introduzione

Dettagli

Un primo programma Java. Introduzione alla programmazione in Java. Programmi e mondo reale. Programmare ad oggetti. I programmi come modelli

Un primo programma Java. Introduzione alla programmazione in Java. Programmi e mondo reale. Programmare ad oggetti. I programmi come modelli 4 Un primo programma Java Introduzione alla programmazione in Java class Program1 { System.out.println("Benvenuti al corso"); 1 5 Programmi e mondo reale Programmare ad oggetti Il codice di un programma

Dettagli

Introduzione alla programmazione in Java

Introduzione alla programmazione in Java Introduzione alla programmazione in Java 1 Programmare ad oggetti La programmazione come attività di creazione di modelli. I concetti di classe, oggetto e scambio di messaggi. Un primo esempio di programma

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica Il software Dipartimento di Ingegneria dell Informazione Universitàdegli Studi di Parma SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono

Dettagli

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 11 + Credits I lucidi di questa lezione sono stati preparati da: Professor Stefano Mizzaro Professor Paolo Coppola e sono stati modificati e completati dal Dr. Paolo

Dettagli

Sistemi Mobili e Wireless Android Introduzione alla piattaforma

Sistemi Mobili e Wireless Android Introduzione alla piattaforma Sistemi Mobili e Wireless Android Introduzione alla piattaforma Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it Cos'è Android?

Dettagli

10.7 La classe BitSet... 555 Esercizi di autovalutazione... 558 Risposte agli esercizi di autovalutazione... 559 Esercizi 559

10.7 La classe BitSet... 555 Esercizi di autovalutazione... 558 Risposte agli esercizi di autovalutazione... 559 Esercizi 559 Sommario PREFAZIONE... XI Il nostro approccio didattico... xi Una panoramica del libro... xiv Ringraziamenti... xvii Gli autori... xix Deitel & Associates, Inc.... xx CAPITOLO 1 LA GRAFICA E JAVA2D...

Dettagli

Architetture Web. parte 1. Programmazione in Ambienti Distribuiti A.A. 2003-04

Architetture Web. parte 1. Programmazione in Ambienti Distribuiti A.A. 2003-04 Architetture Web parte 1 Programmazione in Ambienti Distribuiti A.A. 2003-04 Architetture Web (1) Modello a tre livelli in cui le interazioni tra livello presentazione e livello applicazione sono mediate

Dettagli

Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012. Introduzione a Visual Studio 2005/2008/2010

Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012. Introduzione a Visual Studio 2005/2008/2010 Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012 Introduzione a Visual Studio 2005/2008/2010 1 Outline Solution e Project Visual Studio e linguaggio C Visual Studio schermata principale

Dettagli

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali:

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali: Componenti di una applicazione Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali: Un sottosistema di interfaccia con l utente (IU, user interface o anche presentation

Dettagli

Corso Android Corso Online Sviluppo su Cellulari con Android

Corso Android Corso Online Sviluppo su Cellulari con Android Corso Android Corso Online Sviluppo su Cellulari con Android Accademia Futuro info@accademiafuturo.it Programma Generale del Corso di Sviluppo su Cellulari con Android Programma Base Modulo Uno - Programmazione

Dettagli

Progetto Febbraio 2013 - Appello 1: Diffusione di tweets sul grafo di Twitter

Progetto Febbraio 2013 - Appello 1: Diffusione di tweets sul grafo di Twitter UNIVERSITÀ DEGLI STUDI DI MILANO, DIPARTIMENTO DI INFORMATICA LAUREA TRIENNALE IN COMUNICAZIONE DIGITALE CORSO DI RETI DI CALCOLATORI ANNO ACCADEMICO 2011/2012 Progetto Febbraio 2013 - Appello 1: Diffusione

Dettagli

1. Hard Real Time Linux (Laurea VO o specialistica)

1. Hard Real Time Linux (Laurea VO o specialistica) 20/9/06 Elenco Tesi Disponibili Applied Research & Technology Dept. La Società MBDA La MBDA Italia è un azienda leader nella realizzazione di sistemi di difesa che con i suoi prodotti è in grado di soddisfare

Dettagli

P R O G E T T O L A R S A A P P U N T I S U L P. L. C.

P R O G E T T O L A R S A A P P U N T I S U L P. L. C. P R O G E T T O L A R S A A P P U N T I S U L P. L. C. L automazione di un qualunque procedimento industriale si ottiene mediante un insieme d apparecchiature, opportunamente collegate tra loro, in modo

Dettagli

Manuale di KGraphViewer. Gaël de Chalendar Federico Zenith Traduzione in italiano: Federico Zenith

Manuale di KGraphViewer. Gaël de Chalendar Federico Zenith Traduzione in italiano: Federico Zenith Gaël de Chalendar Federico Zenith Traduzione in italiano: Federico Zenith 2 Indice 1 Introduzione 6 2 Uso di KGraphViewer 8 2.1 La finestra principale.................................... 8 2.1.1 Spostare

Dettagli