较新版本的JRE不加载soundbank但旧版本加载

gsi*_*011 5 java audio midi javax.sound.midi

我有以下代码尝试加载声音库.我已经使用JRE 1.6.03和1.6.43在Windows 7上测试了代码.旧版本的JRE(1.6.03)工作正常,但新版本引发异常.这是怎么回事?

public Main() {
    try {
        Synthesizer synth = MidiSystem.getSynthesizer();
        synth.open();
        BufferedInputStream soundBankStream = new BufferedInputStream(
                getClass().getClassLoader().getResourceAsStream(
                        "soundbank.gm"));
        synth.loadAllInstruments(MidiSystem.getSoundbank(soundBankStream));
    } catch (MidiUnavailableException e) {
        e.printStackTrace();
    } catch (InvalidMidiDataException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

.

F:\>java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-b05, mixed mode)

F:\>java -jar Test2.jar

F:\>"C:\Program Files\Java\jre6\bin\java.exe" -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)

F:\>"C:\Program Files\Java\jre6\bin\java.exe" -jar Test2.jar
javax.sound.midi.InvalidMidiDataException: cannot get soundbank from stream
        at javax.sound.midi.MidiSystem.getSoundbank(Unknown Source)
        at com.gulshansingh.test.Main.<init>(Main.java:24)
        at com.gulshansingh.test.Main.main(Main.java:14)
Run Code Online (Sandbox Code Playgroud)

您可以从这里下载音库:http://www.oracle.com/technetwork/java/soundbanks-135798.html

Aub*_*bin 0

从Java Sound API复制粘贴:Soundbanks页面

Java声音API

此页面提供了不同的音库,您可以下载这些音库并与 Java Sound 一起使用。Soundbank 对于 Java Sound 附带的内部软件合成器的正确操作是必需的。默认情况下,Windows 版本的 J2RE 不附带音库,因此您需要手动安装音库才能使用 Java Sound 的 MIDI 引擎。Java Sound 有一个后备机制,如果没有可用的音库,则使用硬件 MIDI 端口,但它会妨碍可靠且一致的 MIDI 播放,因此建议为 Java Sound 安装音库。

如您所见,Java Sound API 需要安装,因此如果您安装了较新的 JDK,则必须重新安装

一个错误似乎接近您的问题:4887447,存在解决方法,但如果banksound位于JAR中则不存在