JMF und midi

Status
Nicht offen für weitere Antworten.

Campino

Top Contributor
hi,

ich versuche grad mal eine midi-Datei mit JMF abzuspielen, was ja eigentlich gehen sollte. Dazu habe 'ich' eine Funktion geschrieben(oder sagen wir, gefunden ;) ), Wenn ich diese nutze, um eine mp3-datei abzuspielen funktioniert sie, wenn ich ein midi abspielen will, nicht. Es tritt folgener Fehler auf:
Error: Unable to prefetch com.sun.media.content.audio.midi.Handler$MidiController@1f436f5
Die datei habe ich vorher mit JMusic erstellt, Winamp spielt sie fehlerfrei ab. Hier ist noch 'meine' Funktion (danke Illu....):
Code:
import javax.media.*;
import java.awt.*;
import java.io.*;

/**
* @author Illuvatar
*/
public class Media
{
   private static void checkJmf() throws ClassNotFoundException
   {
      try{
         Class c = Class.forName("javax.media.Manager");
      }catch (ClassNotFoundException e){
         ClassNotFoundException cnfe = new ClassNotFoundException ("JMF nicht installiert!", e);
         throw cnfe;
      }
   }
   private Media (Component visual, Component controlPanel, Player player)
   {
      v = visual;
      cp = controlPanel;
      p = player;
   }
   private Component v;
   private Component cp;
   private Player p;
      /**
     *Spielt mit dem JMF die Musik in der Datei f ab.
     *@return Ein Media-Objekt, dass das ControlPanelComponent und den Player kapselt
     *@exception IOException Wenn die Datei nicht existiert
     *@exception ClassNotFoundException Wenn kein JMF installiert ist
     *@exception NoPlayerException Wenn kein Player zu der Datei gefunden wird.
     */
   public static Media playMusic (File f) throws IOException, ClassNotFoundException, NoPlayerException
   {
      checkJmf();
      final Player player = Manager.createPlayer (f.toURL());
      player.start();
      waitFor(player);
      return new Media (null, player.getControlPanelComponent(), player);
   }
  
   /**
     *Blockiert bis zu einem StopEvent des Players, das kein Restarting- oder StopByRequestEvent ist.
     *@see javax.media.StopEvent
     */
   public static void waitFor (Player player)
   {
      final Object LOCK = new Object();
      player.addControllerListener (new ControllerListener(){
         public synchronized void controllerUpdate(ControllerEvent event) {
            if (event instanceof javax.media.StopEvent && !(event instanceof RestartingEvent) && !(event instanceof StopByRequestEvent)) {
               synchronized (LOCK){
                  LOCK.notifyAll();
               }
            }
         }
      });
      synchronized (LOCK){
         try{
            LOCK.wait();
         }catch (InterruptedException ie){
            Thread.currentThread().interrupt();
         }
      }
   }
}
 

thomas.g

Bekanntes Mitglied
JMF kann MIDI normal nicht abspielen (soviel ich weiß) bei meinem Player ging es jedenfalls nicht, deswegen bin ich auf Java Sound API für die MIDI wiedergabe ausgewichen und kann jetzt MIDI ohne JMF abspielen. Du musst lediglich bei deinem Player den Code so verändern, dass er bei MIDI deinen Codec für MIDI benutzt und für alles andere JMF. So hats bei mir geklappt.
 

Campino

Top Contributor
thomas.g hat gesagt.:
JMF kann MIDI normal nicht abspielen (soviel ich weiß) bei meinem Player ging es jedenfalls nicht, deswegen bin ich auf Java Sound API für die MIDI wiedergabe ausgewichen und kann jetzt MIDI ohne JMF abspielen. Du musst lediglich bei deinem Player den Code so verändern, dass er bei MIDI deinen Codec für MIDI benutzt und für alles andere JMF. So hats bei mir geklappt.
In den JMF Kompabilitationtabellen steht zwar drinn, dass JMF midi kann, aber ich werd's trotzdem mal mit Java Sound API versuchen, danke.

EDIT:

Was zheißt diese Exception, ist das ein Fehler im Code oder in meinen Einstellungen/meiner Installation?
Midi System Unavailable:javax.sound.midi.MidiUnavailableException: MIDI OUT transmitter not available
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben