У меня проблемы с проигрыванием MIDI-файлов на Java. Я получаю 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, и оно выдало то же исключение.
Это не может быть аппаратная проблема, потому что Eclipse может запустить его без проблем, равно как и проблема с кодированием, потому что это правильно работает на других компьютерах. Даже эта строка кода выдает это исключение:
javax.sound.midi.MidiSystem.getSequencer();
Заранее спасибо.
edit: Моя операционная система - Windows Vista. Прежде чем задавать этот вопрос, я скачал последние версии JRE и JDK (я думаю, что 1.6.0_13).
редактировать: код:
ClassLoader.getSystemClassLoader().loadClass("com.sun.media.sound.RealTimeSequencer");
System.out.println( "Sequencer class loaded" );// Otherwise ClassNotFoundException
выводит «Класс секвенсора загружен».
Но этот код:
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);
}
}
дает мне это:
Microsoft MIDI Mapper
Microsoft GS Wavetable Synth
Real Time Sequencer
Java Sound Synthesizer