Aller au contenu

Program change

Un livre de Wikilivres.

Le program change est un message MIDI permettant de déclencher un changement de son et d'une façon plus générale, de mémoire[1].

Format et type

[modifier | modifier le wikicode]
  • Format : 1100cccc (CcH) 0ppppppp
    • cccc = numéro de canal
    • ppppppp = numéro de programme
  • Type : channel voice message


Initialement, le message de program change a été développé pour contrôler les changements de sons d'un synthétiseur. Petit à petit, il s'est appliqué à tous les instruments MIDI dotés de mémoires. Dans la terminologie MIDI, le numéro de programme (0ppppppp) désigne l'emplacement d'une case mémoire (un patch, un programme, une performance, un timbre, un preset...) regroupant l'ensemble des paramètres de l'une des fonctions d'une unité MIDI. Le nombre maximal de cases adressables est donc 128 (0 à 127). Par exemple, à réception d'un message de changement de programme, un synthétiseur commutera sur le son correspondant. À l'inverse, en sélectionnant manuellement un numéro de son sur ce synthétiseur, ce même message sera éventuellement transmis à la prise MIDI-out. La plupart des appareils MIDI reçoivent et transmettent les program changes (processeurs d'effets, patchs, consoles de mixage, etc.).

Le comportement à réception

[modifier | modifier le wikicode]

À la réception d'un message de program change, tous les générateurs de son ne réagissent pas de façon identique. Certains coupent l'ensemble des voies correspondant aux notes en cours de jeu, sur le canal correspondant, d'autres y assignent immédiatement le nouveau son (parfois, des bruits indésirables apparaissent lors de la transition), d'autres encore, avant de sélectionner ce nouveau son, attendent que toutes les notes en cours de jeu au moment de la réception du program change soient relâchées, d'autres enfin, assignent aux nouvelles notes le nouveau son, tandis que les notes en cours de jeu au moment de la réception du program change, continuent à produire l'ancien.

Les différents systèmes de numérotation en vigueur

[modifier | modifier le wikicode]

Si les numéros de changement de programme vont de 0 à 127, tous les constructeurs ne numérotent pas les mémoires de leurs appareils de manière identique. Certains partent de 0, d'autres de 1, d'autres encore utilisent la base 8. C'est en particulier le cas de Roland, qui classe les mémoires de la plupart de ses produits à raison de 8 par bank. La première mémoire (0 en MIDI) porte le numéro 11 (mémoire 1 de la bank 1), la huitième le numéro 18 (mémoire 8 de la bank 1), la neuvième le numéro 21 (mémoire 1 de la bank 2), etc.

La mémorisation

[modifier | modifier le wikicode]

À la mise hors tension, certains appareils MIDI conservent en mémoire le dernier numéro de patch sélectionné. D'autres l'initialisent à l'allumage avec le premier numéro de mémoire (0, 1, 11, ...).

Les tables de réassignation

[modifier | modifier le wikicode]

Bon nombre d'instruments comportent des tables de réassignation réservées à l'interprétation en réception des messages de program change. Il s'agit d'une réaffectation du numéro de changement de programme entrant à un tout autre numéro de mémoire. Ainsi, nous pourrions décider qu'à réception du message de changement de programme n° 4 (1100cccc 00000011) le générateur de son commute non pas sur le son 4, mais sur le son 22. Voici deux cas qui sollicitent ce procédé :

Imaginons que l'on utilise à la suite, et pour trois morceaux distincts, les sons 12, 67 et 5. En affectant le program change 0 au son 12, le program change 1 au son 67 et le program change 2 au son 5, nous passerons aisément de l'un à l'autre par l'intermédiaire d'une pédale d'incrémentation des numéros de programmes (accessoire destiné à déclencher l'envoi d'un message de changement de programme à chaque appui sur la pédale, et y ajoutant une unité chaque fois).

Imaginons également que l'on désire piloter deux expandeurs d'un même clavier et d'un même canal MIDI, tantôt sur les sons 16 (expandeur 1) et 27 (expandeur 2), tantôt sur les sons 2 (expandeur 1) et 122 (expandeur 2). Nous réglerons sur l'expandeur 2 la réaffectation du program change 16 au son 27, et du program change 2 au son 122. Il suffira alors de sélectionner alternativement, à partir d'un clavier maître, soit le son 16, soit le son 2 pour que les deux générateurs commutent respectivement, soit sur les sons 16 et 27, soit sur les sons 2 et 122.

Plus de 128 programmes

[modifier | modifier le wikicode]

Un problème se pose pour les instruments dont le nombre d'emplacements mémoire dépasse 128. En effet, comment appeler le son 129 via MIDI, puisque le message de program change correspondant n'existe pas. La première solution consiste à utiliser le principe de la table de réassignation, en affectant, dans notre exemple, le son 129 à un numéro de changement de programme X, compris entre 0 et 127. Revers de la médaille, ce fameux numéro de changement de programme ne pourra plus servir à appeler le son n° X.

Une autre solution fait appel à une couche de stockage intermédiaire, constituée de 128 emplacements réagissant aux messages de program change. Chaque emplacement de cette couche virtuelle a pour fonction d'appeler l'un des sons de l'appareil (situé par exemple au-dessus de 128). En fait, ce principe est identique à celui de la table de réaffectation. Roland l'utilise notamment dans des synthétiseurs comme les D10, D20, etc.

Une troisième solution se base sur le principe de banques regroupant chacune 128 sons. Le passage d'une banque à l'autre s'effectue en y affectant un quelconque message MIDI (control change, system exclusive...) précédant l'envoi d'un message de program change. C'est exactement la philosophie adoptée par le message bank select.

Moins de 128 programmes

[modifier | modifier le wikicode]

Certains instruments possèdent moins de 128 mémoires (par exemple 32 pour le Yamaha DX7, numérotés de 1 à 32). Pour un instrument à X mémoires (avec X < 128), les messages de changement de programme X + 1 à 127 pourront soit être ignorés, soit resélectionner l'emplacement correspondant au reste de la division du numéro de programme par le nombre de mémoires. Le DX7 procède ainsi, ce qui donne :


Tableau
Program change Numéro de mémoire

0

1

1

2

..

..

31

32

32

1

33

2

..

..

63

32

64

1

65

2

..

..

95

32

96

1

97

2

..

..

127

32

En mode multitimbral

[modifier | modifier le wikicode]

Le cas d'un instrument MIDI multitimbral est un peu plus complexe, puisqu'un même type de message correspond selon les cas à deux utilisations bien distinctes. En effet, le changement de programme sert soit à changer le numéro du son de l'un des générateurs (l'une des voies de multitimbralité) sur son propre canal, soit à modifier en totalité la configuration (le son de chaque générateur) sur le canal global.

Program change et autochargement

[modifier | modifier le wikicode]

Pour en finir avec les program changes, notons que, sur certains échantillonneurs, la réception d'un message de changement de programme commande le chargement en mémoire vive (RAM) du contenu de l'emplacement correspondant d'une mémoire de masse (échantillon, programme, volume...). Cette fonction (auto load) est particulièrement adaptée aux performances scéniques.

Quelques exemples de numérotation des messages de changement de programme

[modifier | modifier le wikicode]
Tableau
Décimal (0-127) Décimal (1-128) Hexadécimal Octal 1 Octal 2 Octal 3 Base 12

0

1

00H

A11

I11

INT A1

INT A1

1

2

01H

A12

I12

INT A2

INT A2

2

3

02H

A13

I13

INT A3

INT A3

3

4

03H

A14

I14

INT A4

INT A4

4

5

04H

A15

I15

INT A5

INT A5

5

6

05H

A16

I16

INT A6

INT A6

6

7

06H

A17

I17

INT A7

INT A7

7

8

07H

A18

I18

INT A8

INT A8

8

9

08H

A21

I21

INT B1

INT A9

9

10

09H

A22

I22

INT B2

INT A10

10

11

0AH

A23

I23

INT B3

INT A11

11

12

0BH

A24

I24

INT B4

INT A12

12

13

0CH

A25

I25

INT B5

INT B1

13

14

0DH

A26

I26

INT B6

INT B2

14

15

0EH

A27

I27

INT B7

INT B3

15

16

0FH

A28

I28

INT B8

INT B4

16

17

10H

A31

I31

INT C1

INT B5

17

18

11H

A32

I32

INT C2

INT B6

18

19

12H

A33

I33

INT C3

INT B7

19

20

13H

A34

I34

INT C4

INT B8

20

21

14H

A35

I35

INT C5

INT B9

21

22

15H

A36

I36

INT C6

INT B10

22

23

16H

A37

I37

INT C7

INT B11

23

24

17H

A38

I38

INT C8

INT B12

24

25

18H

A41

I41

INT D1

INT C1

25

26

19H

A42

I42

INT D2

INT C2

26

27

1AH

A43

I43

INT D3

INT C3

27

28

1BH

A44

I44

INT D4

INT C4

28

29

1CH

A45

I45

INT D5

INT C5

29

30

1DH

A46

I46

INT D6

INT C6

30

31

1EH

A47

I47

INT D7

INT C7

31

32

1FH

A48

I48

INT D8

INT C8

32

33

20H

A51

I51

INT E1

INT C9

33

34

21H

A52

I52

INT E2

INT C10

34

35

22H

A53

I53

INT E3

INT C11

35

36

23H

A54

I54

INT E4

INT C12

36

37

24H

A55

I55

INT E5

INT D1

37

38

25H

A56

I56

INT E6

INT D2

38

39

26H

A57

I57

INT E7

INT D3

39

40

27H

A58

I58

INT E8

INT D4

40

41

28H

A61

I61

INT F1

INT D5

41

42

29H

A62

I62

INT F2

INT D6

42

43

2AH

A63

I63

INT F3

INT D7

43

44

2BH

A64

I64

INT F4

INT D8

44

45

2CH

A65

I65

INT F5

INT D9

45

46

2DH

A66

I66

INT F6

INT D10

46

47

2EH

A67

I67

INT F7

INT D11

47

48

2FH

A68

I68

INT F8

INT D12

48

49

30H

A71

I71

INT G1

EXT A1

49

50

31H

A72

I72

INT G2

EXT A2

50

51

32H

A73

I73

INT G3

EXT A3

51

52

33H

A74

I74

INT G4

EXT A4

52

53

34H

A75

I75

INT G5

EXT A5

53

54

35H

A76

I76

INT G6

EXT A6

54

55

36H

A77

I77

INT G7

EXT A7

55

56

37H

A78

I78

INT G8

EXT A8

56

57

38H

A81

I81

INT H1

EXT A9

57

58

39H

A82

I82

INT H2

EXT A10

58

59

3AH

A83

I83

INT H3

EXT A11

59

60

3BH

A84

I84

INT H4

EXT A12

60

61

3CH

A85

I85

INT H5

EXT B1

61

62

3DH

A86

I86

INT H6

EXT B2

62

63

3EH

A87

I87

INT H7

EXT B3

63

64

3FH

A88

I88

INT H8

EXT B4

64

65

40H

B11

C11

CRT A1

EXT B5

65

66

41H

B12

C12

CRT A2

EXT B6

66

67

42H

B13

C13

CRT A3

EXT B7

67

68

43H

B14

C14

CRT A4

EXT B8

68

69

44H

B15

C15

CRT A5

EXT B9

69

70

45H

B16

C16

CRT A6

EXT B10

70

71

46H

B17

C17

CRT A7

EXT B11

71

72

47H

B18

C18

CRT A8

EXT B12

72

73

48H

B21

C21

CRT B1

EXT C1

73

74

49H

B22

C22

CRT B2

EXT C2

74

75

4AH

B23

C23

CRT B3

EXT C3

75

76

4BH

B24

C24

CRT B4

EXT C4

76

77

4CH

B25

C25

CRT B5

EXT C5

77

78

4DH

B26

C26

CRT B6

EXT C6

78

79

4EH

B27

C27

CRT B7

EXT C7

79

80

4FH

B28

C28

CRT B8

EXT C8

80

81

50H

B31

C31

CRT C1

EXT C9

81

82

51H

B32

C32

CRT C2

EXT C10

82

83

52H

B33

C33

CRT C3

EXT C11

83

84

53H

B34

C34

CRT C4

EXT C12

84

85

54H

B35

C35

CRT C5

EXT D1

85

86

55H

B36

C36

CRT C6

EXT D2

86

87

56H

B37

C37

CRT C7

EXT D3

87

88

57H

B38

C38

CRT C8

EXT D4

88

89

58H

B41

C41

CRT D1

EXT D5

89

90

59H

B42

C42

CRT D2

EXT D6

90

91

5AH

B43

C43

CRT D3

EXT D7

91

92

5BH

B44

C44

CRT D4

EXT D8

92

93

5CH

B45

C45

CRT D5

EXT D9

93

94

5DH

B46

C46

CRT D6

EXT D10

94

95

5EH

B47

C47

CRT D7

EXT D11

95

96

5FH

B48

C48

CRT D8

EXT D12

96

97

60H

B51

C51

CRT E1

97

98

61H

B52

C52

CRT E2

98

99

62H

B53

C53

CRT E3

99

100

63H

B54

C54

CRT E4

100

101

64H

B55

C55

CRT E5

101

102

65H

B56

C56

CRT E6

102

103

66H

B57

C57

CRT E7

103

104

67H

B58

C58

CRT E8

104

105

68H

B61

C61

CRT F1

105

106

69H

B62

C62

CRT F2

106

107

6AH

B63

C63

CRT F3

107

108

6BH

B64

C64

CRT F4

108

109

6CH

B65

C65

CRT F5

109

110

6DH

B66

C66

CRT F6

110

111

6EH

B67

C67

CRT F7

111

112

6FH

B68

C68

CRT F8

112

113

70H

B71

C71

CRT G1

113

114

71H

B72

C72

CRT G2

114

115

72H

B73

C73

CRT G3

115

116

73H

B74

C74

CRT G4

116

117

74H

B75

C75

CRT G5

117

118

75H

B76

C76

CRT G6

118

119

76H

B77

C77

CRT G7

119

120

77H

B78

C78

CRT G8

120

121

78H

B81

C81

CRT H1

121

122

79H

B82

C82

CRT H2

122

123

7AH

B83

C83

CRT H3

123

124

7BH

B84

C84

CRT H4

124

125

7CH

B85

C85

CRT H5

125

126

7DH

B86

C86

CRT H6

126

127

7EH

B87

C87

CRT H7

127

128

7FH

B88

C88

CRT H8

Le premier procédé est, entre autres, utilisé par Korg (série M et T) ou Oberheim (Matrix 6), qui numérotent leurs sons de 00 à 99. Le deuxième est en vigueur sur la majorité des appareils MIDI, le troisième n'est quasiment pas employé, le quatrième (et ses variantes) a principalement cours chez Roland (D10/20/110, D50, MKS-70...) et le cinquième chez Kawai (K5)[2].

  1. anglais Liste des messages MIDI sur le site officiel MIDI Manufacturers Association
  2. Christian Braut, Norme MIDI. Livre d'or, t. I, Sybex, (ISBN 2-7361-1400-0), p. Chapitre IV