我正在使用轨道播放我的noteOn / noteOff事件,并且一切都按预期进行,我遇到的问题是我想更改轨道内正在使用的乐器。

我想出了以下代码,该代码旨在使用新乐器在所有MIDI通道上调用“程序更改”命令,我遇到的问题是如何将其应用于音轨,从而使乐器有所不同。

public void LoadInstrument()
{
    for(int i = 0; i < instruments.length; i++)
    {
        if(instruments[i].getName() == "Clean Guitar")
        {
            instrumentToLoad = instruments[i];
        }
    }

    drumPatch = instrumentToLoad.getPatch();
}

我已经看到您可以向Track发送一个PROGRAM_CHANGE事件,以表示乐器正在更改,但是我不确定如何创建对象来保存必要的信息并将其添加到Track中。
非常感谢。

最佳答案

经过更多的挖掘之后,我找到了解决方案:

         try
        {
             ShortMessage instrumentChange = new ShortMessage();

             instrumentChange.setMessage(ShortMessage.PROGRAM_CHANGE, 0, 6,0);

             //MidiEvent instrumentChange = new MidiEvent(ShortMessage.PROGRAM_CHANGE,drumPatch.getBank(),drumPatch.getProgram());
             track.add(new MidiEvent(instrumentChange,0));
        }
        catch(Exception e)
        {
            //Handle
        }

注意:.setMessage方法中的“ 6 ”参数是要演奏的乐器的编号。

关于java - 在轨道播放期间更换乐器-MIDI/Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4771129/

10-10 14:00