tutorials.de Buch-Aktion 05/2012
Seite 4 von 4 ErsteErste 1234
ERLEDIGT
JA
ANTWORTEN
52
ZUGRIFFE
1578
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #46
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Du kannst über die native Java-Library auch MP3 abspielen, du musst dafür nur das AudioFormat anpassen. Ich habe das auch schon mal gemacht, allerdings habe ich den Code zu Hause. Ich habe dir hier mal einen kleinen Code getipselt, weiß aber nicht ob er funktioniert, da ich es nicht testen kann. Aber so in der Art habe ich das glaube ich auch zu Hause gemacht:

    Code java:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    
    import java.io.File;
    import java.io.IOException;
     
    import javax.sound.sampled.*;
     
    public class MP3
    {
        public static Clip loadClip(File file)
        {
            try {
                AudioInputStream in = AudioSystem.getAudioInputStream(file);
                
                AudioFormat baseFormat = in.getFormat();
                AudioFormat decodedFormat = new AudioFormat(
                        AudioFormat.Encoding.PCM_SIGNED, 
                        baseFormat.getSampleRate(), 
                        16,
                        baseFormat.getChannels(),
                        baseFormat.getChannels() * 2, 
                        baseFormat.getSampleRate(),
                        false
                );
     
                AudioInputStream inputStream = AudioSystem.getAudioInputStream(decodedFormat, in);
                
                DataLine.Info info = new DataLine.Info(Clip.class, inputStream.getFormat());
                
                Clip clip = (Clip) AudioSystem.getLine(info);
                clip.open(in);
                clip.addLineListener(new ClipLineListener());
                
                return clip;
            } catch (UnsupportedAudioFileException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (LineUnavailableException e) {
                e.printStackTrace();
            }
            return null;
        }
     
        private static class ClipLineListener implements LineListener
        {
            /* (non-Javadoc)
             * @see javax.sound.sampled.LineListener#update(javax.sound.sampled.LineEvent)
             */
            public void update(LineEvent event)
            {
                if(LineEvent.Type.STOP == event.getType()) {
                    event.getLine().close();
                }
            }
        }
    }

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  2. #47
    Avatar von oneof6
    oneof6 oneof6 ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    entre dos tierras
    Beiträge
    73
    OK,

    erstmal...super Resonanz Gentlemen!!
    Ich hatte noch nicht viel Zeit, hab' aber beide Versionen (Spikee und Fabio) mal quick'n dirty implementiert.

    @Spikee
    Dein Code ist wirklich kompakt. Allerdings scheint mit dem Java Mixer nur eine bestimmte Buffer größe abspielbar zu sein. Wenn ich ein WAV für Hintergrundmusik (ca. 3MB) reinlade, haut er mir folgende exception um die Ohren:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    SCHWERWIEGEND: null
    javax.sound.sampled.LineUnavailableException: Failed to allocate clip data: Requested buffer too large.
            at com.sun.media.sound.MixerClip.implOpen(MixerClip.java:561)
            at com.sun.media.sound.MixerClip.open(MixerClip.java:165)
            at com.sun.media.sound.MixerClip.open(MixerClip.java:256)
            at jonny_0_5.MusicBox.<init>(MusicBox.java:52)
            at jonny_0_5.Board.preloader(Board.java:96)

    Im Netz hab' ich nach kurzer Suche das gefunden:
    1048576 bytes (that's the current limit imposed by MixerClip)
    http://codeidol.com/java/swing/Audio...Trivial-Audio/

    Man muss für größere Dateien also, wohl oder übel, DataLines benutzen.


    @Fabio
    Sobald ich versuche ne mp3 als Stream in den AudioInputStream zu schieben, wirft er folgende exception:
    Code java:
    1
    2
    
    javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream
            at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1102)

    schieb' ich ne normale WAV rein, läuft's rund?
     
    ...every second is a new spark, sets the universe aflame
    (Bruce Dickinson)

    Got something to say? http://www.plaintalk.de

  3. #48
    SE Tutorials.de Gastzugang
    @1one6
    Öhm ... verdammt ... ok ... DAS wusste ich natürlich nicht , weil ich auch keine WAV dieser Größe zum Testen hatte. Dann ist meine Lösung also doch nur für SFX verwendbar ... für BGM muss man dann halt DataLines nutzen ... 1:0 für die API xD.

    @Fabio
    Also ohne dich jetzt selbst angreifen zu wollen ... aber so KANN das schon mal gar nicht funktionieren. MP3 ist eigentlich ein NICHT-OpenSource Format. Lediglich die DE-Kodierung ist public ... für EN-Kodierung muss man eigentlich Lizenzkosten zahlen ... auch wenn es mit dem LAME MP3 Codec einen komplett freien Codec gibt ... dieser ist aber gerade in Deutschland mehr geduldet als legal. Auch kann man mit ihm nur relativ geringe EN-Kodierungen durchführen ... will man bessere Ergebnisse muss man sich eine Lizenz holen.
    Auf Grund dessen hat Java KEINEN MP3-DE-Koder ... und desshalb kannst du aus Java auch ohne sowas kein MP3 laden ... weil Java nur für RAW-Formate *WAV* gebaut wurde.
    Es gibt zwar auf der DL-Seite vom JMF auch einen MP3-DE-Koder ... aber ich hab gerade erlich gesagt keine Zeit um das zu testen da ich gleich los muss ... und ich wär erst in 1 1/2 Stunden wieder da. Der Link dazu wäre hier : http://www.oracle.com/technetwork/ja...ad-137625.html
    Kurz zusammen gefasst : man braucht JMF und muss den MP3-Codec irgendwie installieren / registrieren ... und funktioniert halt scheinbar nur in einer JMF Applikation ... aber ich denke das wir es schaffen das alles soweit aus ein andere zu nehmen das wir nachher ne MP3-Lib-Jar zusammen haben und damit einfach über AudioSystem.getAudioInputStream() laden können ... ich guck mir das nachher mal intensiv an.
     

  4. #49
    Avatar von oneof6
    oneof6 oneof6 ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    entre dos tierras
    Beiträge
    73
    Es gibt ne freie Implementierung die MP3s abspielt, allerdings muss die dann immer mit ausgeliefert werden:
    http://www.javazoom.net/javalayer/documents.html
     
    ...every second is a new spark, sets the universe aflame
    (Bruce Dickinson)

    Got something to say? http://www.plaintalk.de

  5. #50
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Ja wie gesagt, ich habe den Code zu Hause und habe diesen auch schon laufen lassen und es hat auch funkioniert. Wenn ich später zu Hause bin, werde ich mal den Code reinstellen.
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  6. #51
    Avatar von oneof6
    oneof6 oneof6 ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    entre dos tierras
    Beiträge
    73
    Hey Fabio,

    es ist jetzt schon ne Weile her und ich mach' mir langsam Sorgen ob Du zuhause angekommen bist

    Wie sieht's aus, hast Du den Code noch irgendwo? Ansonsten muss ich wohl ne MP3 lib einbinden. Ich will das Game dann bald mal fertig machen.

    Ciao,
    OneOf6
     
    ...every second is a new spark, sets the universe aflame
    (Bruce Dickinson)

    Got something to say? http://www.plaintalk.de

  7. #52
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hey,
    sorry, da hab ich überhaupt nicht mehr dran gedacht.

    Also nur mit der Standard-API wird es nicht funktionieren. Ich hab es z.B. so gemacht, dass ich Javazoom (der MP3-Library) eingebunden habe. Dadurch wird das MP3-Format zum AudioSystem hinzugefügt. Deshalb kann man dann auch MP3-Dateien abspielen. Das abspielen funktioniert dann so wie ich es oben schon beschrieben habe. Oder du verwendest direkt einen Player von Javazoom.

    Ich bitte nochmals Entschuldigung für die späte Rückmeldung.

    Gruß

    Fabio
    oneof6 bedankt sich. 
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  8. #53
    Avatar von oneof6
    oneof6 oneof6 ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Ort
    entre dos tierras
    Beiträge
    73
    Kein Problem!

    OK, dann weiß ich bescheid.

    Danke,
    OneOf6
     
    ...every second is a new spark, sets the universe aflame
    (Bruce Dickinson)

    Got something to say? http://www.plaintalk.de

Ähnliche Themen

  1. Eclipse für JME und J2SE
    Von melmager im Forum Java
    Antworten: 0
    Letzter Beitrag: 06.09.06, 11:59
  2. jms mit j2se client
    Von DealeyLama im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 3
    Letzter Beitrag: 26.12.05, 22:07
  3. J2SE 1.5.0 soll in Zukunft J2SE 5.0 heißen?!
    Von Thomas Darimont im Forum Java
    Antworten: 3
    Letzter Beitrag: 30.06.04, 12:16
  4. J2SE 1.5 beta 2
    Von squeaker im Forum Java
    Antworten: 5
    Letzter Beitrag: 29.06.04, 14:27
  5. J2SE und Eclipse
    Von zeromancer im Forum Java
    Antworten: 9
    Letzter Beitrag: 11.02.04, 17:55