我在用 Java 播放 MIDI 文件时遇到了一些问题。MidiUnavailableException (MIDI OUT transmitter not available)
当我尝试玩它时,我得到的是一个。我的代码是标准的:
try {
midiseq = MidiSystem.getSequencer();
midiseq.open();
midiseq.setSequence(MidiSystem.getSequence(sound1));
midiseq.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
midiseq.start();
} catch (Exception e) {e.printStackTrace();}
midiseq
是一个Sequencer
;sound1
是一个InputStream
。
此代码适用于其他几台计算机,甚至适用于 Eclipse 以及在 JAR 文件中使用时,只是在我从命令提示符启动它时不起作用。我下载了一个更稳定的 Java midi 应用程序,它抛出了同样的异常。
它不可能是硬件问题,因为 Eclipse 可以毫无问题地运行它,也不可能是编码问题,因为它可以在其他计算机上正常运行。甚至这一行代码也会抛出这个异常:
javax.sound.midi.MidiSystem.getSequencer();
提前致谢。
编辑:我的操作系统是 Windows Vista。在我问这个问题之前,我已经下载了最新的 JRE 和 JDK(我认为是 1.6.0_13)。
编辑:代码:
ClassLoader.getSystemClassLoader().loadClass("com.sun.media.sound.RealTimeSequencer");
System.out.println( "Sequencer class loaded" );// Otherwise ClassNotFoundException
打印“Sequencer 类已加载。”
但是这段代码:
try{
System.out.println(javax.sound.midi.MidiSystem.getSequencer());
System.exit(0);
} catch(Exception e) {
throw new RuntimeException(e);
}
System.exit(1);
抛出MidiUnavailableException.
另外,这段代码:
MidiDevice.Info[] devices = MidiSystem.getMidiDeviceInfo();
if (devices.length == 0) {
System.out.println("No MIDI devices found");
} else {
for (MidiDevice.Info dev : devices) {
System.out.println(dev);
}
}
给了我这个:
微软 MIDI 映射器 Microsoft GS 波表合成器 实时音序器 Java 声音合成器