# Program change

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.

## Format et type

* Format : 1100cccc (CcH) 0ppppppp
** cccc = numéro de canal
** ppppppp = numéro de programme
* Type : channel voice message

## Définition

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

À 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

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

À 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

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

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

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

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

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

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).

## Références

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