Cours nCours n°°44 Synthèse de sons musicaux...

22
Cours n Cours n° 4 Synthèse de sons musicaux Synthèse de sons musicaux Introduction à MIDI Introduction à MIDI

Transcript of Cours nCours n°°44 Synthèse de sons musicaux...

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. La norme MIDI

Année 2008-2009 4M1 – 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