# Jukebox



## Heiland (14. Jan 2005)

Hi!

Ich bin grade dabei ein kleines Jukebox Applet für meine HP zu schreiben! Bisher habe ich aber nur eine Auswahlliste und einen Stop Knopf gemacht. Wie kann ich noch einen Pause-Knopf machen und einen Schiebregler für Leiser bzw Lauter, welche Befehle brauch ich da?

thx


----------



## L-ectron-X (14. Jan 2005)

Sagst Du bitte noch, was für ein Applet Du schreibst? Für AWT oder Swing?


----------



## Heiland (20. Jan 2005)

AWT


----------



## DesertFox (20. Jan 2005)

Den Lautstärkeregler könntest du mit einer ScrollBar machen und den Pauseknopf wie dein Stop Knopf mit einem normalen Button


----------



## Heiland (22. Jan 2005)

Das weiß ich ;-) aber ich bräuchte Infos, wie ich eine Pause programmiere usw. Ich kenne da die Lib nicht!

THX


----------



## Spacerat (4. Feb 2005)

Ich wünsche dir schon mal viel Spass! Bei dem was ich hier fabriziert habe war das alles recht schwierig. Also nicht unbedingt die Buttons selber, sondern eher das Zusammenspiel von Play, Pause, Previous, Next und Stop. Ich fürchte sogar, das ist immer noch nicht so ganz korrekt.

Die Musikstücke laufen im eigenen Thread. Dieser hat eine while(!stopped)-Schleife und innerhalb dieser wird per if(!paused) abgefragt, ob gerade abgespielt oder pausiert ist.

Mit den Buttons setzt oder löscht man nun die booleanschen Werte stopped und paused. Wichtig ist, das der Thread selbst nach einem Stop() noch weiterlaufen muß. D.H. das gesammte muß nocheinmal in eine while(!isInterrupted())-Schleife. Z.B. etwa so:


```
public class panel
extends Applet
implements Runnable, ActionListener
{
    private Thread t;
    private boolean stopped = true, paused = true;

    public void Start()
    {
        paused = stopped = false;
        t = new Thread(this);
        t.start();
    }

    public void Stop()
    {
        stopped = paused = true;
        t = null;
    }

    public void Pause()
    {
        paused = !paused;
    }

    public void run()
    {
        while(!t.isInterrupted()) {
            while(!stopped) {
                if (!paused) {
                    // Code zum Abspielen des Stückes. Z.B. nächster Frame des Audio-Streams.
                }
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Stop();
                }
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                Stop();
            }
        }
    }

    public void actionPerformed(ActionEvent ae)
    {
        String command = ae.getActionCommand();
        if(command.equalsIgnoreCase("play") Start();
        else if(command.equalsIgnoreCase("stop") Stop();
        else if(command.equalsIgnoreCase("pause") Pause();
    }

    public void init()
    {
        setLayout(new FlowLayout());
        Button play = new Button("Play");
        Button stop = new Button("Stop");
        Button pause = new Button("Pause");
        play.addActionListener(this);
        stop.addActionListener(this);
        pause.addActionListener(this);
        add(play);
        add(stop);
        add(pause);
    }
}
```

Die Volume-Buttons können öfters hintereinander gedrückt oder gedrückt gehalten werden. Im ersten Fall wird die Lautstärke Schrittweise geregelt während im 2. Fall nach einer Sekunde Verzögerung die Lautstärke stetig geregelt wird. Das ist aber nicht sehr einfach. Für den 1. Fall lassen sich entsprechende Buttons aber auch wie oben beschrieben (Start(), Stop(), usw...) implementieren.


----------



## Heiland (4. Feb 2005)

vielen Dank für den code! Ich werde mir das mal zu Gemüte führen, sobald ich mit meinem derzeitigen Projekt abgeschlossen habe!  8)


----------

