defuze.me  Client
audiomixer.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 AUDIOMIXER_HPP
00012 #define AUDIOMIXER_HPP
00013 
00014 #include "audioio.hpp"
00015 #include <QMap>
00016 #include <QStringList>
00017 #include <QList>
00018 #include "audioeffect.hpp"
00019 #include "audiocore.hpp"
00020 
00021 namespace Audio
00022 {
00023 
00028     class AudioMixer : public AudioIO
00029     {
00030         friend AudioMixer* AudioCore::newAudioMixer(const QString &name, AudioIO *input);
00031 
00032         Q_OBJECT
00033     public:
00034         void                            addInput(AudioIO *input);
00035         bool                            isStarted();
00036 
00037         qint64                          bytesAvailable() const;
00038 
00039         QMap<QString, AudioEffect*>     &getEffects();
00040 
00041         qint64                          readData(char *data, qint64 maxlen, AudioIO *from);
00042         AudioIO                         *getAudioInput(const AudioIO *output);
00043         const AudioIO                   *getOutputDevice(const AudioIO *input) const;
00044 
00045     signals:
00046 
00047     public slots:
00048 
00049     protected:
00050         qint64                          writeData(const char *data, qint64 maxlen);
00051         qint64                          readData(char *data, qint64 maxlen);
00052     private:
00053         AudioMixer(const QString& name, AudioIO *input);
00054         QMap<QString, AudioEffect*>     effects;
00055         QMap<QString, AudioIO*>         audioInputs;
00056         bool                            _isStarted;
00057         void                            applyEffects(char* data, int len);
00058     };
00059 }
00060 
00061 #endif // AUDIOMIXER_HPP