F57033 - Programmazione per la Musica [a.a. 2005-06]
Indice
Il corso di Programmazione per la Musica è un insegnamento complementare
del corso di laurea (triennale) in Scienze e Tecnologie della Comunicazione
Musicale.
Mercoledi dalle 8:30 alle 12:30 in aula Delta (Via Comelico 39).
Il programma consiste di tutti e soli gli argomenti trattati a lezione,
secondo quanto viene via via pubblicato nella sottostante sezione
Diario delle lezioni tenute.
La prova di esame consiste nella realizzazione di un programma
in linguaggio Java, le cui specifiche di massima, proposte dal
candidato, dovranno essere preventivamente approvate dal docente.
L'interazione docente-candidato e la specifica del programma da
realizzare (d'ora in poi detta "SPECIFICA") dovranno conformarsi
alle seguenti norme, che potranno variare nel tempo per accogliere
i suggerimenti e le richieste di chiarimenti da parte dei candidati,
nonché per correggere gli eventuali errori.
[Versione attuale delle norme: release 0.2 del 17.03.05, valevoli
per l'a.a. 2004-05]
- La SPECIFICA dovrà essere riportata in una pagina HTML (d'ora in
poi detta "PAGINA") appositamente costruita dal candidato (URL a scelta
del medesimo), la quale dovrà altresì riportare come prima informazione,
in posizione ben visibile, le generalità del candidato (nome, cognome,
numero di matricola, corso di studi, anno di corso).
- Il docente valuterà la SPECIFICA e quanto prodotto dal candidato in
tutte le fasi successive del progetto esclusivamente consultando
la PAGINA.
- Il candidato potrà variare la SPECIFICA una o più volte nel corso
del progetto, previa approvazione da parte del docente.
- La SPECIFICA dovrà prevedere la realizzazione di una applet (d'ora
in poi detta "APPLET") mediante l'uso della libreria java.applet
o di altra libreria equivalente.
- La APPLET dovrà essere attivabile dalla PAGINA, che dovrà
anche riportare un mini-manuale d'uso della APPLET, in posizione
contigua a quella della APPLET nella PAGINA.
- L'utente dovrà essere in grado di interagire con la APPLET per
mezzo di un'interfaccia grafica (d'ora in poi detta "GUI") da
realizzare con l'ausilio della libreria java.awt o
di altra libreria equivalente.
- L'attivazione della APPLET dovrà avere come effetto l'esecuzione
udibile di un brano monodico (d'ora in poi detto "BRANO") rappresentato
conformemente allo standard MIDI.
- Il modulo di programma preposto all'esecuzione del BRANO dovrà
essere realizzato con l'ausilio della libreria java.sound
o di altra libreria equivalente.
- Il BRANO dovrà essere prodotto (costruito) da un apposito modulo
di programma che potrà fare o non fare uso di tecniche di generazione
di numeri casuali, a scelta del candidato.
- L'esecuzione del BRANO dovrà essere alterabile dinamicamente agendo
sul valore di alcuni parametri che sarà compito del candidato scegliere
e specificare.
- Il valore di detti parametri dovrà essere modificabile per il
tramite della GUI, la quale dovrà comprendere almeno due diversi
strumenti grafici, di cui uno continuo (p.es. selezione di valori
sulla base della posizione corrente di una barra di scorrimento) e
uno discreto (p.es. selezione da menu di un valore tratto da un insieme
di valori predefiniti).
- L'esecuzione del BRANO non si dovrà interrompere mentre il valore
di un parametro è in corso di modifica da parte dell'utente, e dovrà
proseguire conformemente al nuovo valore del parametro a partire
dall'istante in cui la scelta di detto nuovo valore sarà stata confermata
dall'utente medesimo (p.es. mediante rilascio del bottone del mouse dopo
aver agito su di una barra di scorrimento).
- La APPLET dovrà comprendere un pannello di controllo, dotato di
tasti (button) o di oggetti grafici equivalenti, che
consentano di avviare (START), di arrestare temporaneamente (PAUSE) o
di arrestare a titolo definitivo (STOP) l'esecuzione del brano.
- L'esecuzione della APPLET dovrà altres' prevedere la presentazione
in forma testuale, in un'apposita area contenuta nella rappresentazione
grafica della APPLET medesima, della sequenza di suoni che vengono prodotti
(di mano in mano che vengono prodotti), consistente almeno del codice MIDI
del suono attualmente ascoltabile, del nome della corrispondente nota
musicale e della sua frequenza in Hz.
- Dopo un arresto temporaneo (pause) dovrà essere possibile riprendere
l'esecuzione tornando ad agire sul tasto che aveva provocato l'arresto.
- Dopo un arresto a titolo definitivo (stop) dovrà essere possibile
eseguire un nuovo brano tornando ad agire sul tasto di avvio (start).
- La PAGINA dovrà contenere il codice sorgente della APPLET, oppure
un link al codice medesimo, a scelta del candidato.
La presentazione del progetto da parte del candidato e la sua
discussione verranno effettuate su appuntamento, da richiedere
al docente via
email.
Con lo stesso messaggio, il candidato comunicherà al docente
la URL della PAGINA. La medesima procedura (messaggio di email con
indicazione della URL della PAGINA), dovrà essere utilizzata
ogniqualvolta il candidato riterrà opportuno consultasi con il
docente in corso d'opera, a partire dalla fase di prima definizione
e di consolidamento della SPECIFICA.
I voti riportati nelle prove di esame potranno essere verbalizzati
in occasione degli appelli ufficiali di cui al calendario che segue
(il quale potrà subire modifiche anche dell'ultima ora -- si
consulti periodicamente questa pagina o la
homepage del docente
per le ultime novità, tenendo presente che, in caso di discrepanza,
fa fede la homepage del docente).
- Appello 1 a.a. 2005-06 - Aula Sigma - Ore 09:30 - 03 Feb 06 -
- Appello 2 a.a. 2005-06 - Aula Sigma - Ore 09:30 - 03 Mar 06 -
- Appello 3 a.a. 2005-06 - Aula Sigma - Ore 09:30 - 21 Apr 06 -
- Appello 4 a.a. 2005-06 - Aula Sigma - Ore 09:30 - 16 Jun 06 -
- Appello 5 a.a. 2005-06 - Aula Sigma - Ore 09:30 - 14 Jul 06 -
- Appello 6 a.a. 2005-06 - Aula Sigma - Ore 09:30 - 29 Sep 06 -
- Appello 1 a.a. 2006-07 - Aula Sigma - Ore 09:30 - 26 Gen 07 -
Viste norme entrate in vigore il 1 gennaio 2005, la verbalizzazione
può avvenire ESCLUSIVAMENTE in occasione di un appello ufficiale,
gestito tramite il sistema SIFA, al quale il candidato risulti
regolarmente iscritto. Si tenga presente che dette norme rendono
praticamente impossibile la verbalizzazione di un voto al di fuori
del normale regime degli appelli a calendario, e che la soluzione
in extremis di problemi burocratici legati alla ritardata o mancata
verbalizzazione di un voto sarà estremamente problematica.
(Per situazioni di emergenza -- p.es. imminenza dell'esame di laurea,
scadenza dei termini per la presentazione di domande di borse di
studio, etc. -- presentarsi durante l'orario di
ricevimento
dopo aver concordato una linea d'azione con la segreteria didattica
del corso di studi di appartenenza e/o della Facoltà.)
- Lezioni 01-04 -- Mar 04.10.05 --
Presentazione del corso.
Storia del linguaggio Java.
Primi esempi di programmi Java.
La libreria JavaSound.
- Lezioni 04-08 -- Mer 12.10.05 --
- Lezioni 09-12 -- Mer 19.10.05 --
- Lezioni 13-16 -- Mer 26.10.05 --
- Lezioni 17-20 -- Mer 02.11.05 --
- Lezioni 21-24 -- Mer 09.11.05 --
- Lezioni 25-28 -- Mer 16.11.05 --
- Lezioni 29-32 -- Mer 23.11.05 --
- Lezioni 33-36 -- Mer 30.11.05 --
- Lezioni 37-40 -- Mer 07.12.05 --
- Lezioni 41-44 -- Mer 14.12.05 --
- Lezioni 45-48 -- Mer 21.12.06 --
- Lezioni 49-52 -- Mer 11.01.06 --
- Lezioni 53-56 -- Mer 18.01.06 --
- Lezioni 57-60 -- Mer 25.01.06 --
Testo di riferimento
Non viene adottato alcun testo di riferimento particolare. Qualunque
testo introduttivo alla programmazione nel linguaggio Java è adeguato
ai fini del corso. Uno dei migliori testi attualmente in commercio è
il seguente:
- Giovanni Pighizzini e Mauro Ferrari
- DAI FONDAMENTI AGLI OGGETTI - Corso di programmazione Java
- Addison Wesley (2005), ISBN 88-7192-205-6 (Seconda Edizione)
al quale sono associati un CD-ROM (distribuito con il libro) che
(oltre a una copia del Java Development Kit versione 1.5 di Sun
Microsystems per i sistemi operativi Windows e Linux)
"contiene alcune librerie da affiancare a quelle standard di Java,
utilizzate principalmente per gli esempi e per gli esercizi, oltre
al codice sorgente dei principali esempi",
nonché un sito che riporta un
errata corrige
aggiornato.
Nessuno degli argomenti è stato svolto a lezione a un livello di
dettaglio paragonabile a quello del testo. Viceversa, in alcune
lezioni sono stati svolti alcuni argomenti non trattati nel testo,
oppure trattati in maniera meno approfondita. Per questi ultimi, un
utile ausilio didattico sono le slide (vedi sotto) utilizzate dal
docente nel corso di precedenti anni accademici. (Si tenga presente
che non tutto il materiale contenuto in dette slide è stato presentato
a lezione.)
Documentazione online
In alternativa o in aggiunta al testo di cui sopra, può essere utile
consultare il
Java Tutorial
pubblicato nel
sito di Sun Microsystems dedicato a Java.
Per quanto riguarda la libreria Java Sound, è disponibile online la
Java Sound Programmer Guide, di cui ai fini del corso è
rilevante la sola Parte II.
Per una piena comprensione dello standard MIDI, può essere utile consultare la
specifica non ufficiale
contenuta nell'eccellente
sito di Jeff Glatt.
La specifica ufficiale dello standard MIDI è pubblicata (solo a stampa) dalla
MIDI Manufacturers Association.
Slide di Gianfranco Prini
Raccolta completa [versione a.a. 1999-00]
Capitoli separati [versione a.a. 1999-00]
- Copertina
- Introduzione -- Motivazioni, prerequisiti, argomenti
- Capitolo 1 -- Un tuffo nel linguaggio e nell'ambiente
- Capitolo 2 -- Introduzione al linguaggio Java e all'ambiente HotJava
- Capitolo 3 -- Elementi di programmazione object-oriented
- Capitolo 4 -- Linguaggio Java: costrutti di base
- Capitolo 5 -- "La" microapplicazione: come la si scrive in Java [link temporaneamente non disponibile]
- Capitolo 6 -- La gestione delle eccezioni in Java
- Capitolo 7 -- Java: multithreading e programmazione concorrente
- Capitolo 8 -- Le applet di Java e lo strumento appletviewer [link temporaneamente non disponibile]
- Capitolo 9 -- Java: primitive grafiche e programmazione di GUI [link temporaneamente non disponibile]
Esempi di programmazione
- Esempio [link temporaneamente non disponibile]
Gianfranco Prini
(gianfranco.prini@unimi.it)