Подтвердить что ты не робот

MIDI-клавиатура не работает на всех платформах

Я сделал приложение приложение для клавиатуры некоторое время назад, которое получает MIDI-звуковой банк в качестве ресурса из банки и использует его для получения имен инструментов содержащихся в звуковом банке. Это, похоже, отлично работает на машинах, использующих Windows 7 с suns java 6 и linux с использованием suns java 6. Однако это не работает на машинах, использующих Windows XP, используя ту же самую версию Java. Кажется, что происходит, что приборный массив не был загружен при вызове метода 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();
}
4b9b3361

Ответ 1

Звуковые банки MIDI в Java подчиняются ограничениям лицензии и не отправляются по умолчанию для всех платформ (http://java.sun.com/products/java-media/sound/soundbanks.html) и требуют отдельная загрузка и многоступенчатая настройка для работы.

Ответ: Gervill

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

Гервилл был разработан как универсальный синтезатор для Java. Добавлением gervill.jar для вашего класса должен иметь возможность загружать SoundFonts/DLS файлов с помощью MidiSystem.getSoundBank(). И MidiSystem.getSynthesizer() должен возвращение экземпляра Gervill Synthesizer.

Это чистая Java-версия с открытым исходным кодом, использующая общие MIDI-звуки. Вы просто бросаете gervill.jar в classpath и это. Ваши звуковые банки gm будут доступны для вашего приложения.