簡體   English   中英

在音軌播放期間更改樂器 - MIDI / Java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM