Из вашего поста я предполагаю, что вы уже написали код, который считывает события из файла MIDI и выводит их на устройство в режиме реального времени. Таким образом, чтобы изменить звук, вам нужно событие смены MIDI-программы. Вы можете найти список звуков GM здесь (обратите внимание, что GS является надмножеством GM) и определения событий MIDI здесь .
Если вы хотите изменить программу на канале 1 на гитару с искажениями, вам нужно вывести байты (в шестнадцатеричном формате):
C0 1E
'C' - это префикс для событий смены программы, 0 относится к каналу 1 (обратите внимание, что мы обычно ссылаемся на миди-каналы 1-16, но события MIDI считают номер канала от нуля). И 1E - это программа 31 (опять же, они обычно выражаются как 1-128, но события midi считаются с нуля).