00001 #ifndef MUSICPLAYER_H_
00002 #define MUSICPLAYER_H_
00003
00004 #include <iostream>
00005
00006 #include <mythtv/mythdialogs.h>
00007 #include <mythtv/audiooutput.h>
00008
00009 #include "metadata.h"
00010
00011 class Decoder;
00012 class AudioOutput;
00013 class MainVisual;
00014
00015 class MusicPlayer : public QObject
00016 {
00017
00018
00019 public:
00020
00021 MusicPlayer(QObject *parent, const QString &dev);
00022 ~MusicPlayer(void);
00023
00024 void playFile(const QString &filename);
00025 void playFile(const Metadata &meta);
00026
00027 void setListener(QObject *listener);
00028 void setVisual(MainVisual *visual);
00029 void setCDDevice(const QString &dev) { m_CDdevice = dev; }
00030
00031 void mute(void) {};
00032 void unMute(void) {};
00033 void setVolume(void) {};
00034
00035 void setSpeed(float speed);
00036 void incSpeed();
00037 void decSpeed();
00038 float getSpeed() { return m_playSpeed; }
00039
00040 void play(void);
00041 void stop(bool stopAll = false);
00042 void pause(void);
00043 void next(void);
00044 void previous(void);
00045
00046 void nextAuto(void);
00047
00048 bool isPlaying(void) { return m_isPlaying; }
00049 bool hasClient(void) { return (m_listener != NULL); }
00050
00052 void autoShowPlayer(bool autoShow) { m_autoShowPlayer = autoShow; }
00053 bool getAutoShowPlayer(void) { return m_autoShowPlayer; }
00054
00056 void canShowPlayer(bool canShow) { m_canShowPlayer = canShow; }
00057 bool getCanShowPlayer(void) { return m_canShowPlayer; }
00058
00059 Decoder *getDecoder(void) { return m_decoder; }
00060 AudioOutput *getOutput(void) { return m_output; }
00061
00062 GenericTree *constructPlaylist(void);
00063 GenericTree *getPlaylistTree() { return m_playlistTree; }
00064 void setCurrentNode(GenericTree *node) { m_currentNode = node; }
00065 GenericTree *getCurrentNode(void) { return m_currentNode; }
00066
00067 QString getRouteToCurrent(void);
00068
00069 void savePosition(void);
00070 void restorePosition(const QString &position);
00071 void seek(int pos);
00072
00073 Metadata *getCurrentMetadata(void);
00074 void refreshMetadata(void);
00075
00076 void showMiniPlayer(void);
00077
00078 enum RepeatMode
00079 { REPEAT_OFF = 0,
00080 REPEAT_TRACK,
00081 REPEAT_ALL,
00082 MAX_REPEAT_MODES
00083 };
00084 enum ShuffleMode
00085 { SHUFFLE_OFF = 0,
00086 SHUFFLE_RANDOM,
00087 SHUFFLE_INTELLIGENT,
00088 SHUFFLE_ALBUM,
00089 SHUFFLE_ARTIST,
00090 MAX_SHUFFLE_MODES
00091 };
00092
00093 enum ResumeMode
00094 { RESUME_OFF,
00095 RESUME_TRACK,
00096 RESUME_EXACT,
00097 MAX_RESUME_MODES
00098 };
00099
00100 RepeatMode getRepeatMode(void) { return m_repeatMode; }
00101 void setRepeatMode(RepeatMode mode) { m_repeatMode = mode; }
00102 RepeatMode toggleRepeatMode(void);
00103
00104 ShuffleMode getShuffleMode(void) { return m_shuffleMode; }
00105 void setShuffleMode(ShuffleMode mode) { m_shuffleMode = mode; }
00106 ShuffleMode toggleShuffleMode(void);
00107
00108 ResumeMode getResumeMode(void) { return m_resumeMode; }
00109
00110 protected:
00111 void customEvent(QCustomEvent *event);
00112
00113 private:
00114 void stopDecoder(void);
00115 void openOutputDevice(void);
00116 QString getFilenameFromID(int id);
00117 void updateLastplay(void);
00118
00119 GenericTree *m_playlistTree;
00120
00121 GenericTree *m_currentNode;
00122 Metadata *m_currentMetadata;
00123 QString m_currentFile;
00124 int m_currentTime;
00125
00126 QIODevice *m_input;
00127 AudioOutput *m_output;
00128 Decoder *m_decoder;
00129
00130 QObject *m_listener;
00131 MainVisual *m_visual;
00132
00133 QString m_CDdevice;
00134
00135 bool m_isPlaying;
00136 bool m_isAutoplay;
00137 bool m_canShowPlayer;
00138 bool m_autoShowPlayer;
00139 bool m_wasPlaying;
00140 bool m_updatedLastplay;
00141
00142 int m_lastplayDelay;
00143
00144 ShuffleMode m_shuffleMode;
00145 RepeatMode m_repeatMode;
00146 ResumeMode m_resumeMode;
00147
00148 float m_playSpeed;
00149 };
00150
00151
00152 extern MPUBLIC MusicPlayer *gPlayer;
00153
00154 #endif