Package javax.sound.midi

Slides:



Advertisements
Presentazioni simili
Interfacce Java.
Advertisements

LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Derivazione tra classi
Lezione XII Laboratorio di Programmazione. Eccezioni Per la gestione di operazioni che possono non andare a buon fine il C++ mette a disposizione un sistema.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
Dispositivi MIDI in Java
Collection & Generics in Java
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
RIEPILOGO Transistor JFET
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Programmazione in Java Parte II Lezione 5 Dott. Marco Faella.
.  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.
Introduzione alla programmazione MIDI
© 2007 SEI-Società Editrice Internazionale, Apogeo
I/O redirection AND PIPES
Java: concetti e costrutti base
EasyGraph Dynamic web-based dashboard
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
Microcontrollori e microprocessori
I2c.
Trasmettitori e ricevitori
Sicurezza informatica
Web MIDI API - Esempi Lezione 24
Programmazione a oggetti
Unità didattica 1: Introduzione al linguaggio Java
Job Application Monitoring (JAM)
Dati MIDI in Java Lezione 19
I FILES AD ACCESSO SEQUENZIALE
AusTel by taha.a.
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
Studente : Andrea Cassarà Classe: 5AII A.S. 2014/2015 Link Sito
Introduzione L’8254 è un interval timer event/counter, progettato per risolvere i problemi del controllo del timing, comuni ad ogni microcomputer. E’ costituito.
ABAP Objects ALV Grid Mantova, 30 dicembre 2018.
Messaggi Control Change
Programmazione e Laboratorio di Programmazione
Ricorsione 16/01/2019 package.
Programmazione e Laboratorio di Programmazione
Lettura di input MIDI da Web MIDI API
Standard MIDI File: eventi MTrk
Messaggi System Exclusive
Messaggi Channel Mode Lezione 5
File System ed Input/Output
Web MIDI API - Esempi Lezione 17
Messaggi System Common e System Real Time
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
UNIT 12 INTERFACCIA SERIALE.
Interfacce in Java Superare il meccanismo dell’ereditarietà singola
Unità 1 Programmi base.
FIL LING Lezioni
UML Diagramma statico di una classe
Array e Stringhe Linguaggio C.
Ese 1 (del 31 Marzo 2004).
Programmazione e Laboratorio di Programmazione
Ese 3 (del 3 Aprile 2003).
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

Package javax.sound.midi Lezione 18 Package javax.sound.midi Programmazione MIDI (Prof. Luca A. Ludovico)

Classi astratte Si definisce classe astratta una classe che definisce una interfaccia senza implementarla completamente. Ciò serve come base di partenza per generare una o più classi specializzate aventi tutte la stessa interfaccia di base. La classe astratta da sola non può essere istanziata, viene progettata soltanto per svolgere la funzione di classe base da cui le classi derivate possono ereditare. Le caratteristiche "incomplete" della classe astratta vengono condivise da un gruppo di sotto-classi figlie, che vi aggiungono caratteristiche diverse, in modo da colmare le "lacune" della classe base astratta. Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Classi astratte Le classi astratte possono essere considerate come super-classi che contengono metodi astratti, progettate in modo che le sotto-classi che ereditano da esse ne "estenderanno" le funzionalità implementandone i metodi. Il comportamento definito da queste classi è "generico" e la maggior parte dei costrutti della classe sono indefiniti e non implementati. Prima che una classe derivata da una classe astratta possa essere istanziata essa ne deve implementare tutti i metodi astratti. Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Classi astratte Una classe qualsiasi, che abbia almeno un metodo definito abstract e quindi non implementato, diventa a sua volta astratta I costruttori vanno necessariamente implementati nelle classi figlie In Java, una classe astratta si crea così: abstract class Pippo { … } Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

javax.sound.midi Package Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Introduzione Il package javax.sound.midi mette a disposizione interfacce e classi per l’I/O, il sequencing e la sintesi di dati MIDI. Si include tramite la riga import javax.sound.midi.*; Link alla documentazione ufficiale: http://docs.oracle.com/javase/7/docs/api/javax/sound/midi/package-summary.html Attenzione: si fa sempre riferimento a Java SE Development Kit 7. Nel JDK 6, il package MIDI presenta delle differenze sostanziali. http://docs.oracle.com/javase/6/docs/api/javax/sound/midi/package-summary.html Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Descrizione del package Class Description Instrument An instrument is a sound-synthesis algorithm with certain parameter settings, usually designed to emulate a specific real-world musical instrument or to achieve a specific sort of sound effect. MetaMessage A MetaMessage is a MidiMessage that is not meaningful to synthesizers, but that can be stored in a MIDI file and interpreted by a sequencer program. MidiDevice.Info A MidiDevice.Info object contains assorted data about a MidiDevice, including its name, the company who created it, and descriptive text. MidiEvent MIDI events contain a MIDI message and a corresponding time-stamp expressed in ticks, and can represent the MIDI event information stored in a MIDI file or a Sequence object. MidiFileFormat A MidiFileFormat object encapsulates a MIDI file's type, as well as its length and timing information. MidiMessage MidiMessage is the base class for MIDI messages. MidiSystem The MidiSystem class provides access to the installed MIDI system resources, including devices such as synthesizers, sequencers, and MIDI input and output ports. Patch A Patch object represents a location, on a MIDI synthesizer, into which a single instrument is stored (loaded). Sequence A Sequence is a data structure containing musical information (often an entire song or composition) that can be played back by a Sequencer object. Sequencer.SyncMode A SyncMode object represents one of the ways in which a MIDI sequencer's notion of time can be synchronized with a master or slave device. ShortMessage A ShortMessage contains a MIDI message that has at most two data bytes following its status byte. SoundbankResource A SoundbankResource represents any audio resource stored in a Soundbank. SysexMessage A SysexMessage object represents a MIDI system exclusive message. Track A MIDI track is an independent stream of MIDI events (time-stamped MIDI data) that can be stored along with other tracks in a standard MIDI file. VoiceStatus A VoiceStatus object contains information about the current status of one of the voices produced by a Synthesizer. Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

public abstract class MidiMessage MidiMessage è la classe base per i messaggi MIDI messaggi MIDI gestibili da un sintetizzatore meta-eventi (lyrics, copyrights, tempo, ecc.) La classe permette di accedere sostanzialmente a 3 tipi di informazione sui messaggi MIDI: status byte dimensione totale del messaggio (status byte e data byte) array di byte contenente il messaggio MIDI completo I metodi forniti permettono di leggere tali info, per accedere in scrittura si usano sottoclassi Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Notazione esadecimale Byte in JAVA e in MIDI Lo standard MIDI esprime i dati in byte. Però il tipo byte in Java adotta la codifica con segno, quindi la libreria esprime i dati MIDI come Integer Come convertire un byte b MIDI in un intero i Java: int i = (int)(b & 0xFF) Se si vuole passare un valore noto di byte MIDI come parametro intero di un metodo, può essere espresso direttamente come intero in base 10 o 16 Esempio: passare lo status byte di Active sensing [11111110]2 in ingresso al metodo setMessage(int)  setMessage(254) oppure setMessage(0xFE) Notazione esadecimale Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Costruttore e Attributi della classe MidiMessage protected MidiMessage(byte[] data) costruisce un nuovo MidiMessage Attenzione: è una classe astratta, non si possono istanziare direttamente oggetti MidiMessage Attributi protected byte[] data i dati del messaggio MIDI protected int length il numedo di byte che costituisce il messaggio MIDI Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Metodi della classe MidiMessage abstract Object clone() crea un nuovo oggetto della stessa classe e con gli stessi contenuti di quello corrente int getLength() restituisce la lunghezza totale in byte del messaggio byte[] getMessage() restituisce i dati del messaggio MIDI int getStatus() restituisce il solo status byte del messaggio MIDI protected void setMessage(byte[] data, int length) imposta i dati del messaggio MIDI Inoltre, la classe eredita i metodi della classe Object, tra cui equals, getClass, e toString Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Class ShortMessage La classe MidiMessage è dichiarata astratta: public abstract class MidiMessage La classe ShortMessage eredita da MidiMessage e la rende concreta: public class ShortMessage extends MidiMessage Uno ShortMessage contiene un messaggio MIDI con al più due byte di dati che seguono il byte di stato Rientrano channel voice, channel mode, system common, e system real-time Non rientrano system exclusive e meta-eventi La classe fornisce metodi per leggere e scrivere i contenuti di tali messaggi Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Class ShortMessage Molti dei metodi della classe presentano parametri interi con cui si specifica lo status e i data byte MIDI Conoscendo tali valori, si possono esprimere direttamente In alternativa: per i messaggi di sistema, si possono usare direttamente gli attributi della classe per i messaggi di canale, i 4 bit superiori (comando) si possono esprimere tramite gli attributi della classe e quelli inferiori tramite un ulteriore valore intero Vedi elenco completo più avanti Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Costruttori della classe ShortMessage protected ShortMessage(byte[] data) ShortMessage(int status) non presenta data byte ShortMessage(int status, int data1, int data2) presenta al più 2 data byte ShortMessage(int command, int channel, int data1, int data2) permette di specificare il canale per i messaggi di canale Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Attributi (aggiuntivi) della classe ShortMessage static int ACTIVE_SENSING 0xFE, o 254 static int CHANNEL_PRESSURE 0xD0, o 208 static int CONTINUE 0xFB, o 251 static int CONTROL_CHANGE 0xB0, o 176 static int END_OF_EXCLUSIVE 0xF7, o 247 static int MIDI_TIME_CODE 0xF1, o 241 static int NOTE_OFF 0x80, o 128 static int NOTE_ON 0x90, o 144 static int PITCH_BEND 0xE0, o 224 static int POLY_PRESSURE 0xA0, o 160 static int PROGRAM_CHANGE 0xC0, o 192 static int SONG_POSITION_POINTER 0xF2, o 242 static int SONG_SELECT 0xF3, o 243 static int START 0xFA, o 250 static int STOP 0xFC, o 252 static int SYSTEM_RESET 0xFF, o 255 static int TIMING_CLOCK 0xF8, o 248 static int TUNE_REQUEST 0xF6, o 246 Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Metodi (aggiuntivi) della classe ShortMessage EsempioMidiMessage.java Object clone() int getChannel() int getCommand() int getData1() int getData2() protected int getDataLength(int status) restituisce il numero di data byte associati a un particolare status byte void setMessage(int status) imposta lo status byte di un messaggio MIDI privo di data byte void setMessage(int status, int data1, int data2) void setMessage(int command, int channel, int data1, int data2) Metodi ereditati da MidiMessage: getLength, getMessage, getStatus, setMessage Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Eccezioni Ereditano dalle classi java.lang.Object java.lang.Throwable java.lang.Exception InvalidMidiDataException Viene sollevata quando si incontrano dati MIDI non appropriati MidiUnavailableException Viene lanciata quando un componente MIDI richiesto non può essere aperto o creato in quanto non disponibile In Java è possibile istanziare oggetti della classe Exception (o classi figlie) e sollevare manualmente con il comando throw Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi

Gestione delle eccezioni MIDI Il package Java dedicato al MIDI costringe il programmatore a “proteggere” le parti di codice relative al MIDI tramite blocchi try … catch Nel caso in cui appaiano istruzioni al di fuori del try, a compile-time si segnala il messaggio di errore: “unreported exception InvalidMidiDataException; must be caught or declared to be thrown” e dunque il codice non viene compilato EsempioEccezioni.java Programmazione MIDI (Prof. Luca A. Ludovico) 18. Package javax.sound.midi