首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >midi键盘不能在所有平台上工作

midi键盘不能在所有平台上工作
EN

Stack Overflow用户
提问于 2011-04-18 21:42:58
回答 1查看 636关注 0票数 18

我之前做了一个keyboard application,它从jar中获取一个midi音库作为资源,并使用它来获取包含在音库中的乐器名称。这似乎在使用带有suns java6的windows7和使用sunsjava6的linux的机器上工作得很好,但是在使用相同版本的java的使用windows xp的机器上,这似乎不起作用。似乎正在发生的情况是,在调用getInstrumentName()方法时尚未加载仪器数组。仪器数组被填充到DefaultControl类的构造函数中(第二个代码示例)。有人能帮我解释一下为什么会这样吗?为什么它看起来是依赖于机器的?

我得到当前的仪器名称如下:

代码语言:javascript
复制
data.setControls(new DefaultControls());
data.setKeyboard(new KeyboardPanel(data.getPressed()));
data.getKeyboard().setInstrumentName(data.getControls().getInstrumentName());

我像这样获取并加载soundbank:

代码语言:javascript
复制
this.synth=MidiSystem.getSynthesizer();
synth.open();
synth.loadAllInstruments(
  MidiSystem.getSoundbank(
    getClass().getResourceAsStream("soundbank.gm")));

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

这是为加载名称而调用的方法:

代码语言:javascript
复制
public String getInstrumentName(){
    return instrument[selected_instrument].getName();
}
EN

回答 1

Stack Overflow用户

发布于 2011-05-24 08:49:04

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

The Answer:Gervill

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

Java被设计成

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

它是一个开源的100%纯java实现的通用MIDI声音银行。您只需将gervill.jar放在类路径中,就可以了。你的gm声音银行将提供给你的应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5703788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档