Я не могу изменить программу миди канала на JSR-135

Я говорю им, что я работаю с мидлетом и не могу сменить инструментальный миди-канал. Я пробовал с .shortMidiEvent(0xC0 + channel, program, 0); а также setProgram(channel, -1, program) без результата. на моем телефоне Nokia X3-02 смена инструмента не работает, только эмуляторы мидлета. вот фрагмент кода

public final class Dmgcpu implements Runnable {
private Player player;
private static MIDIControl synth;

private void initSound() {
    try {

        player = Manager.createPlayer(Manager.MIDI_DEVICE_LOCATOR);
        player.prefetch();
        synth = (MIDIControl) player.getControl("javax.microedition.media.control.MIDIControl");
    } catch (Exception ex) {
    }

    synth.setProgram(0, -1, instSound_a);
    //synth.shortMidiEvent(0xC0, instSound_a, 0);

   //sound test
   synth.shortMidiEvent(0x90 + channel, note[i], volume * MASTER_VOLUME);

   thread_sleep(300);

   synth.shortMidiEvent(0x80 + channel, note[i], 0);

}

является то, что вы можете изменить инструмент, как я понял, вы используете массив player в таких случаях Я стараюсь и не получалось. Saludos

1 ответ

Решение

Медиаплеер всегда сложен с JavaME. Для некоторых устройств требуется предварительная выборка (), в то время как для других произойдет сбой. Некоторые любят осознавать (), а другие нет. Поэтому лучше всего использовать несколько блоков try/catch с prefetch () и реализовать () и т. Д. Возможно, что ваш блок try завершится неудачно из-за prefetch (). Так что попробуйте это:

public final class Dmgcpu implements Runnable {
private Player player = null;
private static MIDIControl synth = null;

private void initSound() {
  try {
    player = Manager.createPlayer(Manager.MIDI_DEVICE_LOCATOR);
  } catch (Exception e) {}
  try {
    player.realize();
  } catch (Exception e) {}
  try {
    player.prefetch();
  } catch (Exception e) {}
  try {
    synth = (MIDIControl) player.getControl("javax.microedition.media.control.MIDIControl");
  } catch (Exception ex) {}

    if (synth!=null) {
    synth.setProgram(0, -1, instSound_a);

    //synth.shortMidiEvent(0xC0, instSound_a, 0);

    //sound test
    synth.shortMidiEvent(0x90 + channel, note[i], volume * MASTER_VOLUME);

    thread_sleep(300);

    synth.shortMidiEvent(0x80 + channel, note[i], 0);
  }
}

Подробнее о медиа-плеере: http://indiegamemusic.com/help.php?id=1

Другие вопросы по тегам