Quando foi criado o padrão MIDI, através da MIDI Specification 1.0 (1983), não só foram definidas as características elétricas da transmissão de informações entre equipamentos, como também foram estabelecidos os códigos digitais para diversas mensagens de comando a serem transferidas de um instrumento para outro, como a execução de notas, por exemplo. Dentre essas mensagens, há uma categoria que engloba todos os tipos de controles, como ajuste de volume e de pan, posição do pedal de sustain, ajuste de tempo do portamento, de intensidade de efeitos, etc, e essas mensagens são chamadas de control change messages, ou mensagens de alteração de controle.
Como são diversos os comandos de control change, o assunto foi dividido em uma série de artigos, iniciando com este que trata de tópicos genéricos sobre os controles e detalha o Bank Select.
Considerações Iniciais
Os comandos de control change se subdividem em dois subgrupos: controles contínuos (cujo valor pode variar gradualmente) e controles liga/desliga (que atuam como chaves de dois estados).Todas as mensagens de control change contêm identificação de canal, para que possam ser dirigidas ao instrumento desejado, que está configurado para receber no mesmo canal em que a mensagem está sendo transmitida.Quando o músico move algum dos dispositivos de controle de seu instrumento (pedal de volume, alavanca de modulation, etc), são transmitidas mensagens correspondentes de control change, que contêm três códigos, compondo o seguinte formato:
O primeiro código identifica que a mensagem MIDI é de control change, e também informa qual o número do canal de MIDI em que ela está sendo transmitida; o segundo código identifica qual o controle (volume, pan, etc) que se está ajustando; o terceiro código indica qual o valor do ajuste a ser feito naquele controle.
Exemplo: Ao se pressionar o pedal de sustain de um instrumento que está transmitindo pelo canal MIDI nº1, é enviada a seguinte mensagem (através de MIDI OUT), contendo três códigos, aqui representados em hexadecimal:
No primeiro código, o valor B (que em decimal vale 11) identifica que o comando é de control change, e o valor 0 identifica que o comando está sendo transmitido pelo canal nº1; no segundo código, o valor 40 (que em decimal vale 64) identifica o número do controle (no caso, é o pedal de sustain); e finalmente no terceiro código, o valor 7F (que em decimal vale 127) indica que o pedal de sustain foi pressionado (onde valor 0=solto, e 127=pressionado).
Observe que o valor de canal 0 corresponde ao canal MIDI nº1, pois os 16 canais são codificados por números de 0 a 15:
| em hexadecimal | em decimal | canal MIDI |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 4 | 5 |
| 5 | 5 | 6 |
| 6 | 6 | 7 |
| 7 | 7 | 8 |
| 8 | 8 | 9 |
| 9 | 9 | 10 |
| A | 10 | 11 |
| B | 11 | 12 |
| C | 12 | 13 |
| D | 13 | 14 |
| E | 14 | 15 |
| F | 15 | 16 |
A especificação original estabeleceu 121 números para comandos de control change, mas alguns até hoje ainda não têm função definida, e continuam vagos para aplicações futuras, para o caso de novos dispositivos de controle que venham a ser implementados.

Antes porém, é preciso esclarecer um aspecto importante a respeito da definição destas mensagens. Como com o grupo de três códigos só podemos ajustar os controles para valores dentro da faixa de 0 a 127 (veja exemplo anterior sobre o pedal de sustain), e como em alguns casos é necessário uma faixa maior de valores, criaram-se mensagens complementares, que são usadas quando se requer ajustes mais minuciosos (em mais do que 128 passos). Dessa forma, estabeleceu-se que quando um comando de control change necessita de uma precisão maior do que 128 valores, então é transmitida uma mensagem complementar, que pode indicar valores intermediários a cada um dos 128 valores originais. Os 128 valores originais são chamados de parte mais significativa (em inglês, most significant byte - MSB), enquanto os demais 128 valores intermediários são chamados de parte menos significativa (em inglês. least significant byte - LSB). Veja pela ilustração da Fig.1 que os valores MSB servem para ajustar controles que não necessitam de muita precisão. Caso seja necessária uma precisão maior, então usa-se um byte LSB para indicar o valor exato, com mais 128 níveis intermediários.
O valor MSB é o que é transmitido normalmente na maioria dos comandos de control change. Quando se precisa enviar também o LSB, então é transmitida uma mensagem complementar, cujo número de control change é igual ao número daquele controle somado de 32. Por exemplo, no caso do controle de volume (controle nº 7), quando apenas 128 níveis são adequados, então basta enviar uma mensagem de control change 7, com o valor desejado (de 0 a 127). Entretanto, caso se deseje ajustá-lo com mais precisão, então é necessário enviar também uma mensagem de control change nº 39, com o valor LSB (de 0 a 127).
Importante: O ajuste só será preciso se o equipamento receptor tiver capacidade de efetuá-lo, caso contrário, ele ajustará dentro da precisão dele (descartando o LSB).
Condições para transmissão e recepção de control change
Veja a descrição detalhada de alguns comandos MIDI de control change nos tópicos abaixo:
Os controles MIDI de numeros 64 a 69 atuam como chaves do tipo liga/desliga, possuindo apenas dois estados (On e Off). Eles podem ser implementados sob a forma de pedal (como o de sustain), ou mesmo uma chave ou tecla no painel do instrumento, com duas posições. Estes controles só utilizam uma parte de mensagem, que é o MSB, não possuindo o complemento LSB (parte baixa).
Há ainda uma outra categoria de controles que, embora ainda usada em poucos equipamentos, tem grande potencial de uso. Eles são usados para controlar funções ou recursos dos instrumentos não cobertos pelos controles usuais (modulation, volume, pan, etc), e são designados como controles RPN e NRPN.