Ciao a tutti,
da un paio di giorni mi sto imbattendo nelle api "javax.sound.midi" perchè creare e manipolare file midi mi interesserebbe davvero molto.
Ho letto molte guide e articoli su questo argomento, ma mi sono imbattutto in questo errore:
"javax.sound.midi.MidiUnavailableException: MIDI OUT transmitter not available"
La cosa che più mi fa impazzire è che il codice che ho usato fa parte di un Tutorial ...
Di seguito il codice:
Codice PHP:
package provamidi;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.midi.*;
public class IBM_Esempio1 {
private Sequencer sequencer;
public IBM_Esempio1(){
try {
//definisco l'oggetto sequencer
sequencer = MidiSystem.getSequencer();
sequencer.open();
} catch (MidiUnavailableException ex) {
Logger.getLogger(IBM_Esempio1.class.getName()).log(Level.SEVERE, null, ex);
}
//creo un file da un percorso assoluto
File file= new File ("C:\\music1.midi");
try {
//setto la sequenza per il sequencer
sequencer.setSequence(MidiSystem.getSequence(file));
} catch (InvalidMidiDataException ex) {
Logger.getLogger(IBM_Esempio1.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(IBM_Esempio1.class.getName()).log(Level.SEVERE, null, ex);
}
//faccio partire il sequencer
sequencer.start();
}
//questo codice, come dice il tutorial, dovrebbe catturare l'evento legato allo stream..???
public void meta(MetaMessage event){
if(event.getType()==47){ // 47 significa che è finito lo stream
sequencer.stop();
sequencer.close();
}
}
public static void main(String args[]){
new IBM_Esempio1();
}
}
Ecco invece cosa mi riporta il Debug:
Codice PHP:
29-mar-2009 20.15.14 provamidi.IBM_Esempio1 <init>
GRAVE: null
javax.sound.midi.MidiUnavailableException: MIDI OUT transmitter not available
at com.sun.media.sound.AbstractMidiDevice.createTransmitter(AbstractMidiDevice.java:444)
at com.sun.media.sound.AbstractMidiDevice.getTransmitter(AbstractMidiDevice.java:299)
at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:451)
at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:348)
at provamidi.IBM_Esempio1.<init>(IBM_Esempio1.java:23)
at provamidi.IBM_Esempio1.main(IBM_Esempio1.java:50)
Exception in thread "main" java.lang.NullPointerException
at provamidi.IBM_Esempio1.<init>(IBM_Esempio1.java:30)
at provamidi.IBM_Esempio1.main(IBM_Esempio1.java:50)
Java Result: 1
Non capisco il problema da cosa scaturisca essendo materia nuova per me, ma sarei grato se qualche buon'anima possa illuminarmi perchè è sempre bello imparare!