Dati MIDI in Java Lezione 19

Slides:



Advertisements
Presentazioni simili
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Advertisements

LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Ese 3 (del 3 Aprile 2003). Testo Progettare la specifica e l’implementazione del tipo di dato astratto modificabile Stack, supponendo che gli elementi.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
Introduzione alle Classi e agli Oggetti in Java 1.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi I PUNTATORI.
Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Collection & Generics in Java
ODMG.
Java: concetti e costrutti base
Package javax.sound.midi
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Terza Lezione → Navigare nel file System → parte 2
Dispositivi MIDI in Java
Trasmettitori e ricevitori
Programmazione a oggetti
Unità didattica 1: Introduzione al linguaggio Java
Organizzazione fisica
I FILES AD ACCESSO SEQUENZIALE
TIPI PRIMITIVI TIPI STRUTTURATI
JAVA usa una rappresentazione in VIRGOLA MOBILE
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Vettori dinamici Definiremo la classe vector.
Programmazione e Laboratorio di Programmazione
Java World Cicli e Array.
OBJECT ORIENTED DATABASE
Corso Java Cicli e Array.
ABAP Objects ALV Grid Mantova, 30 dicembre 2018.
Sommario cos’è un tipo di dato astratto astrazione tramite specifica:
Sistemi informativi statistici
Tipo String String è una classe predefinita
Lettura di input MIDI da Web MIDI API
Standard MIDI File: eventi MTrk
Alberi n-ary Lezioni di C.
APPUNTI SUL LINGUAGGIO C
Web MIDI API - Esempi Lezione 17
Standard MIDI File Lezione 10
Esercitazione su SMF Lezione 12
Eccezioni – Precisazioni e approfondimenti
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Esercizi sulla Web MIDI API
Collegamento di input e output tramite Web MIDI API
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Uno step sequencer Lezione 18
Grafi e problem solving
concetti ed applicazioni
Array e Stringhe Linguaggio C.
Array (vettori) In linguaggio C / C++.
Programmazione e Laboratorio di Programmazione
Ricerca 01/08/2019 package.
Ese 1 (del 31 Marzo 2004).
Programmazione e Laboratorio di Programmazione
Ese 3 (del 3 Aprile 2003).
Programmazione Procedurale
Transcript della presentazione:

Dati MIDI in Java Lezione 19 Programmazione MIDI (Prof. Luca A. Ludovico)

Introduzione Obiettivi conseguiti: Ripasso/acquisizione delle basi sintattiche di Java Rudimenti della programmazione a oggetti Esempi orientati al MIDI (senza usare e usando il package javax.sound.midi) Nuovo obiettivo: comprendere la logica di descrizione di dati e dispositivi MIDI da parte del package Un tutorial completo si trova nella documentazione ufficiale in lingua inglese: http://docs.oracle.com/javase/tutorial/sound/overview-MIDI.html Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

VECTOR Strutture dati dinamiche Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Strutture dati dinamiche I tipi primitivi (int, char, …) e i tipi strutturati (array) visti finora hanno dimensioni predefinite Nel caso degli array, nella dichiarazione è necessario: stabilire il tipo base per gli elementi del vettore stabilire il numero di elementi complessivi Una volta fissati questi aspetti, non possono più essere modificati Esistono invece strutture dati dinamiche, le cui dimensioni possono variare «dinamicamente» a seconda delle esigenze Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

La classe public class Vector<E> La classe Vector<E> implementa un array di dimensioni variabili. Ai suoi elementi si accede tramite indice, come negli array non ridimensionabili Richiede: import java.util.Vector; Costruttori: Vector() Vector(Collection<? extends E> c) costruisce un vettore che contiene gli elementi della collezione specificata, nel loro ordine originario Vector(int initialCapacity) Vector(int initialCapacity, int capacityIncrement) Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Aggiunta, inserimento e ricerca di elementi public boolean add(E e) aggiunge l’elemento e in coda al vettore public E set(int index, E element) rimpiazza l’elemento all’indice specificato con element public E get(int index) public E elementAt(int index) restituiscono l’elemento alla posizione specificata public int indexOf(Object o) public int indexOf(Object o, int index) public int lastIndexOf(Object o) restituiscono l’indice corrispondente rispettivamente alla prima occorrenza, alla prima occorrenza a partire da un dato indice e all’ultima occorrenza dell’oggetto o, oppure -1 se l’oggetto non viene trovato Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Rimozione di elementi public void clear() public void removeAllElements() rimuovono tutti gli elementi del vettore e ne impostano la dimensione a 0 public E remove(int index) public void removeElementAt(int index) rimuovono l’elemento all’indice dato public boolean remove(Object o) public boolean removeElement(Object o) rimuove la prima occorrenza dell’oggetto o protected void removeRange(int fromIndex, int toIndex) rimuove tutti gli elementi il cui indice sta tra fromIndex (incluso) e toIndex (escluso) Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Metodi per il dimensionamento di un Vector public void trimToSize() riduce la capacità del vettore a quella corrente, minimizzando l’occupazione di spazio in memoria public void ensureCapacity(int minCapacity) incrementa se necessario la capacità per supportare il numero minimo di elementi specificato public void setSize(int newSize) imposta le dimensioni del vettore: se superiori a quelle attuali il vettore viene riempito alla fine di elementi null, se inferiori si scartano gli elementi in eccesso public int capacity() restituisce la capacità corrente del vettore (cioè la lunghezza dell’array di dati, indipendentemente dal suo effettivo riempimento) public int size() restituisce il numero di elementi del vettore public boolean isEmpty() verifica se il vettore non abbia elementi Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Size e capacity Istanza di un nuovo Vector size = 0, capacity = 10 Dopo due operazioni di add size = 2, capacity = 10 Dopo un’operazione di trimToSize size = 2, capacity = 2 Ab Ki Ab Ki EsempioVector.java MIDIPitchArray2.java Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Dati midi Rappresentazione dei Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Messaggi MIDI La classe MidiMessage è astratta e fornisce una descrizione “generica” dei messaggi MIDI. Ha tre sottoclassi: ShortMessage (vedi lezione precedente) SysexMessage per i System Exclusive MetaMessage per i metaeventi, ossia eventi generalmente utili per i sequencer ma insignificanti per i sintetizzatori Le tre sottoclassi ereditano da (e rendono concreta) la classe MidiMessage. Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

MetaMessage Costruttori public MetaMessage() public MetaMessage(int type, byte[] data, int length) throws InvalidMidiDataException I contenuti del messaggio si possono impostare anche con il metodo setMessage Parametri: type – il tipo di metamessaggio (deve essere < 128) data – i byte di dati length – il numero di byte nell’array di dati (deve essere non negativo e ≤ data.length) Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Eventi MIDI Gli standard MIDI file contengono eventi temporizzati. La classe MidiEvent rappresenta questo tipo di informazione, cioè un messaggio nella forma in cui sarebbe memorizzato in uno standard MIDI file La classe presenta metodi per impostare e leggere il valore della temporizzazione dell’evento E’ inoltre possibile ottenere il messaggio MIDI “grezzo”, istanza di una delle sottoclassi di MidiMessage Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Sequenze e tracce Negli SMF gli eventi sono disposti in trace. La strutturazione Java prevede le seguenti entità: Sequence Track MidiEvent ove la sequenza (istanza di) Sequence è una collezione di tracce (istanze di) Track, e una traccia è una collezione di eventi (istanze di) MidiEvent. Attenzione: non si tratta di una gerarchia tra classi! Difatti le tre classi ereditano direttamente da java.lang.Object. Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Sequenze, tracce, eventi e messaggi Livello 3 Livello 2 Livello 1 Sequence Track MidiEvent Ogni evento MidiEvent è definito da {ShortMessage | SysExMessage | MetaMessage} + temporizzazione Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Sequenze e tracce Le sequenze, ossia le istanze della classe Sequence, possono essere: lette dai file MIDI create da zero editate aggiungendo o rimuovendo tracce Le tracce rappresentano il livello intermedio della gerarchia a 3 livelli, posizionandosi tra le sequenze che un sequencer può gestire e gli eventi MIDI Analogamente gli eventi MIDI, ossia le istanze della classe MidiEvent, possono essere aggiunti o rimossi dalle tracce di una data sequenza Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Istanziare una sequenza Come si istanzia una sequenza? Costruttori: public Sequence(float divisionType, int resolution) Public Sequence(float divisionType, int resolution, int numTracks) Possibili valori per divisionType, in accordo con SMF: PPQ, SMPTE_24, SMPTE_25, SMPTE_30, SMPTE_30DROP La risoluzione temporale esprime i tick per beat Per conoscere la temporizzazione assoluta, è necessario il BPM (default = 120) Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Istanziare una traccia Come si istanzia una traccia? Track miaTraccia = new Track(); dà errore!!! Non è possibile definirla al di fuori di una sequenza, in quanto questa ne determina la temporizzazione e la risoluzione temporale. E’ dunque necessario invocare il metodo Sequence.createTrack() Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Aggiunta e rimozione di eventi MIDI public class Track extends Object boolean add(MidiEvent event) MidiEvent get(int index) boolean remove(MidiEvent event) int size() restituisce il numero di eventi nella traccia long ticks() restituisce la lunghezza della traccia in MIDI ticks EsempioSequenze.java Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java

Far suonare le sequenze La prossima lezione sarà dedicata alla rappresentazione dei dispositivi MIDI, tra cui sequencer e sintetizzatori Al momento: Sequencer mioSeq = MidiSystem.getSequencer(); mioSeq.open(); mioSeq.setSequence(sequence); mioSeq.start(); … mioSeq.stop(); // da richiamare in risposta a un’azione dell’utente CreateSequence.java Programmazione MIDI (Prof. Luca A. Ludovico) 19. Dati MIDI in Java