Я пытаюсь написать простую программу с использованием javax.sound.midi, которая читает, редактирует, а затем воспроизводит MIDI-файлы через FluidSynth.Вот фрагмент моего кода:
Synthesizer synth;
// Look through the available midi devices for a software synthesizer
MidiDevice.Info[] deviceInfo = MidiSystem.getMidiDeviceInfo();
for(MidiDevice.Info currentDevice : deviceInfo){
if(currentDevice.getName().matches("FluidSynth virtual port.*"))
synth = (Synthesizer) MidiSystem.getMidiDevice(currentDevice);
}
// If FluidSynth is not found, use default synth
if(synth == null){
synth = MidiSystem.getSynthesizer();
System.out.println("Using default synth");
}
// Do stuff with synth
Код успешно компилируется, но когда я его запускаю, я получаю следующее исключение:
Exception in thread "main" java.lang.ClassCastException: java.desktop/com.sun.media.sound.MidiOutDevice cannot be cast to java.desktop/javax.sound.midi.Synthesizer
at SynthesizerDemo.main(SynthesizerDemo.java:49)
Я ожидал, что класс Synthesizerменя возвращают, и я не понимаю, что такое класс com.sun.media.sound.MidiOutDevice
.Если я переключаю синтезатор на класс MidiDevice
, воспроизведение будет работать, но у меня не будет доступа ко всем методам класса Synthesizer
.Есть идеи о том, что мне не хватает?