Un message de type NoteOn est envoyé au moment où on appuie sur la touche d'un clavier. Tant que cette touche est maintenue enfoncée, il ne se passe rien du tout (le message NoteOn est parti une fois, et n'est pas répété). Un message de type NoteOff est émis quand on relâche la touche qui était enfoncée. Ces deux types de message NoteOn et NoteOff comportent chacune 3 octets. Ces trois octets comportent les informations suivantes :

  • Type de message (première moitié de l'octet #1, bits 7..4)
  • Numéro de canal MIDI (seconde moitié de l'octet #1, bits 3..0)
  • Numéro de note jouée (octet #2)
  • Force de frappe / vélocité (octet #3)

Le premier octet est un octet de statut, et les deux suivants sont des octets de donnée.


Numéro de canal MIDI

On peut disposer de 16 canaux MIDI sur une même liaison MIDI, pour faire jouer 16 sons d'instruments musicaux différents, par exemple. Les canaux MIDI sont numérotés de 1 à 16, et leur nombre informatique correspondant est compris entre 0 et 15. Cela signifie que la réception d'un code canal 10 correspond en fait au canal MIDI numéro 11. Toujours ce décalage infernal de une unité entre nombres traités en informatique (qui commencent par 0) et nombres traités par les gens normaux (qui commencent par 1). Tout comme l'information de type de message, le numéro de canal n'occupe que 4 bits. 

$x0 = canal MIDI numéro 1
$x1 = canal MIDI numéro 2
...
$xE = canal MIDI numéro 15
$xF = canal MIDI numéro 16

Et c'est ainsi qu'eut lieu le mariage entre type de message (4 bits) et numéro de canal (4 bits), tous deux ne formant plus qu'un seul octet (8 bits) :

$90 = NoteOn (9) sur canal MIDI numéro 1 (0)
$93 = NoteOn (9) sur canal MIDI numéro 4 (3)
$80 = NoteOff (8) sur canal MIDI numéro 1 (0)
$8F = NoteOff (8) sur canal MIDI numéro 16 (F)

Numéro de note

A chaque note à faire jouer par l'instrument de musique (do, ré, mi, etc) correspond un nombre compris entre 0 et 127. Au fameux LA3 (diapason ou tonalité du téléphone) correspond ainsi le nombre décimal 69 ($45 en héxa). A chaque fois qu'on veut descendre d'un demi-ton, on retranche 1 à cette valeur. Et à chaque fois qu'on veut monter d'un demi-ton, on ajoute 1 à cette valeur. Exemples :

DO-2 = 0d = $00
....
SOL3 = 67d = $43
SOL#3 = 68d = $44
LA3 = 69d = $45
LA#3 = 70d = $46
SI3 = 71d = $47
...
SOL8 = 127d = $7F

Tableau récapitulatif (valeur des notes en décimal, de 0 à 127) :

Octave
( -1 à 9
ou 0 à 10)

Do

Do#

Re

Re#

Mi

Fa

Fa#

Sol

Sol#

La

La#

Si

C

C#

D

D#

E

F

F#

G

G#

A

A#

B

-1 (ou 0)

0

1

2

3

4

5

6

7

8

9

10

11

0 (ou 1)

12

13

14

15

16

17

18

19

20

21

22

23

1 (ou 2)

24

25

26

27

28

29

30

31

32

33

34

35

2 (ou 3)

36

37

38

39

40

41

42

43

44

45

46

47

3 (ou 4)

48

49

50

51

52

53

54

55

56

57

58

59

4 (ou 5)

60

61

62

63

64

65

66

67

68

69

70

71

5 (ou 6)

72

73

74

75

76

77

78

79

80

81

82

83

6 (ou 7)

84

85

86

87

88

89

90

91

92

93

94

95

7 (ou 8)

96

97

98

99

100

101

102

103

104

105

106

107

8 (ou 9)

108

109

110

111

112

113

114

115

116

117

118

119

9 (ou 10)

120

121

122

123

124

125

126

127

-

-

-

-


Force de frappe / Vélocité

La force de frappe est liée à la vélocité de la frappe de la touche : plus on tape fort et plus ça frappe vite. La vélocité est représentée par un nombre compris entre 1 (ppp / pianissimo, force de frappe minimale) et 127 (fff / fortissimo, force de frappe maximale). La valeur $40 (64 en décimal) est donnée comme valeur centrale par défaut (mp-mf / mezzo-forte). Cette information est bien sûr parlante pour un instrument de musique dynamique, qui sait faire entendre une différence sonore (autre que le volume) selon la force de frappe sur ses touches (attention aux sons d'orgue, qui généralement ne sont pas assujetis aux variations de vélocité).

Remarque : l'arrêt d'une note peut être commandée par la réception d'un message de type NoteOff, ou par la réception d'un message de type NoteOn associé à une vélocité de 0 (zéro). La valeur 0 ne doit donc pas être utilisée pour une info de type NoteOn si on veut jouer la note.

Quelques exemples de NoteOn et NoteOff

En résumé, 4 informations différentes sont transmises dans 3 octets :

[1sssnnnn] [0xxxxxxx] [0xxxxxxx]
 Statut     Donnée 1   Donnée 2

sss = type de message (001 pour Note On et 000 pour NoteOff)
nnnn = numéro de canal MIDI (compris entre 0 et 15)
xxxxxxx = valeur des données (compris entre 0 et 127)
Donnée 1 = hauteur de la note (69d pour le LA3, un exemple entre autres)
Donnée 2 = vélocité de la note (comprise entre 0 et 127, généralement $40 - soit 64 en décimal - pour un clavier non dynamique)

Exemple 1 : Démarrage note LA3 avec vélocité de $64 (100 en décimal)

[10010000] [01000101] [01100100]
 $90        $45        $64
 Statut     Donnée 1   Donnée 2
 NoteOn     LA3        100

Exemple 2 : Démarrage note DO1 avec vélocité de $75 (117 en décimal)

[10010000] [00100100] [01110101]
 $90        $24        $75
 Statut     Donnée 1   Donnée 2
 NoteOn     DO1        117

Exemple 3 : Arrêt note LA3 

[10000000] [01000101] [00000000]
 $80        $45        $00
 Statut     Donnée 1   Donnée 2
 NoteOff    LA3        0

Pour ce troisième exemple, une information de type NoteOn avec vélocité de 0 est aussi interprété en tant que NoteOff.



Source : https://www.sonelec-musique.com/electronique_theorie_midi_norme.html

















Créé avec HelpNDoc Personal Edition: Générateur gratuit de livres électroniques et documentation