• Java Media Framework

    Einleitung
    So Willkommen zu meinem ersten Tutorial. Da ich das zum ersten mal mache, seit ein bisschen Nachsichtig wenn ich Fehler mache

    Ich erkläre euch jetzt in kurzen knappen Schritten wie man mithilfe der JMF (Java Media Framework) von Sun Audio Dateien abspielen kann.

    Die Library findet ihr unter diesem Link:

    http://java.sun.com/javase/technolog.../download.html

    Nachdem ihr das Package in euer Projekt eingebunden habt, kann es dann auch schon losgehen.


    Allgemeines
    Die Java Media Framework ist eine Java-Bibliothek zur Handhabung von Audio- und Videodaten. Das API unterstützt das Aufnehmen von Mikrofon und Kamera und erlaubt das Einlesen und Speichern von Audio/Video-Formaten.

    Die JMF unterstützt folgende Medientypen:

    * Protokolle: FILE, HTTP, FTP, RTP
    * Audio: AIFF, AU, AVI, GSM, MIDI, MP2, MP3*, QT, RMF, WAV
    * Video: AVI, MPEG-1, QT, H.261, H.263
    * Sonstige: HotMedia


    Das abspielen von Audio-Dateien
    Als erstes brauchen wir den Pfad zu der Audio-Datei, damit wir damit der Player erzeugen können. Hierzu erzeugt ihr einfach die Klasse File:

    Code :
    1
    2
    
    String Pfad = "C:\\Test.mp3"
    File datei = new File(Pfad)

    Die Klasse File, findet sich in folgendem package:

    Code :
    1
    
    import java.io.File;

    Als nächstes erzeugen wir den Player aus der JMF. Dazu binden wir dieses Package ein:

    Code :
    1
    
    import javax.media.*;

    Danach erzeugen wir den Player und geben ihm die Audio-Datei mit:

    Code :
    1
    
    private Player audioPlayer = Manager.createRealizedPlayer(file.toURL());

    Danach müssen wir eigentlich nur noch sagen, dass er starten soll. Das geht so:

    Code :
    1
    
    audioPlayer.start();

    Wir sind jetzt schon soweit, dass unsere Audio-Dateien abgespielt werden können. Die JMF kann aber noch viel mehr mit den Audio Dateien anfangen:


    Laustärke setzen
    Um die Laustärke unseres Players zu setzen müssen wir einfach nur der folgenden Funktion einen float Wert übergeben:

    Code :
    1
    
    audioPlayer.getGainControl().setLevel(100);

    Der Wert 100 ist dabei die lauteste Einstellung und 0 die leiseste. Also kurz gesagt Mute, wo wir schon beim nächsten Punkt sind.


    Mute
    Um den Player lautlos zu setzen können wir wenn die Lautstärke auf 0 setzen oder einfach diese Funktion benutzen:

    Code :
    1
    
    audioPlayer.getGainControl().setMute(false);


    Zeit setzen
    Um den Player ab einer bestimmten Zeit zu starten, kann man dieser Funktion die Zeit in einem float Wert übergeben:

    Code :
    1
    
    audioPlayer.setMediaTime(new Time(150));

    Diese Funktion ist vorallem praktisch, wenn man während der Wiedergabe Pause machen will. Hierzu müsst ihr euch einfach nur die Zeit merken und sie bei Play wieder setzen. Die Zeit kann man wie folgt auslesen:

    Code :
    1
    
    audioPlayer.getDuration().getSeconds()

    Als kleiner Tipp zeig ich euch hier wie man die Sekunden umrechnen kann, in einen String (z.B. 3:34):

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    String SekundenUmrechnen(int sekunden){
            
            String zeit = "";
            
            int sek1 = 1;
            int min = (60*sek1);
            int std = (60*min);
            
            int minerg = (sekunden%std)/(min);
            int sekerg = (sekunden%min*sek1); 
            
            zeit = Integer.toString(minerg) + ":";
            
            if(sekerg < 10)
                zeit = zeit + "0" + Integer.toString(sekerg);
            else
                zeit = zeit + Integer.toString(sekerg);
            
            return zeit;
            
        }


    Stop
    Um die Wiedergabe der Audiodatei zu stoppen benuzt man folgende Funktion:

    Code :
    1
    
    audioPlayer.stop();


    Eine Timeline anzeigen
    Als abschließenden Tipp zeige ich euch nun jetzt noch wie man sich ganz einfach aus einem jSlider eine Timeline machen kann. Als erstes braucht ihr einen Refresh Thread der euch immer den jSlider aus einer Schleife heraus updatet (erneuert). Aus diesem Refresher Thread wird ein Runnable Thread aufgerufen, der für das auslesen des Players zuständig ist. Die Schleife läuft insgesamt solange durch wie die Datei gespielt wird.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    //Refresh Thread
            refresherThread = new Thread() {
                {
                    setPriority(Thread.MIN_PRIORITY);
                }
     
                public void run() {
                    try {
                        while (runnable != null) {
                            SwingUtilities.invokeLater(runnable);
                            sleep(100);
                        }                                       
                    } 
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };        
            
            //Runnable Thread
            runnable = new Runnable() {
                public void run() {
                    jSlider.setValue((int)audioPlayer.getMediaTime().getSeconds());              
                }
        };

    So damit habt ihr schonmal die wichtigsten Funktionen der JMF kennen gelernt im nächsten Tutorial erkläre ich euch dann, wie man Video-Dateien abspielt.
    Bis dahin viel Spass beim nachmachen.

    Gruß Thomas