defuze.me  Client
audiooutputdevice.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 AUDIO_OUTPUT_HPP
00012 #define AUDIO_OUTPUT_HPP
00013 
00014 #include <QAudioOutput>
00015 #include <QAudioDeviceInfo>
00016 #include <QThread>
00017 #include "audioio.hpp"
00018 #include "audiocore.hpp"
00019 
00020 namespace Audio
00021 {
00022     class AudioCore;
00023     class AudioOutputDeviceThread;
00024 
00031     class AudioOutputDevice : public AudioIO
00032     {
00033         Q_OBJECT
00034         friend AudioOutputDevice* AudioCore::newAudioDevice(QAudioDeviceInfo device = QAudioDeviceInfo::defaultOutputDevice());
00035     public:
00036         ~AudioOutputDevice();
00037 
00038         QAudio::State   state();
00039         bool            setFormat(QAudioFormat format);
00040         void            setInput(AudioIO *input);
00041         bool            isStarted();
00042 
00043         void            start();
00044         void            stop();
00045         void            pause();
00046         AudioIO *getAudioInput(const AudioIO *output);
00047         const AudioIO   *getOutputDevice(const AudioIO *input) const;
00048         qint64  readData(char *data, qint64 maxlen, AudioIO *from);
00049 
00050     signals:
00051         void            startAudio();
00052         void            stopAudio();
00053         void            pauseAudio();
00054         void            changeFormat(QAudioFormat format);
00055     protected:
00056         qint64  writeData(const char *data, qint64 maxlen);
00057         qint64  readData(char *data, qint64 maxlen);
00058 
00059     private:
00060         AudioIO                     *input;
00061         AudioOutputDeviceThread     *audioThread;
00062         AudioOutputDevice(const QString& name, QAudioDeviceInfo device = QAudioDeviceInfo::defaultOutputDevice());
00063     };
00064 }
00065 
00066 #endif // AUDIO_OUTPUT_HPP