defuze.me
Client
|
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 }