33 "key",
"AudioBufferMixer",
34 "category",
"Arithmetic Operations",
35 "description",
"AudioBufferMixer",
38 static FactoryRegistrator<ProcessingFactory, AudioBufferMixer>
reg =
metadata;
42 : mOutputPort(
"Output Audio",this)
47 void AudioBufferMixer::CreatePortsAndControls()
51 for(
int i=0; i<mConfig.GetNumberOfInPorts(); i++ )
53 std::stringstream number(
"");
58 mInputPorts.push_back( inPort );
60 mInputControls.push_back(
new FloatInControl(
"Gain " + number.str(),
this) );
62 unsigned int inPortsNumber=mConfig.GetNumberOfInPorts();
64 bool useConfigGains = mConfig.HasDefaultGains();
67 gainsArray=mConfig.GetDefaultGains();
68 unsigned numberofConfiguredGains=gainsArray.
Size();
69 gainsArray.
Resize(inPortsNumber);
70 gainsArray.
SetSize(inPortsNumber);
71 for (
unsigned i=numberofConfiguredGains;i<gainsArray.
Size();i++)
75 mConfig.SetDefaultGains(gainsArray);
77 for(
unsigned int i=0; i<inPortsNumber; i++ )
80 mInputControls[i]->DoControl(gainsArray[i]);
83 mInputControls[i]->DoControl(1.);
90 void AudioBufferMixer::RemovePortsAndControls()
92 std::vector< InPort<Audio>* >::iterator itInPort;
93 for(itInPort=mInputPorts.begin(); itInPort!=mInputPorts.end(); itInPort++)
97 std::vector< FloatInControl* >::iterator itInControl;
98 for(itInControl=mInputControls.begin(); itInControl!=mInputControls.end(); itInControl++)
100 mInputControls.clear();
109 RemovePortsAndControls();
110 CreatePortsAndControls();
117 unsigned int numInPorts = mConfig.GetNumberOfInPorts();
118 unsigned int frameSize = mInputPorts[0]->GetData().GetSize();
121 std::cout <<
"AudioBufferMixer: "<< frameSize << std::endl;
127 TData * output = so.GetBuffer().GetPtr();
128 TData * inputs[numInPorts];
130 for (
unsigned int i = 0; i<numInPorts; i++)
132 inputs[i]=mInputPorts[i]->GetData().GetBuffer().GetPtr();
133 controls[i]=mInputControls[i]->GetLastValue();
136 for (
unsigned int sample=0; sample < frameSize; sample++)
139 for (
unsigned int inPort=0; inPort< numInPorts; inPort++)
141 sum += inputs[inPort][sample] * controls[inPort];
143 output[sample] = sum * normConstant;
149 for (
unsigned int inPort=0; inPort<numInPorts; inPort++)
150 mInputPorts[inPort]->Consume();