在java中同时播放软合成器上的多个乐器

时间:2017-05-27 12:13:28

标签: java midi javasound java-audio

我一直在尝试使用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?这是可能的,还是有一种不同的方法来演奏多种乐器?

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

0 个答案:

没有答案