gpt4 book ai didi

java - MidiSystem.getMidiDevice(...) 返回意外的类

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:38 25 4
gpt4 key购买 nike

我正在尝试使用 javax.sound.midi 编写一个简单的程序,该程序读取、编辑然后通过 FluidSynth 播放 midi 文件。这是我的代码片段:

  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 类是什么。如果我将 synth 切换到 MidiDevice 类,播放工作正常,但我无法访问 Synthesizer 类中的所有方法。知道我缺少什么吗?

最佳答案

Synthesizer 接口(interface)由用 Java 实现的合成器使用,并且可以通过该接口(interface)进行控制。

FluidSynth 不是用 Java 编写的,也没有实现该接口(interface)。从 JVM 的角度来看,FluidSynth 看起来就像任何其他 MIDI 端口。

要控制 FluidSynth,您必须发送正常的 MIDI 消息。

关于java - MidiSystem.getMidiDevice(...) 返回意外的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com