defuze.me  Client
audiomixer.cpp
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 #include "audiomixer.hpp"
00012 #include <QDebug>
00013 #include "audioplayer.hpp"
00014 #include "audioeffectvolume.hpp"
00015 #include "audioeffectbalance.hpp"
00016 
00017 using namespace Audio;
00018 
00019 AudioMixer::AudioMixer(const QString& name, AudioIO *input)
00020 {
00021     _isStarted = false;
00022     _name = name;
00023     _type = AudioMixerType;
00024     if (input)
00025     {
00026         audioInputs.insert(input->getName(), input);
00027         input->setOutput(this);
00028     }
00029     AudioEffect *volumeEffect = new  AudioEffectVolume();
00030     effects.insert("Volume", volumeEffect);
00031     AudioEffect *balanceEffect = new  AudioEffectBalance();
00032     effects.insert("Balance", balanceEffect);
00033     open(QIODevice::ReadWrite);
00034 }
00035 
00036 
00037 bool    AudioMixer::isStarted()
00038 {
00039     return _isStarted;
00040 }
00041 
00042 void    AudioMixer::applyEffects(char *data, int len)
00043 {
00044     foreach(AudioEffect *effect, effects)
00045     {
00046         effect->apply((short*)data, len);
00047     }
00048 }
00049 
00050 void    AudioMixer::addInput(AudioIO *input)
00051 {
00052     audioInputs.insert(input->getName(), input);
00053     input->setOutput(this);
00054 }
00055 
00056 QMap<QString, AudioEffect*>&    AudioMixer::getEffects()
00057 {
00058     return effects;
00059 }
00060 
00061 qint64  AudioMixer::writeData(const char *data, qint64 maxlen)
00062 {
00063     Q_UNUSED(data);
00064     Q_UNUSED(maxlen);
00065     return 0;
00066 }
00067 
00068 qint64  AudioMixer::readData(char *data, qint64 maxlen)
00069 {
00070     Q_UNUSED(data);
00071     Q_UNUSED(maxlen);
00072     return 0;
00073 }
00074 
00075 qint64  AudioMixer::readData(char *data, qint64 maxlen, AudioIO *from)
00076 {
00077     AudioIO *input = getAudioInput(from);
00078     qint64 bytesRead = 0;
00079 
00080     if (input)
00081     {
00082         bytesRead = input->readData(data, maxlen, from);
00083         applyEffects(data, maxlen);
00084     }
00085     return bytesRead;
00086 }
00087 
00088 qint64 AudioMixer::bytesAvailable() const
00089 {
00090     qint64 bAv = 0;
00091     return bAv;
00092 }
00093 
00094 AudioIO *AudioMixer::getAudioInput(const AudioIO* output)
00095 {
00096     foreach(AudioIO* input, audioInputs)
00097     {
00098         if (input->getOutputDevice(output) == output)
00099             return input;
00100     }
00101     return 0;
00102 }
00103 
00104 const AudioIO *AudioMixer::getOutputDevice(const AudioIO* output) const
00105 {
00106     foreach(AudioIO* input, audioInputs)
00107     {
00108         if (input->getOutputDevice(output) == output)
00109             return output;
00110     }
00111     return 0;
00112 }