我一直在尝试使用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()
消息之后。然后问题是如何同时运行两个noteOns?这是可能的,还是有一种不同的方法来演奏多种乐器?
非常感谢任何见解。 感谢。