MidiSystem.getSequencer()非常慢

use*_*416 7 java midi

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

Sequencer sequencer = MidiSystem.getSequencer();
Run Code Online (Sandbox Code Playgroud)

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

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

Ric*_*son 1

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

为了测试这个理论,尝试使用

Sequencer 音序器 = MidiSystem.getSequencer(false);

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

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

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

该文本几乎是 javadoc 中的逐字记录,但正如您所看到的,有足够多的尝试创建连接,从而使调用有点慢。