音源の音色の選択をMIDIで行う

MIDIで音源の音色設定を行うにはプログラムチェンジメッセージを使用します。
プログラムチェンジはコントロールチェンジとはまた別のメッセージで、音色を選択するための専用のメッセージとなっています。

プログラムチェンジは0~127の数値で音色を設定します。
それ以上の情報は持たないので、単純に128種類までの音色選択ができます。

しかし音源によってはそれ以上の音色を持っているのでプログラムチェンジだけでは対応できません。
その場合はコントロールチェンジと組み合わせることでより多くの音色に対応します。
(プログラムチェンジのみでは選択できない音色を拡張音色などと言います)

拡張音色の選択を行うコントロールチェンジは「CC0」と「CC32」が使用されます。
これらはバンクセレクトと呼ばれ、ふたつセットでひとつの設定を行います。
これらも128通りのデータを持ちますので、128×128×128通りの音色の選択が可能となります。

具体的にどちらにどういう値を送って音色選択するかは音源によって異なりますので、音源のマニュアルを参照してください。
マニュアルがない場合はひとつずつ値を変えて送信してみて確認してください。

音色選択
メッセージ 設定値 説明
CC0 0~127 バンクセレクトMSB
CC32 0~127 バンクセレクトLSB
PC 0~127
(ソフトによっては1~128と表示される)
プログラムチェンジ

この三つのメッセージは、上記の表の順番でMIDI音源に送信する必要があります。
音源によっては同時送信でも正しく処理できますが、可能ならば数Tickずつずらして確実に順番通りに処理されるようにしてください。
バンクセレクトとプログラムチェンジ

バンクセレクトは拡張音色を選択するためのものですので、GMの基本音色を選択するだけならばバンクセレクトの送信は必要ありません。

最近のDTM音源はソフトシンセ(ソフトウェアMIDI音源)が主流となっており、ソフトシンセにはこういったMIDIメッセージによる音色変更に対応していないものもあります。

GM音源の楽器の種類とプログラムチェンジ番号はGM音源の楽器知識で紹介しています。
Wikipediaにはもっと細かく番号が書かれていますので、参考にしてください。
General MIDI - Wikipedia