我正在构建一个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上的教程。