我正在使用轨道播放我的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/