7

据我所知,我正在创建一个 MIDI 音序器并初始化音序器,我需要使用:

Sequencer sequencer = MidiSystem.getSequencer();

但这会导致我的程序在这个方法调用中启动非常非常慢,最多 2 分钟!

任何想法如何解决这一问题?谢谢

4

1 回答 1

1

查看 MidiSystem.getSequencer() 的代码,如果前一个失败,它看起来会尝试连接各种尝试连接下一个的东西。这意味着,如果所有连接尝试都失败到最后一次,则可能需要很长时间。

要测试这个理论,请尝试使用

定序器定序器 = MidiSystem.getSequencer(false);

并查看该行是否执行得更快,如果是,则问题是连接到默认合成器所花费的时间。

当调用 getSequencer() 时,一系列事件是

  1. 获取连接到默认设备的默认 Sequencer
  2. 返回的 Sequencer 连接到默认的 Synthesizer...
  3. 如果没有可用的合成器或无法打开默认值,则连接到默认接收器。通过从 Sequencer 获取 Transmitter 实例并将其设置为 Receiver 来建立连接。

该文本几乎是 javadoc 中的逐字记录,但正如您所见,尝试创建连接的次数足以使调用速度有点慢。

于 2013-02-21T10:12:36.037 回答