Cours nCours n°° 44Synthèse de sons musicauxSynthèse de sons musicaux
Introduction à MIDIIntroduction à MIDI
Sommaire
� 1. La norme MIDI
1.1. Spécifications matérielles1.2. Messages MIDI1.3. Protocole General MIDI
� 2. Java Sound et MIDI
2.1. Package javax.sound.midi2.2. Lecture, visualisation et synthèse d’un fichier MIDI
Année 2008-2009 2M1 – Conception Audio – Marie-José Caraty / David Janiszek
Références bibliographiques
� La norme MIDI� R. Young, La norme MIDI, CampusPress, 2002.� C. Anderton & D.-M. Huber, The Midi Manual: A Practical
Guide to Midi in the Project Studio, Focal Press, 1998.� P. Gilreath, J. Aikin & O. Torres, The Guide to MIDI
Orchestration, Musicworks, 2004.
� Sites� Siteswww.midi.org (site officiel)www.harmony-central.com/MIDI/Doc/doc.html
� Fichiers MIDIwww.midiworld.com www.metronimo.com/fr/midi
� Programmation Javasoundwww.jsresources.org/examples
Année 2008-2009 3M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.1. LA NORME MIDI LA NORME MIDI
HistoriqueHistorique
Musical Instrument Digital Interface
début 1970Utilisation généralisée de nouveaux instruments de musique
analogues électroniques (guitare, piano, …)synthétiseurs (cf. cours 3)
Problématique de contrôle (claviers, molettes, …)Problématique de contrôle (claviers, molettes, …)Gestion de la polyphonie (parallélisme)
1979 Mise en réseau de synthétiseurs 1981 Proposition de l’UMI (Universal Musical Interface) aux USA1983 Adoption de la norme MIDISpécifications matérielles de communicationFormat et spécification des données
+ Format de fichiers MIDI, Banque d’instruments, codes de synchronisation
Année 2008-2009 5M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.1. LA NORME MIDI LA NORME MIDI
Terminologie Terminologie (1/2) (1/2)
SynthétiseurGénérateur de sons musicaux (contrôle de la mélodie, du timbre et du volume), Clavier, panneau de contrôle, banque de sons, mémoire et microprocesseur,Appareil ou carte spécialisée,Au moins une connexion MIDI de type MIDI In
SéquenceurSéquenceurOrganisation et gestion de la suite des pistes MIDI,Appareil ou logiciel,Au moins deux connexions MIDI : une MIDI In, une MIDI Out (e.g., synthétiseur)
Piste Suite ordonnée temporellement d’événement MIDI (note, volume, force d’appui,..)Enregistrement ou paramètre du séquenceur.
Année 2008-2009 6M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.1. LA NORME MIDI LA NORME MIDI
Terminologie Terminologie (2/2) (2/2)
Canal (de transmission)Canal virtuel utilisé pour regrouper l’information dans les transmissions MIDI,16 canaux maximum par cable MIDI,Affectation d’une ou plusieurs pistes MIDI à un canal
Voix (de synthèse)Partie du synthétiseur générant un type de son musical, 16, 20, 24, 32, 64, 128 voix disponibles sur un synthétiseur,Multi-timbre (capacité d’un synthétiseur de jouer simultanément des sons de timbres différents provenant de plusieurs canaux)
Code temporel MIDI (MTC)Message MIDI permettant à certains appareils MIDI de se synchroniser en SMPTE selon une référence temporelle absolue exprimée en heure / minute / seconde / image
Année 2008-2009 7M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.11.1 SPECIFICATIONS MATERIELLES SPECIFICATIONS MATERIELLES
Connections MIDIConnections MIDI
Trois prises DIN (5 broches)
Broche 2 (masse), broche 4 (émission/reception), broche 5 (retour)
Longueur maximale de 15 mètres (répétiteur)
MIDI In: Reception des données MIDI
MIDI Out : Emission des données MIDI
MIDI Thru : Réémission des données de ‘MIDI In’ MIDI Thru : Réémission des données de ‘MIDI In’
Contrôle des synthétiseurs B et C par le synthétise ur A
IN OUT THRU IN OUT THRU IN OUT THRU
A B C
Année 2008-2009 8M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.11.1 SPECIFICATIONS MATERIELLES SPECIFICATIONS MATERIELLES
Transmissions MIDITransmissions MIDI
Liaison série asynchrone monodirectionnelleTrame de 10 bits (start + 8 bits de données + stop),
Durée de 32 microsecondes pour chaque bit,
Débit de 31250 bauds Start bit (toujours 0)
Stop bit (toujours 1)
Données
time
LSB MSB
Données
320 µs
1
0
Startbit
Stopbit1 0 0 1 0 1 1 0
Start bit detecté
48 µs
1 0
32 µs
0
32 µs
1 0 1 1 0
32 µs 32 µs 32 µs 32 µs 32 µs
Transmission de (105)10 = (01101001)2
Année 2008-2009 9M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.21.2 MESSAGES MIDI MESSAGES MIDI
Protocole de communication Protocole de communication
Message MIDI composé d'un octet de statut suivi ou non d'octets de données
Octet de statut (bit de poids fort à 1)
7 messages de canal ()
statut codé par les 3 bits suivants
canal codé par les 4 bits de poids faiblecanal codé par les 4 bits de poids faible
16 messages système (3 bits suivants à 111)
statut codé par les 4 bits de poids faible
Octet de donnée (bit de poids fort à 0)
Hauteur des notes : valeur comprise entre 0 ( Do -2 ) et 127 ( Sol +8 )
Dynamique (vélocité) : valeur comprise entre 1 (pianissimo) et 127 (triple forte)
Actionneur : pédale, roue de modulation, ..
Année 2008-2009 10M1 – Conception Audio – Marie-José Caraty / David Janiszek
voice messages messages de canal
mode messages Messages MIDI common messages
messages système real-time messagesexclusive messages
1.21.2 MESSAGES MIDI MESSAGES MIDI
Classification Classification
Hiérarchie de messages MIDI
exclusive messages
Message de canalReçu et compris par toute unité définie pour ce canal, mais ignoré par les
unités affectées à d'autres canaux.
Message systèmeReçu et compris par toutes les unités connectées, quel que soit le canal
auquel elles sont affectées.
Année 2008-2009 11M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.2.1.1.2.1. MESSAGES DE CANAL MESSAGES DE CANAL
Messages voix Messages voix
Pilotage des voix d'un synthétiseur connecté au can al7 types de messages de voixNote On, Note Off (enfoncement, relâchement de la touche)Trois octets (statut, note, vélocité)Polyphonic Aftertouch (variation de pression sur la touche enfoncée)Trois octets (statut, note, valeur de pression)Control Change (Commande d’actionneur)Control Change (Commande d’actionneur)Trois ou quatre octets (statut, numéro du contrôleur, valeur sur 1 ou 2 octets)Ex. 14 contrôleur continus (molette, position des pédales, leviers, curseurs, …)
5 interrupteurs (pédale douce, pédale legato, …)Program Change (Changement de l’instrument affecté au canal)Deux octets (statut, numéro de l’instrument)Channel Aftertouch (variation de pression sur toutes les touches enfoncées)Deux octets (statut, valeur de pression)Pitch Bend (variation de la hauteur d’un son)Trois octets (statut, position de la molette pitch bend)
Année 2008-2009 12M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.2.11.2.1 MESSAGES DE CANAL MESSAGES DE CANAL
Messages modeMessages mode
Configuration de réception du synthétiseur aux messages de voix7 types de messages de mode (1 octet)All sound off
fermeture de toutes les voix associées au canalReset all controllers
réinitialisation des contrôleursréinitialisation des contrôleursLocal on/off
activation/désactivation du contrôle localcoupure/rétablissement de la liaison entre le clavier et le synthétiseur
All notes off relâchement de toutes les notes associées au canal
Omni on/off canal de réception autorisée/interdit
Poly/mono polyphonie autorisée/interdite
Année 2008-2009 13M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.2.21.2.2 MESSAGES SYSTEMES MESSAGES SYSTEMES
DescriptionDescription
Messages temps-réelMessages de synchronisation (synchronisation entre plusieurs appareils MIDI)
timing clock (top de tempo)
start, stop, continue (synchronisation)
Active sensing
Surveillance d’une liaison MIDISurveillance d’une liaison MIDI
Messages exclusifsMessages exclusifs universels
Time signature, General information, master volume, master balance, …
Messages exclusifs constructeur
Messages communs
Année 2008-2009 14M1 – Conception Audio – Marie-José Caraty / David Janiszek
1.31.3 PROTOCOLE GENERAL MIDI PROTOCOLE GENERAL MIDI
CaractéristiquesCaractéristiques
Protocole de compatibilité entre générateur de son MIDIFichiers MIDI (type 0, 1, 2)
Banque de 128 sons (instruments) référencées,1 piano 7 clavecin 20 orgue22 accordéon 23 harmonica 26 guitare41 violon 47 harpe 57 trompette61 cors 72 clarinette 74 flûte61 cors 72 clarinette 74 flûte82 dent de scie 106 banjo 110 cornemuse
Polyphonie (au moins 24 voix) avec allocation dynamique des voix,
16 canaux MIDI (polyphoniques et multitimbraux) accessibles,
Liste compatible d’actionneurs (Control Change) 1 Modulation (0-127) 7 Volume principal (0-127 par défaut 90)10 Balance stéréo (0=Gauche 64=milieu 127=Droite)91 Réverbération 93 Chorus
Année 2008-2009 15M1 – Conception Audio – Marie-José Caraty / David Janiszek
2. Le package Javax.sound.midi
Année 2008-2009 16M1 – Conception Audio – Marie-José Caraty / David Janiszek
2.12.1 PAQUETAGE JAVAX.SOUND.MIDI PAQUETAGE JAVAX.SOUND.MIDI
Classe MidiSystemClasse MidiSystem (1/2)(1/2)
Interfaces (9) et classes (15) pour lire, écrire, séquenceret synthétiser de la musiqueClasse MidiSystem (point d’entrée du paquetage)
Pas de constructeur, un ensemble de méthodes statiques donnant accès auxressources MIDI de la machine (synthétiseurs, séquenceurs, ports MIDI) et à lagestion des fichiers MIDI et des banques de sons.
Accès aux ressources MIDISequencer getSequencer () Demande d’un séquenceur (virtuel ou externe)Synthesizer getSynthesizer ()Demande d’un synthétiseur (virtuel ou externe)Receiver getReceiver () Demande d’une ligne de communication MIDI Ind’un synthétiseur (virtuel ou externe sur un port)Transmitter getTransmitter () Demande d’une ligne de communication MIDI Outd’un séquenceur (virtuel ou externe sur un port)
Année 2008-2009 17M1 – Conception Audio – Marie-José Caraty / David Janiszek
2.12.1 PAQUETAGE JAVAX.SOUND.MIDI PAQUETAGE JAVAX.SOUND.MIDI
Classe MidiSystemClasse MidiSystem (2/2)(2/2)
Caractéristiques, lecture et écriture d’un fichier MIDIstatic MidiFileFormat getMidiFileFormat (File file)
Format fichier MIDI d’un fichierstatic MidiFileFormat getMidiFileFormat (InputStream stream)
Format fichier MIDI d’un flot d’entréestatic MidiFileFormat getMidiFileFormat (URL url)
Format fichier MIDI d’une URLFormat fichier MIDI d’une URLstatic Sequence getSequence (File file)
Lecture d’une séquence MIDI à partir d’un fichierstatic Sequence getSequence (InputStream stream)
Lecture d’une séquence MIDI à partir d’un flot d’entréestatic Sequence getSequence (URL url)
Lecture d’une séquence MIDI à partir d’une URLstatic int write (Sequence in, int type, File out)
Ecriture d’une séquence MIDI dans un fichier static int write (Sequence in, int fileType, OutputStream out)
Ecriture d’une séquence MIDI dans un flot de sortieAnnée 2008-2009 18M1 – Conception Audio – Marie-José Caraty / David Janiszek
2.12.1 PAQUETAGE JAVAX.SOUND.MIDI PAQUETAGE JAVAX.SOUND.MIDI
Classe SequenceClasse Sequence
Sequence d’événements MIDI (partition de musique)Deux constructeursSequence Sequence Sequence Sequence (float divisionType, int resolution)Sequence Sequence Sequence Sequence (float divisionType, int resolution, int numTracks)divisionType (tempo généralement PPQ - pulse par quarter note) resolution (échelle de temps en pulse)numTracks (nombre de pistes)numTracks (nombre de pistes)
Track createTrack () Création d’une nouvelle piste vide
long getMicrosecondLength () Durée de la séquence en microsecondes
Patch [] getPatchList () Liste des instruments utilisés de la séquence
Track[] getTracks () Liste des pistes de la séquence
Année 2008-2009 19M1 – Conception Audio – Marie-José Caraty / David Janiszek
2.12.1 PAQUETAGE JAVAX.SOUND.MIDI PAQUETAGE JAVAX.SOUND.MIDI
Classe ShortMessageClasse ShortMessage
Message MIDI (canal et système)Un constructeur vide,void setMessage (int status) Message MIDI sans donnéevoid setMessage (int status, int data1, int data2)
Message MIDI multicanal avec un ou deux octets de donnéevoid setMessage (int command, int channel, int data1, int data2)
Message MIDI canal avec un ou deux octets de donnéeMessage MIDI canal avec un ou deux octets de donnéeint getChannel () Canal associé au message MIDIint getCommand () Commande associée au message MIDI int getData1 () 1er octet de donnéeint getData2 () 2ème octet de donnée
// Message MIDI de la note 60 de vélocité 50 enfoncée sur l’instrument du canal 0ShortMessage message = new ShortMessage ();try { message.setMessage (ShortMessage.NOTE_ON, 0, 60, 50);} catch (InvalidMidiDataException e)
Année 2008-2009 20M1 – Conception Audio – Marie-José Caraty / David Janiszek
2.12.1 PAQUETAGE JAVAX.SOUND.MIDI PAQUETAGE JAVAX.SOUND.MIDI
Classe MidiEventClasse MidiEvent
Evénement MIDI (message MIDI + temps d’émission)Un constructeurMidiEvent (MidiMessage message, long tempsE)
tempsE temps d’émission du message en pulseMidiMessage getMessage() Message associé à l’événementlong getTick() Temps d’émission du messagevoid setTick(long tempsE) Modification du temps d’émission du messagevoid setTick(long tempsE) Modification du temps d’émission du message
Ajout de l’événement à une piste de séquenceSequence sequence = null;try { sequence = new Sequence (Sequence.PPQ, 1); } catch (InvalidMidiDataException e)Track track = sequence.createTrack ();MidiEvent event = new MidiEvent (message, tempsE);track.add (message);
Année 2008-2009 21M1 – Conception Audio – Marie-José Caraty / David Janiszek
2.22.2 PAQUETAGE JAVAX.SOUND.MIDI PAQUETAGE JAVAX.SOUND.MIDI
Envoi d’une séquence au synthétiseurEnvoi d’une séquence au synthétiseur
public static void Play(Sequence partition) {
Sequencer seq = null; try { seq = MidiSystem.getSequencer (); seq.open(); } catch (MidiUnavailableException e) {}try { seq.setSequence (partition); }catch (InvalidMidiDataException e) {}
Synthesizer synth = null; try { synth = MidiSystem.getSynthesizer (); synth.open (); }catch (MidiUnavailableException e) {}
try { Receiver synthR = synth.getReceiver (); Transmitter seqT = seq.getTransmitter (); seqT.setReceiver (synthR); }catch (MidiUnavailableException e) {}
seq.start ();}
Année 2008-2009 22M1 – Conception Audio – Marie-José Caraty / David Janiszek
Top Related