defuze.me  Client
audiocore.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 AUDIOCORE_HPP
00012 #define AUDIOCORE_HPP
00013 
00014 #include "core.hpp"
00015 #include "thread.hpp"
00016 #include <QList>
00017 #include <QMap>
00018 #include <QVector>
00019 #include <QAudioDeviceInfo>
00020 #include <QThread>
00021 #include <QDateTime>
00022 
00023 namespace Audio
00024 {
00025     class AudioIO;
00026     class AudioDecoder;
00027     class AudioOutputDevice;
00028     class AudioMixer;
00029     class AudioOutputDevices;
00030 
00035     class AudioCore : public Thread, public Core
00036     {
00037         Q_OBJECT
00038     public:
00039         AudioCore(QStringList &arguments);
00040         ~AudioCore();
00041         void                            init(Cores *cores);
00042         void                            aboutToQuit();
00043         QList<QAudioDeviceInfo>         availableDevices(QAudio::Mode mode) const;
00044 
00045         AudioDecoder                    *newAudioDecoder(QString playerName);
00046 
00047         AudioMixer                      *newAudioMixer(const QString& name = "", AudioIO *input = 0);
00048 
00049         AudioOutputDevice                       *newAudioDevice(QAudioDeviceInfo device = QAudioDeviceInfo::defaultOutputDevice());
00050 //      AudioOutputDevice                       *getAudioOutputDevice(QString name);
00051 
00052 
00053         static QString                  formatSeconds(int seconds);
00054         AudioMixer*                     getMasterMixer();
00055         QList<AudioMixer*>&             getMixers();
00056         void                            startCrossfade(AudioMixer* from, AudioMixer* to);
00057         void                            stopCrossfade();
00058     signals:
00059         void                            crossfadeFinished();
00060 
00061     private:
00062         void                            initCodecs();
00063         void                            run();
00064 
00065         AudioMixer*                     masterMixer;
00066         bool                            stopThread;
00067         int                             nbDecoder;
00068         int                             nbOutput;
00069         int                             nbMixer;
00070         bool                            crossfading;
00071         AudioMixer                      *crossfadeFrom, *crossfadeTo;
00072         int                             crossfadeFromVolume, crossfadeToVolume;
00073         QDateTime                       crossfadeStart;
00074         Cores                           *_cores;
00075 
00076         QList<AudioMixer*>                          audioMixersList;
00077         QMap<QString, AudioOutputDevices*>          audioOutputDevices;
00078         QMap<QString, AudioMixer*>                  audioMixers;
00079 
00080         QMap<QString, AudioDecoder*>                audioDecoders;
00081     };
00082 }
00083 
00084 #endif // AUDIOCORE_HPP