#include <list>
#include <string>
#include <sigc++/signal.h>
+#include <msp/io/seekable.h>
#include "source.h"
#include "streamer.h"
namespace Msp {
namespace AL {
-class Sound;
+class Playlist;
+class SoundDecoder;
class Jukebox
{
public:
- sigc::signal<void, const std::string &> signal_track_changed;
+ sigc::signal<void, unsigned> signal_track_changed;
private:
Source source;
Streamer streamer;
- Sound *sound;
- std::list<std::string> tracks;
- std::list<std::string>::iterator current_track;
- bool shuffle;
+ IO::Seekable *in;
+ SoundDecoder *decoder;
+ const Playlist *playlist;
+ unsigned current;
public:
Jukebox();
~Jukebox();
Source &get_source() { return source; }
- void add_track(const std::string &);
- void remove_track(const std::string &);
- void clear_tracks();
- const std::string &get_current_track() const;
- void set_shuffle(bool);
+ void set_playlist(const Playlist *);
+ const Playlist *get_playlist() const { return playlist; }
+ unsigned get_current_track() const { return current; }
void play();
void next();