33 "category",
"Arithmetic Operations",
34 "description",
"AudioMixer",
37 static FactoryRegistrator<ProcessingFactory, AudioMixer>
reg =
metadata;
41 : mOutputPort(
"Output Audio",this)
46 void AudioMixer::CreatePortsAndControls()
50 for(
int i=0; i<mConfig.GetNumberOfInPorts(); i++ )
52 std::stringstream number(
"");
56 inPort->
SetHop( portSize );
57 mInputPorts.push_back( inPort );
59 mInputControls.push_back(
new FloatInControl(
"Gain " + number.str(),
this) );
61 unsigned int inPortsNumber=mConfig.GetNumberOfInPorts();
63 bool useConfigGains = mConfig.HasDefaultGains();
66 gainsArray=mConfig.GetDefaultGains();
67 unsigned numberofConfiguredGains=gainsArray.
Size();
68 gainsArray.
Resize(inPortsNumber);
69 gainsArray.
SetSize(inPortsNumber);
70 for (
unsigned i=numberofConfiguredGains;i<gainsArray.
Size();i++)
74 mConfig.SetDefaultGains(gainsArray);
76 for(
unsigned int i=0; i<inPortsNumber; i++ )
79 mInputControls[i]->DoControl(gainsArray[i]);
82 mInputControls[i]->DoControl(1.);
85 mOutputPort.
SetSize( portSize );
86 mOutputPort.
SetHop( portSize );
89 void AudioMixer::RemovePortsAndControls()
91 std::vector< AudioInPort* >::iterator itInPort;
92 for(itInPort=mInputPorts.begin(); itInPort!=mInputPorts.end(); itInPort++)
96 std::vector< FloatInControl* >::iterator itInControl;
97 for(itInControl=mInputControls.begin(); itInControl!=mInputControls.end(); itInControl++)
99 mInputControls.clear();
108 RemovePortsAndControls();
109 CreatePortsAndControls();
117 unsigned int numInPorts = mConfig.GetNumberOfInPorts();
120 TData * output = mOutputPort.
GetAudio().GetBuffer().GetPtr();
121 TData * inputs[numInPorts];
123 for (
unsigned int i = 0; i<numInPorts; i++)
125 inputs[i]=mInputPorts[i]->GetAudio().GetBuffer().GetPtr();
126 controls[i]=mInputControls[i]->GetLastValue();
129 for (
unsigned int sample=0; sample < frameSize; sample++)
132 for (
unsigned int inPort=0; inPort< numInPorts; inPort++)
134 sum += inputs[inPort][sample] * controls[inPort];
136 output[sample] = sum * normConstant;
140 for (
unsigned int inPort=0; inPort<numInPorts; inPort++)
141 mInputPorts[inPort]->Consume();