Игра на нескольких инструментах на мягком синтезаторе одновременно в Java
Я пытался играть более 1 инструмента на мягком синтезаторе, используя javax.sound.midi.
пакет. Среди 16 каналов, доступных в синтезаторе, я попытался использовать два из них таким образом.
try {
// Locating the default synthesizer
Synthesizer synth = MidiSystem.getSynthesizer();
// Opening the synthesizer
synth.open();
// Geting the available Midi channels
MidiChannel channels[] = synth.getChannels();
// Geting the synth's soundbank where all the sounds are stored
Soundbank bank = synth.getDefaultSoundbank();
// Loading all the available instruments
synth.loadAllInstruments(bank);
// Geting a list of the available instruments
Instrument instrs[] = synth.getLoadedInstruments();
Instrument shanai = null;
Instrument flute = null;
// Looping through the instruments
for (int i=0; i < instrs.length; i++)
{
if (instrs[i].getName().equals("Shanai"))
{
shanai = instrs[i];
}
else if(instrs[i].getName().equals("Flute"))
{
flute=instrs[i];
}
}
// patch containing the soundbank and program number
Patch shanaiPatch = shanai.getPatch();
Patch flutePatch = flute.getPatch();
channels[0].programChange(shanaiPatch.getBank(),
shanaiPatch.getProgram());
channels[1].programChange(flutePatch.getBank(),
flutePatch.getProgram());
channels[0].noteOn(32, 127);
channels[1].noteOn(32, 127);
Thread.sleep(1500);
channels[0].noteOff(32);
channels[1].noteOff(32);
}
Проблема здесь в том, что этот код играет на инструменте только на канале 2, а не на канале 1. Возможно, потому что функция ожидания работает после второго noteOn()
сообщение. Тогда вопрос в том, как запустить две записки одновременно? Возможно ли это или есть другой подход к игре на нескольких инструментах?
Любое понимание очень ценится. Благодарю.