Я не могу изменить инструмент с помощью метода javax.sound.midi.ShortMessage.setMessage (). Канал 0-15 - пианино, за исключением 9, который предназначен для барабана. Но 8-15 должно быть Chromati c Percussion. Когда я устанавливаю канал на 16 или более (диапазон от 0 до 127), я получаю javax.sound.midi.InvalidMidiDataException: канал вне диапазона: 16. Пожалуйста, Как я могу это исправить?
import javax.sound.midi.*;
public class TestMidi{
public void play(){
try{
Sequencer player = MidiSystem.getSequencer();
System.out.println("Sequencer created succesfully.");
player.open();
Sequence s = new Sequence(Sequence.PPQ, 4);
Track track = s.createTrack();
addShortMessage(track,1,192,1,102,0);
addShortMessage(track,1,144,1,44,100);
addShortMessage(track,16,128,1,44,100);
player.setSequence(s);
player.start();
} catch(Exception e){
System.out.println("Fail.");
e.printStackTrace();
}
}
public static void main(String[] args) {
TestMidi tm = new TestMidi();
tm.play();
}
void addShortMessage(Track track, long tick, int command, int channel, int data1, int data2) throws Exception {
ShortMessage msg = new ShortMessage(command, channel, data1, data2);
MidiEvent event = new MidiEvent(msg, tick);
track.add(event);
}
}