2010-03-23 9 views
1

Si j'ai un soundbank stocké dans un fichier JAR, comment pourrais-je charger que soundbank dans mon application à l'aide de chargement des ressources ...? J'essaie de consolider autant que possible un programme MIDI dans le fichier jar, et la dernière chose que je dois ajouter est le fichier de banque de sons que j'utilise, car les utilisateurs n'auront pas les banques de sons installées . Je suis en train de le mettre dans mon fichier jar, puis le charger avec getResource() dans la classe de classe, mais je reçois un InvalidMidiDataException sur un soundbank que je sais est valide.Java: Embedding fichier JAR Soundbank dans

est ici le code, il est dans le constructeur de mon objet synthétiseur:


try { 
    synth = MidiSystem.getSynthesizer(); 
    channels = synth.getChannels(); 
    instrument = MidiSystem.getSoundbank(this.getClass().getResource("img/soundbank-mid.gm")).getInstruments(); 
    currentInstrument = instrument[0]; 
    synth.loadInstrument(currentInstrument); 
    synth.open(); 
    } catch (InvalidMidiDataException ex) { 
     System.out.println("FAIL"); 
     instrument = synth.getAvailableInstruments(); 
     currentInstrument = instrument[0]; 
     synth.loadInstrument(currentInstrument); 
     try { 
      synth.open(); 
     } catch (MidiUnavailableException ex1) { 
      Logger.getLogger(MIDISynth.class.getName()).log(Level.SEVERE, null, ex1); 
     } 
    } catch (IOException ex) { 
     Logger.getLogger(MIDISynth.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (MidiUnavailableException ex) { 
     Logger.getLogger(MIDISynth.class.getName()).log(Level.SEVERE, null, ex); 
} 

Répondre

1

Voici ce que je l'ai fait:

synth.loadAllInstruments(
    MidiSystem.getSoundbank( 
     getClass().getResourceAsStream(filePath))); 

Il fonctionne pour moi.