1

javax.sound.midi.我一直在尝试使用该软件包在软合成器上演奏超过 1 种乐器。在合成器可用的 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?这是可能的,还是有完全不同的方法来演奏多种乐器?

非常感谢任何见解。谢谢。

4

0 回答 0