2. Notation musicale
Manière la plus satisfaisante de transmettre de la musique: écoute.
Plus compliqué : présence de l’interprète nécessaire.
Notation musicale: transmettre une oeuvre pour qu’elle puisse être
jouée/interprétée.
Langage d’écriture musicale évolué, largement reconnu sur le plan
international.
Répertoire immense disponible sous cette forme dans les librairies
musicales.
Possibilité d’écrire votre musique de manière à la faire jouer par d’autres.
Partition : une ou plusieurs pages sur lesquelles la musique est écrite.
Son – p.2/49
3. Formats musicaux
Au lieu de se placer au niveau de l’onde sonore :
pression acoustique en fonction du temps
niveau musical : évènements musicaux (partition)
notes
durée des notes
Format principal : MIDI (Musical Instrument Digital Interface)
Son – p.3/49
4. Bibliographie (1/2)
documents officiels:
International MIDI Association, 5316 West 57th Street, Los Angeles, CA 90056, USA
International MIDI Association (IMA)
MIDI 1.0 Detailed Specification
Los Angeles, 1988.
International MIDI Association (IMA)
General MIDI System
Los Angeles, 1991.
MIDI Manufacturers Association (MMA)
The Complete MIDI 1.0 Detailed Specification – Standard MIDI Files 1.1
1996.
documents en ligne:
http://www.midi.org (officiels)
http://www.borg.com/~jglatt/tech/midispec/table.htm
http://www.harmony-central.com/MIDI
très nombreux livres sur le sujet...
Son – p.4/49
5. Bibliographie (2/2)
quelques critiques:
F. Richard Moore
The Dysfunctions of MIDI
Proceedings of the International Computer Music Conference
Computer Music Association, San Francisco, 1987;
Computer Music Journal
12(1):19–28, Spring 1988.
C. Muir et K. McMillen
What’s Missing in MIDI?
Guitar Player, June 1986.
...
A. Roberts
Devices for Increasing the Number of MIDI Channels
Computer Music Journal
16(4):101–104, Winter 1992.
Son – p.5/49
6. Qu’est-ce que MIDI?
MIDI: Musical Instrument Digital Interface
(marque déposée par la MMA: MIDI Manufacturers Association)
protocole de communication entre instruments numériques
événements musicaux (gestes de l’instrumentiste)
pas de flux audio-numérique (absence de son)
pas une véritable norme, mais un standard de marché
Son – p.6/49
7. Historique
origine: 1983, NAMM (North American Music Manufacturers) Show à Los Angeles
(liaison de 2 synthétiseurs de marques différentes pour qu’un instrumentiste puisse
jouer le même son avec des timbres différents depuis un unique clavier)
années 80,
première moitié: définition du protocole MIDI;
seconde moitié:
publication du standard,
premières critiques;
années 90,
première moitié: améliorations,
mais sans toucher au standard original,
seconde moitié: grosses critiques;
depuis: pas de gros changements...
→ astuces ingénieuses, mais sans réelle remise en question
Son – p.7/49
8. Caractéristiques techniques
liaison série (type RS 232)
vitesse de transmission: 31250 bauds
31250 bits par seconde
un message MIDI usuel:
3 octets (1 commande, 2 arguments)
un octet → 8 bits de données + 2 bits start / stop (série)
⇒ un message MIDI transmis en (3×10)/31250 ≤ 1 ms
protocole asynchrone, unidirectionnel
fonctionnement maître / esclave
Son – p.8/49
14. Exemples de réseaux MIDI (3/3)
chaîne
I O T
I O T
I O T I O T I O T
I O T I O T I O T
I O T
I O T
maître / esclave
boucle
Son – p.14/49
15. Messages normaux (de voix / canal)
channel message: 1xxx cccc
1000cccc 0kkkkkkk 0ppppppp: note off (touche k, vélocité p)
1001cccc 0kkkkkkk 0ppppppp: note on (touche k, vélocité p – note OFF si p = 0)
1010cccc 0kkkkkkk 0ppppppp: after touch (touche k, pression p)
1011cccc 0ppppppp 0vvvvvvv: control change (valeur v affectée au paramètre p)
1100cccc 0nnnnnnn : program change (numéro n)
1101cccc 0ppppppp : channel pressure (pression p)
1110cccc 0vvvvvvv 0vvvvvvv: pitch wheel (valeur v [14 bits, little-endian])
0v6v5v4v3v2v1v0 0v13v12v11v10v9v8v7
Son – p.15/49
16. Notes et notations
notations des 7 notes de la gamme:
français la si do ré mi fa sol
anglo-saxon A B C D E F G
(touches blanches du piano)
plus les dièses (#),
au nombre de 5 dans la gamme chromatique
(touches noires du piano)
une octave = 12 demi-tons
(7 + 5 notes)
Son – p.16/49
20. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00
0x90 = 10010000 = note on canal 0 → prend 2 arguments:
1. numéro de touche: 0x3C = 60 → do
2. vélocité: 0x5F = 95 → forte
Son – p.20/49
21. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00
do joué
0x80 = 10000000 = note off canal 0
Son – p.21/49
22. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00
do joué
0x80 = 10000000 = note off canal 0 → prend 2 arguments:
1. numéro de touche: 0x3C = 60 → do
2. vélocité: 0x00 = 0 → non spécifiée
Son – p.22/49
23. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00
do joué, puis relâché
ensuite:
ré joué, puis relâché
mi joué, puis relâché
do joué, puis relâché∗
∗ (astuce: note on avec vélocité 0 ⇒ note off)
Son – p.23/49
24. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00
do joué, puis relâché
ré joué, puis relâché
mi joué, puis relâché
do joué, puis relâché
active sensing → ne prend pas de paramètre
Son – p.24/49
25. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00
do joué, puis relâché
ré joué, puis relâché
mi joué, puis relâché
do joué, puis relâché
octet de donnée, alors qu’on attend une commande !
Son – p.25/49
26. État courant: “running status”
pour économiser l’octet de commande,
le dernier octet de commande est mémorisé
(à l’exception des messages système temps-réel,
qui ne prennent pas de paramètres),
si un octet de donnée est trouvé alors qu’un octet de commande était
attendu, alors le “running status” est utilisé pour la commande.
Dans le cas de l’exemple: running status = 0x90
Son – p.26/49
27. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00
do joué, puis relâché
ré joué, puis relâché
mi joué, puis relâché
do joué, puis relâché
note on (ré, vélocité 127)
Son – p.27/49
28. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00
do joué, puis relâché
ré joué, puis relâché
mi joué, puis relâché
do joué, puis relâché
ré joué
note off (ré, vélocité non spécifiée)
Son – p.28/49
29. Un exemple...
en hexadécimal:
0x90 0x3C 0x5F 0x80 0x3C 0x00 0x90 0x3E 0x64 0x80 0x3E
0x00 0x90 0x40 0x63 0x80 0x40 0x00 0x90 0x3C 0x47 0x90
0x3C 0x00 0xFE 0x3E 0x7F 0x3E 0x00 interprétation:
do joué, puis relâché
ré joué, puis relâché
mi joué, puis relâché
do joué, puis relâché
ré joué, puis relâché
début d’une comptine connue. . .
Son – p.29/49
30. Extension General MIDI (GM)
publiée en 1991 (cf. bibliographie)
normalise:
les numéros des instruments,
les numéros des contrôleurs,
les identifiants des constructeurs.
Remarque: General Standard (GS)
est une extension non standard!
(décision unilatérale d’un constructeur dissident. . . )
Son – p.30/49
31. Instruments
0 acoustic piano 1 brite piano 2 synth piano 3 honky
4 electric piano 1 5 electric piano 2 6 harpischord 7 clavinet
8 celeste 9 glockenspiel 10 music box 11 vibes
12 marimba 13 xylophone 14 tubebell 15 santur
16 home organ 17 percussive organ 18 rock organ 19 church
20 reed organ 21 accordion 22 harmonica 23 concertna
24 nylon guitar 25 acoustic guitar 26 jazz guitar 27 clean guitar
28 mute guitar 29 odd guitar 30 distorted guitar 31 guitar harm
112 carillon 113 agogo 114 steel drum 115 wood block
116 taiko 117 toms 118 synth tom 119 reverse cymbal
120 fx-fret 121 fx-blow 122 seashore 123 jungle
124 telephone 125 helicopter 126 applause 127 pistol
⇒ un canal (numéro 10) reservé à la batterie (drums)
Son – p.31/49
32. Format de fichiers MIDI (Standard MIDI Files)
Différent des formats de fichiers son type WAV
1min = 10 Mo (WAV) = 1 Mo (MP3)
Taille importante : limites pour des communications temps-réel entre
instruments ou entre utilisateurs.
Au lieu de se placer au niveau du son (microscopique), au niveau de la
musique (macroscopique).
format musical: pas la musique elle-même, mais uniquement une
description des actions des musiciens
Son – p.32/49
33. Ecoute de fichiers MIDI
Pas d’écoute directe d’un fichier MIDI
Besoin d’un synthétiseur
interprétation des ordres d’un fichier musical
exemple: un synthétiseur génère une onde correspondant à un do de
violon.
la qualité du synthétiseur influence la qualité du son produit.
Synthétiseur MIDI souvent inclus dans la carte son
Son – p.33/49
34. Lecture de fichiers MIDI
Sous Linux, le programme timidity a
timidity -h
générer un fichier son (wav) à partir d’un fichier MIDI, il suffit
d’employer l’option -Ow:
timidity -Ow fichier.mid
a
http://timidity.sourceforge.net/
Son – p.34/49
35. Format MIDI: intérêt
Les fichiers MIDI sont très souvent employés sur internet.
jouer et transmettre de la musique (site web)
contrôler un instrument (claviers MIDI, instruments MIDI, . . . )
représenter un morceau (partition)
Son – p.35/49
36. Format MIDI: avantages
très léger, quelques k-octets pour plusieurs minutes de musique, idéal pour
Internet.
réutilisable et modifiable : chaque note étant clairement identifiée, elle
peut être modifiée facilement.
aucune dégradation lors de la transmission.
Son – p.36/49
37. Format MIDI: inconvénients
Réinterprétation du morceau
Interprétation propre à chaque synthétiseur
Qualité dépend du synthétiseur
Qualité très moyenne
bien moins bonne qu’un mp3. . .
Son – p.37/49
38. Fichiers MIDI (Standard MIDI Files)
3 formats:
format 0: piste unique pouvant contenir plusieurs canaux
format 1: plusieurs pistes à jouer simultanément
format 2: plusieurs pistes à jouer séquentiellement
structure commune:
un en-tête (header) MTHd
des pistes (tracks) MTrk
Remarque: même principe de base que le format IFF,
avec des entiers stockés également en big-endian.
Son – p.38/49
39. MThd: en-tête
MThd (4 octets)
taille (32 bits)
format (16 bits)
nombre de pistes (16 bits)
(+ “master track” pour les formats > 0)
division (16 bits)
en tops par temps (noire = quart de ronde)
Exemple:
tempo de 125 temps par minute
division de 96 tops par temps
⇒ durée du top d’horloge: 60 / (125 * 96) = 5 ms
Son – p.39/49
40. MTrk: piste
MTrk (4 octets)
taille (32 bits)
suite d’événements datés: date status data ...data
Date stockée relativement à la précédente, représentation VLQ (Variable-Length Quantity):
la représentation binaire est découpée en blocs de 7 bits
tous les blocs sont placés dans des octets dont le bit de poids fort est positionné à 1,
sauf pour le dernier bloc (pour marquer la fin).
Exemples:
codage de la valeur 50:
codage binaire: 00110010
soit en hexadécimal: 0x32
codage de la valeur 32768:
codage binaire (blocs de 8 bits): 10000000 00000000
codage binaire (blocs de 7 bits): 0000010 0000000 0000000
rajout des bits de poids fort: 10000010 10000000 00000000
soit en hexadécimal: 0x82 0x80 0x00
décodage de la représentation: 0x81 0x02
codage binaire: 10000001 00000010
retrait des bits de poids fort: (000000)10000010
valeur décimale: 27 +21 = 128 + 2 = 130 Son – p.40/49
41. Les méta-événements
meta event: 0xFF
séquence complète: 0xFF code taille donnée···donnée
| {z }
taille octets
principaux codes (et nombre d’octets de données):
0x00 sequence number (2)
0x01 text event (*)
0x02 copyright notice (*)
0x03 sequence / track name (*)
0x04 instrument name (*)
0x05 lyric (*)
0x06 marker (*)
0x07 cue point (*)
...
0x20 MIDI channel prefix (1)
0x2F end of track (0)
0x51 set tempo (3)
0x54 SMPTE offset (5)
0x58 time signature (4)
0x59 key signature (2)
0x7F sequencer specific (*)
Son – p.41/49