Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - javax.sound.midi - Errore: MIDI OUT transmitter not available - A cosa è dovuto?
Forum - Java - javax.sound.midi - Errore: MIDI OUT transmitter not available - A cosa è dovuto?

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
gmxsm (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/12/2007

Segnala al moderatore
Postato alle 23:38
Lunedì, 30/03/2009
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

  1. package provamidi;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.util.logging.Level;
  6. import java.util.logging.Logger;
  7. import javax.sound.midi.*;
  8.  
  9. public class IBM_Esempio1 {
  10.     private Sequencer sequencer;
  11.  
  12.     public IBM_Esempio1(){
  13.         try {
  14. //definisco l'oggetto sequencer
  15.              sequencer = MidiSystem.getSequencer();
  16.              sequencer.open();
  17.         } catch (MidiUnavailableException ex) {
  18.             Logger.getLogger(IBM_Esempio1.class.getName()).log(Level.SEVERE, null, ex);
  19.         }
  20. //creo un file da un percorso assoluto
  21.         File file= new File ("C:\music1.midi");
  22.         try {
  23. //setto la sequenza per il sequencer
  24.             sequencer.setSequence(MidiSystem.getSequence(file));
  25.         } catch (InvalidMidiDataException ex) {
  26.             Logger.getLogger(IBM_Esempio1.class.getName()).log(Level.SEVERE, null, ex);
  27.         } catch (IOException ex) {
  28.             Logger.getLogger(IBM_Esempio1.class.getName()).log(Level.SEVERE, null, ex);
  29.         }
  30. //faccio partire il sequencer
  31.         sequencer.start();
  32.  
  33.  
  34.     }
  35. //questo codice, come dice il tutorial, dovrebbe catturare l'evento legato allo stream..???
  36.  
  37.     public void meta(MetaMessage event){
  38.         if(event.getType()==47){ // 47 significa che è finito lo stream
  39.             sequencer.stop();
  40.             sequencer.close();
  41.         }
  42.     }
  43.  
  44.     public static void main(String args[]){
  45.         new IBM_Esempio1();
  46.        
  47.     }
  48. }



Ecco invece cosa mi riporta il Debug:
codice PHP:
Codice sorgente - presumibilmente Delphi

  1. 29-mar-2009 20.15.14 provamidi.IBM_Esempio1 <init>
  2. GRAVE: null
  3. javax.sound.midi.MidiUnavailableException: MIDI OUT transmitter not available
  4.         at com.sun.media.sound.AbstractMidiDevice.createTransmitter(AbstractMidiDevice.java:444)
  5.         at com.sun.media.sound.AbstractMidiDevice.getTransmitter(AbstractMidiDevice.java:299)
  6.         at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:451)
  7.         at javax.sound.midi.MidiSystem.getSequencer(MidiSystem.java:348)
  8.         at provamidi.IBM_Esempio1.<init>(IBM_Esempio1.java:23)
  9.         at provamidi.IBM_Esempio1.main(IBM_Esempio1.java:50)
  10. Exception in thread "main" java.lang.NullPointerException
  11.         at provamidi.IBM_Esempio1.<init>(IBM_Esempio1.java:30)
  12.         at provamidi.IBM_Esempio1.main(IBM_Esempio1.java:50)
  13. Java Result: 1



Naturalmente prima di postare ho fatto alcune ricerce tramite google ed ho trovato solo articoli che non hanno risolto tutto ciò:
http://www.javakb.com/Uwe/Forum.aspx/java-programmer/32698 ...
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6483856
http://www.coderanch.com/t/274513/Other-Java-APIs/java/jav ...
In particolare per ciò che viene descritto nell'ultimo link io non mi ritrovo questo file:
C:\Program Files\Java\jre1.6.0_07\lib\ext\sound.jar:-?

Non capisco il problema da cosa scaturisca essendo materia nuova per me, ma sarei grato se qualcuno in questo forum possa aiutarmi perchè è sempre bello imparare, oltre che mi servirebbe tutto ciò per un esame!

Grazie in anticipo a tutti!;)

PM Quote
Avatar
gmxsm (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/12/2007

Segnala al moderatore
Postato alle 3:03
Venerdì, 03/04/2009
Nessuno mi può aiutare a risolvere l'inghippo?:(

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 9:39
Venerdì, 03/04/2009
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

PM Quote
Avatar
gmxsm (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/12/2007

Segnala al moderatore
Postato alle 15:05
Venerdì, 03/04/2009
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.:d

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 15:13
Venerdì, 03/04/2009
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à.

PM Quote
Avatar
gmxsm (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/12/2007

Segnala al moderatore
Postato alle 20:59
Venerdì, 03/04/2009
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..:(

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 12:46
Sabato, 04/04/2009
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
PM Quote
Avatar
gmxsm (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/12/2007

Segnala al moderatore
Postato alle 14:56
Sabato, 04/04/2009
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
:d

Grazie mille netarrow per il supporto che mi stai dando ;)

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 15:37
Sabato, 04/04/2009
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
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo