defuze.me  Client
audioplayer.hpp
00001 /**************************************************************************
00002 ** defuze.me Epitech Innovative Project
00003 **
00004 ** Copyright 2010-2011
00005 **   Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard
00006 **   Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier
00007 **
00008 ** All rights reserved.
00009 **************************************************************************/
00010 
00011 #ifndef AUDIOPLAYER_HPP
00012 #define AUDIOPLAYER_HPP
00013 
00014 #include "staticplugin.hpp"
00015 #include "audiodecoder.hpp"
00016 #include "playqueue.hpp"
00017 #include "audiotrack.hpp"
00018 #include "audioplayerwidget.hpp"
00019 
00020 namespace Player
00021 {
00022     class AudioPlayer :public Audio::AudioIO
00023     {
00024         Q_OBJECT
00025     public:
00026         AudioPlayer(QString playerName);
00027         AudioPlayer(QString playerName, AudioPlayerWidget *widget, Audio::AudioDecoder *decoder, Audio::AudioOutputDevice *outputDevice);
00028         ~AudioPlayer();
00029         void        init();
00030         bool        loadTrack(Queue::Queueable *elem);      
00031         bool        isPlaying() const;                      
00032 
00033         qint64                      readData(char *data, qint64 maxlen, AudioIO *from);
00034         Audio::AudioIO              *getAudioInput(const Audio::AudioIO *output);
00035         const Audio::AudioIO                *getOutputDevice(const AudioIO* input) const;
00036 
00037 
00038     signals:
00039         void        canIHasANewTrack();                     
00040         void        trackHasFinishedPlaying();              
00041         void        almostFinished();                       
00042         void        paused();
00043         void        played();
00044         void        stopped();
00045         void        finished();
00046 
00047     public slots:
00048         void        unloadTrack();
00049         void        play();
00050         void        stop();
00051 
00052     private slots:
00053         void        updatePosition();
00054         void        seek(int position);
00055 
00056     protected:
00057         qint64                      writeData(const char *data, qint64 maxlen);
00058         qint64                      readData(char *data, qint64 maxlen);
00059 
00060     private:
00061         int         cueAt();                                
00062 
00063         bool                        _updatePosition;        
00064         int                         previousPosition;
00065 
00066         QTimer                      *timer;
00067 
00068         QString                     _playerName;            
00069 
00070         AudioPlayerWidget           *widget;                
00071         Audio::AudioDecoder         *decoder;               
00072         Library::AudioTrack         *currentTrack;          
00073         Audio::AudioOutputDevice    *outputDevice;          
00074 
00075         Gui::Module                 *uiModule;
00076 
00077     };
00078 }
00079 #endif // AUDIOPLAYER_HPP