midi 键盘无法在所有平台上工作

2022-09-02 22:45:12

不久前,我制作了一个键盘应用程序,该应用程序从罐子中获取midi声音库作为资源,并使用它来获取声音库中包含的乐器名称。这似乎适用于使用Windows 7和suns java 6的机器,以及在linux中使用suns java 6的机器。但是,这似乎不适用于使用相同版本java的Windows xp的机器。似乎正在发生的事情是,在调用该方法时,尚未加载工具数组。工具数组填充在类的构造函数中(第二个代码示例)。有人可以帮助我理解为什么会这样,为什么它似乎依赖于机器?getInstrumentName()DefaultControl

我得到的当前工具名称如下:

data.setControls(new DefaultControls());
data.setKeyboard(new KeyboardPanel(data.getPressed()));
data.getKeyboard().setInstrumentName(data.getControls().getInstrumentName());

我得到并加载声音库,如下所示:

this.synth=MidiSystem.getSynthesizer();
synth.open();
synth.loadAllInstruments(
  MidiSystem.getSoundbank(
    getClass().getResourceAsStream("soundbank.gm")));

this.instrument=synth.getAvailableInstruments();
this.channels=synth.getChannels();

这是调用来加载名称的方法,如下所示:

public String getInstrumentName(){
    return instrument[selected_instrument].getName();
}

答案 1

Java 中的 MIDI 声音库受许可证限制,默认情况下不会为所有平台(http://java.sun.com/products/java-media/sound/soundbanks.html)提供,并且需要单独下载和多步骤设置才能工作。

答案:格维尔

http://java.net/projects/gervill/pages/Home

Gervill被设计为Java的通用合成器。通过将 gervill.jar 添加到类路径中,您应该能够使用 MidiSystem.getSoundBank() 加载 SoundFonts/DLS 文件。MidiSystem.getSynthesizer() 应该返回 Gervill Synthesizer 的实例。

它是一个开源的100%纯java实现的通用MIDI声音库。你只需将 gervill.jar放在类路径中,仅此而已。您的 gm 声音库将可用于您的应用程序。


答案 2

推荐