CLAM-Development  1.4.0
AudioMixer.hxx
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2004 MUSIC TECHNOLOGY GROUP (MTG)
3  * UNIVERSITAT POMPEU FABRA
4  *
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  *
20  */
21 
22 #ifndef _AudioMixer_hxx__
23 #define _AudioMixer_hxx__
24 
25 #include "Processing.hxx"
26 #include "AudioOutPort.hxx"
27 #include "AudioInPort.hxx"
28 #include "Audio.hxx"
29 #include "InControl.hxx"
30 
31 namespace CLAM
32 {
33 
35 {
36 public:
38  DYN_ATTRIBUTE (0, public, int, NumberOfInPorts);
39  DYN_ATTRIBUTE (1, public, CLAM::Array<TControlData>, DefaultGains);
40 
41 protected:
42  void DefaultInit(void)
43  {
44  AddAll();
45  UpdateData();
46  unsigned int numberOfInPorts=2;
47  SetNumberOfInPorts(numberOfInPorts);
49  gains.Resize(numberOfInPorts);
50  gains.SetSize(numberOfInPorts);
51  for (unsigned portNumber=0;portNumber<numberOfInPorts;portNumber++)
52  {
53  gains[portNumber]=1;
54  }
55  SetDefaultGains(gains);
56  }
57 
58 };
59 
60 class AudioMixer: public Processing
61 {
62 private:
63  AudioMixerConfig mConfig;
64 
65  std::vector< AudioInPort* > mInputPorts;
66  AudioOutPort mOutputPort;
67  std::vector< FloatInControl* > mInputControls;
68 
69  void RemovePortsAndControls();
70  void CreatePortsAndControls();
71 
72 public:
73  bool ConcreteConfigure(const ProcessingConfig& c);
74  AudioMixer();
75  virtual ~AudioMixer()
76  {
77  RemovePortsAndControls();
78  }
80  {
81  return true;
82  }
83 
84  const char * GetClassName() const {return "AudioMixer";}
85  const ProcessingConfig &GetConfig() const { return mConfig;}
86  bool Do();
87 };
88 
89 } // namespace CLAM
90 
91 #endif // __AudioMixer_hxx__
92