// Copyright (C) 1999 Jean-Marc Valin #include "BufferedNode.h" #include "Buffer.h" #include "Vector.h" #include using namespace std; namespace FD { class SmoothAdd; DECLARE_NODE(SmoothAdd) /*Node * * @name SmoothAdd * @category DSP:Manip * @description No description available * * @input_name LEFT * @input_description No description available * * @input_name CENTER * @input_description No description available * * @input_name RIGHT * @input_description No description available * * @output_name OUTPUT * @output_description No description available * * @parameter_name LENGTH * @parameter_description No description available * END*/ class SmoothAdd : public BufferedNode { int input1ID; int input2ID; int input3ID; int outputID; int length; vector hanning; public: SmoothAdd(string nodeName, ParameterSet params) : BufferedNode(nodeName, params) { input1ID = addInput("LEFT"); input2ID = addInput("CENTER"); input3ID = addInput("RIGHT"); outputID = addOutput("OUTPUT"); length = dereference_cast (parameters.get("LENGTH")); } virtual void initialize() { hanning.resize(length); for (int i=0;iBufferedNode::initialize(); } void calculate(int output_id, int count, Buffer &out) { ObjectRef input1Value = getInput(input1ID, count); ObjectRef input2Value = getInput(input2ID, count); ObjectRef input3Value = getInput(input3ID, count); const Vector &in2 = object_cast > (input2Value); out[count] = Vector::alloc(length); Vector &output = object_cast > (out[count]); for (int i=0;i> 1; const Vector &in1 = object_cast > (input1Value); for (int i=0;i &in3 = object_cast > (input3Value); for (int i=half;i