我似乎无法关闭Java中音序器的默认输出。在将消息发送到另一个端口时,我总是得到标准的MIDI声音。

寻找我的港口

Sequencer sequencer = MidiSystem.getSequencer();

MidiDevice.Info[] midiDeviceInfos = MidiSystem.getMidiDeviceInfo();

// 1 is the port I want
MidiDevice midiOutDevice = MidiSystem.getMidiDevice(midiDeviceInfos[1]);

Receiver midiOutReceiver = midiOutDevice.getReceiver();
sequencer.getTransmitter().setReceiver(midiOutReceiver);


这会导致MIDI不可用异常:MIDI IN接收器不可用。

除非我将其更改为(这将为我提供所需的端口),但仍然是默认的MIDI:

Receiver midiOutReceiver = MidiSystem.getReceiver();
sequencer.getTransmitter().setReceiver(midiOutReceiver);


无法删除任何发送器或接收器

sequencer.getTransmitters().remove(INT)
sequencer.getReceivers().remove(INT)


现在,无论我做什么,我总是听到音序器的默认MIDI输出(这给了我一个编译错误)

如何在没有Java音序器的标准端口的情况下将MIDI仅发送到1个端口?

最佳答案

最后找到了一种避免音序器对象具有默认连接的方法。您可以选择不传递任何参数来选择默认音序器。但是,如果使用getSequencer方法传递布尔值,则可以选择!

Sequencer seq = MidiSystem.getSequencer(false);

10-04 13:03