[英]Changing instrument during Track playback - MIDI/Java
我正在使用軌道來播放我的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 ”參數是要播放的樂器編號。
我的猜測是drumPatch.getBank()
和drumPatch.getProgram()
會將當前頻道的相同節目應用到當前正在播放的頻道。 您應該將新的bank和程序編號傳遞給LoadInstrument()
方法,並將其傳遞給program change參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.