Playlist

Eichelhäer

Bekanntes Mitglied
Hi, kurze Frage: Ich habe verschiedene Audiodateien (Midi) und möchte diese der reihe nach abspielen.
Also Track 1 , Track 2, usw. und dann das ganze wieder von vorne.
Nun bietet die Clip-Klasse zwar die Konstante LOOP_CONTINUESLY an allerdings nur für einen Titel. Muss ich den Aufwand in Kauf nehmen und jeden Titel mittels eigener Methode aufrufen oder kann ich das als Ganzes in eine Methode packen? Ich hab prinzipiell 2 Playlists mit ca. je 8 Titeln. Hier mal der Code der Methode mit der ich einen Track abspielen lasse:

Java:
public static void playMainMenuMusic(String file) {
        File music = new File("res/audio/music/"+file+".wav");
        //hier sollen noch mehr audio files rein die abspielweise im folgenden bleibt ja dieselbe
    
        try {
            if(outputmixer!=null) {
                clipmain = AudioSystem.getClip(outputmixer.getMixerInfo());
                clipmain.open(AudioSystem.getAudioInputStream(music));
                musicvolume = (FloatControl) clipmain.getControl(FloatControl.Type.MASTER_GAIN);
                clipmain.loop(Clip.LOOP_CONTINUOUSLY);
            }
            else {
                clipmain = AudioSystem.getClip(defaultoutputmixer.getMixerInfo());
                clipmain.open(AudioSystem.getAudioInputStream(music));
                musicvolume = (FloatControl) clipmain.getControl(FloatControl.Type.MASTER_GAIN);
                clipmain.loop(Clip.LOOP_CONTINUOUSLY);
            }
            
        } catch (LineUnavailableException | IOException | UnsupportedAudioFileException e) {e.printStackTrace();}
    }
 

Kirby.exe

Top Contributor
Also ich kenne mich mit der Bibliothek nicht aus, aber du könntest bei einem "Loop" für alle Songs die Songs mittels einer Queue loopen :) Wenn der erste Song in der Queue fertig gespielt wurde, dann stelle Ihn wieder hinten an :)
 
K

kneitzel

Gast
Clip dient nur dem Spielen von einer Musikdatei. Wenn Du mehrere nacheinander spielen willst, dann musst Du diese Funktionalität selbst implementieren.

Das sollte über addLineListener gehen. Ohne das LOOP_CONTINUOUSLY würde ich erwarten, dass Du ein STOP Event bekommst nach dem Abspielen um dann das nächste Lied anzustarten.

Im Netz findet man, dass es ggf. noch Timing Probleme geben könnte, weil ggf. das STOP Signal kommt, während der Sound noch nicht ganz durch ist. Etwas in der Art ist z.B. in https://stackoverflow.com/questions...-for-a-java-sound-clip-to-finish-playing-back behandelt.
 

Neue Themen


Oben