gmxsm (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/12/2007
|
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 http://www.ibm.com/developerworks/library/it/it-0801art38/...
Di seguito il codice:
codice PHP:
Codice sorgente - presumibilmente Java |
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 { public IBM_Esempio1(){ try { //definisco l'oggetto sequencer sequencer.open(); Logger.getLogger(IBM_Esempio1.class.getName()).log(Level.SEVERE, null, ex); } //creo un file da un percorso assoluto try { //setto la sequenza per il sequencer sequencer. setSequence(MidiSystem. getSequence(file )); Logger.getLogger(IBM_Esempio1.class.getName()).log(Level.SEVERE, null, 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..??? 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:
Codice sorgente - presumibilmente Delphi |
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
|
|
|
gmxsm (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/12/2007
|
Nessuno mi può aiutare a risolvere l'inghippo?
|
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
l'errore parte da qui:
sequencer.setSequence(MidiSystem.getSequence(file));
gli passi file che è inizializzato su
C:\music1.mid
Secondo me l'errore è quello.
Scrivendo "C:\music1.mid" quel \ viene considerato come carattere escape \m.
Prova a inizializzarlo sul file
"C:/music1.mid"
Java accetta come separatore sempre / poi se il sistema invece è windows e usa \ lo converte lui.
O sennò usa C:\\music1.mid
|
|
gmxsm (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/12/2007
|
Purtroppo scrivendo nei tag "code" del forum me l'ha omesso, comunque nel codice avevo messo come percorso "c:\\music1.midi"
Ho provato anche "c:/music1.midi" ma nulla, mi da sempre lo stesso errore.
|
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
ah peccato.
prova a scaricare da questo sito "MidiSounder".
vedi se ti funziona, in tal caso prova a vedere le differenza che ci sono col codice.
se non funziona neanche quello o ormai è troppo vecchio e non è compatibile con le ultime versioni del JRE o potrebbe esserci qualche problema con il tuo hardware oppure essere un bug importante di java (infatti c'è il post riguardo il bug fra i tuoi link)
negli ultimi due casi non saprei come risolvere il problema, se non ricorrendo a processi esterni, usando qualche software di riproduzione midi e richiamandolo poi da java ma perderesti un pò di flessibilità ma soprattutto portabilità.
|
|
gmxsm (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/12/2007
|
Ho scaricato il pacchetto, ho avviato "MidiSounder.exe" ma mi riporta questo errore:
"Errore nell'inizializzare il MidiSystem:javax.sound.midi.MidiUnavailableException: MIDI OUT transmitter not available"
"Errore nell'inizializzare lo strumento del canale java.lang.NullPointerException"
Potresti provare ad eseguire il file e vedere se a te funziona?
Spero che sia un bug di java piuttosto che qualche hardware non compatibile..
|
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
ti da lo stesso errore, quindi il problema è qualcosa al di fuori del codice perchè quel programma mi è sempre funzionato.
l'ho provato per sicurezza ora e funziona.
Ultima modifica effettuata da netarrow il 04/04/2009 alle 12:47 |
|
gmxsm (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/12/2007
|
Speravo non fosse così
Allora può essere qualche incompatibilità software o hardware...
Partiamo dal software:
- Windows Vista Business 32 Sp1
Queste le cartelle in Programmia\Java
- jdk1.6.0_13
- jre1.6.0_07
Questa in Programmi
- JMF2.1.1e
IDE
- Netbeans 7.0M1
non so se serve altro..
Hardware:
- Intel Core 2 Quad Q6600
- Scheda madre p5k-e wifi
- 2x Corsair cm2x1024-6400 ddr2
A questo punto spero sia un problema di software perchè riuscire a programmare le api sound di java servirebbe per un esame e vorrei risolvere al più presto
Grazie mille netarrow per il supporto che mi stai dando
|
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
io ho provato sul JDK 1.5 visto che sono su Mac, quando l'ho sviluppato era su Windows Me con l'1.4.
non vorrei che sia sennò Vista che ha parecchie incompatibilità.
ora l'ho provato su Xp con l'1.6 e mi da un'eccezione ArrayIndexOutOfBoundsException (eccezione che nel mac non viene) poi non suona.
guardando poi il codice sembra che non riesca ad ottenere la lista dei canali e quindi accedendo già al primo sfora l'array che è vuoto.
poi ho provato su Ubuntu con la 1.6 nessun errore e suona.
A questo punto penso che il problema sia causato dai vari sistemi, non sembrano molto portabili questa librerie di gestione MIDI.
Ultima modifica effettuata da netarrow il 04/04/2009 alle 15:38 |
|