我正在构建一个Java应用程序,该程序以编程方式生成MIDI序列,然后通过LoopBe Internal Midi Port发送该序列,以便可以使用Ableton Live乐器获得更好的声音播放质量。

如果我错了,请纠正我。我需要生成一个Sequence,其中将包含Tracks,其中将包含MidiEvents,其中将包含具有时间信息的MIDI messages。我觉得我很沮丧。

真正的问题是如何通过LoopBe MIDI端口发送它。为此,我原本需要一个Sequencer,但是我不知道如何获得一个而不是默认的,我也不想要。

我想一种解决方法是将Sequence写入.mid文件,然后以编程方式在LoopBe端口上播放它。

所以我的问题是:如何获得非默认的音序器?

最佳答案

您需要方法MidiSystem.getSequencer(boolean)。当您使用false参数调用它时,它将为您提供未连接的音序器。

从目标MIDI设备获取Receiver实例,并通过seq.getTransmitter().setReceiver(rec)调用将其设置为音序器。

示例片段:

MIDIDevice device = ... // obtain the MIDIDevice instance
Sequencer seq = MidiSystem.getSequencer(false);
Receiver rec = device.getReceiver();
seq.getTransmitter().setReceiver(rec)


有关使用Sequencer的示例,请参见http://docs.oracle.com/javase/tutorial/sound/MIDI-seq-methods.html上的教程。

07-24 09:32