MIDI-клавиатура работает не на всех платформах - PullRequest
18 голосов
/ 18 апреля 2011

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

1 Ответ

1 голос
/ 24 мая 2011

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

Ответ : Gervill

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

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

Это реализация с открытым исходным кодом, 100% чистая Java, из общих банков звуков MIDI. Вы просто добавляете gervill.jar в путь к классам и все. Ваши банки звуков GM будут доступны вашему приложению.

...