我不久前制作了一个键盘应用程序,它将midi音库作为jar中的资源,并使用它来获取音库中包含的乐器名称.这似乎在使用带有suns java 6的Windows 7和使用suns java 6的linux中的机器上工作正常.但是,这似乎不适用于使用相同版本的java的windows xp的机器.似乎正在发生的getInstrumentName()是调用方法时尚未加载仪器阵列.仪器数组将填充在DefaultControl类的构造函数中(第二个代码示例).有人可以帮助我理解为什么会出现这种情况,为什么它似乎依赖于机器?
我得到这样的当前乐器名称:
data.setControls(new DefaultControls());
data.setKeyboard(new KeyboardPanel(data.getPressed()));
data.getKeyboard().setInstrumentName(data.getControls().getInstrumentName());
Run Code Online (Sandbox Code Playgroud)
我得到并加载这样的音库:
this.synth=MidiSystem.getSynthesizer();
synth.open();
synth.loadAllInstruments(
MidiSystem.getSoundbank(
getClass().getResourceAsStream("soundbank.gm")));
this.instrument=synth.getAvailableInstruments();
this.channels=synth.getChannels();
Run Code Online (Sandbox Code Playgroud)
这是调用加载名称的方法是这样的:
public String getInstrumentName(){
return instrument[selected_instrument].getName();
}
Run Code Online (Sandbox Code Playgroud)
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 的实例。
它是通用 MIDI 声音库的开源 100% 纯 java 实现。您只需将 gervill.jar 放入类路径中即可。您的 gm 声音库将可供您的应用程序使用。
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |