2013-05-28 4 views
0

Je leur dis que je travaille avec un MIDlet et que je ne peux pas changer de canal MIDI d'instrument. J'ai essayé avec .shortMidiEvent(0xC0 + channel, program, 0); et setProgram(channel, -1, program) sans résultat. sur mon téléphone est un changement d'instrument Nokia X3-02 ne fonctionne pas, seuls les émulateurs midlet. ici est le fragment de codeJe ne peux pas changer le programme du canal midi sur JSR-135

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); 

} 

est que vous pouvez changer l'instrument, comme je l'ai compris que vous utilisez un tableau de player dans des cas comme ceux-ci. J'essaye et ne travaille pas. saludos

Répondre

0

Le lecteur multimédia est toujours difficile avec JavaME. Certains périphériques vous oblige à prefetch() tandis que d'autres vont planter si vous le faites. Certains aiment réaliser() alors que d'autres ne le font pas. Il est donc préférable d'utiliser plusieurs blocs try/catch avec prefetch() et realize() etc. Il est possible que votre bloc try échoue à cause de prefetch(). Donc, essayez ceci:

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); 
    } 
} 

Plus d'infos sur-media player: http://indiegamemusic.com/help.php?id=1

+0

le crash de téléphone 'prefetch();' – kapodamy

Questions connexes