// Copyright (C) 2001 Locus Dialog (author: Jean-Marc Valin)
#include "BufferedNode.h"
#include "Buffer.h"
#include "Vector.h"
#include "Stream.h"
using namespace std;
namespace FD {
class FrameLabel;
DECLARE_NODE(FrameLabel)
/*Node
*
* @name FrameLabel
* @category DSP:Audio
* @description Applies a gain to a vector
*
* @input_name INPUT
* @input_type Stream
* @input_description Input stream
*
* @output_name OUTPUT
* @output_type String
* @output_description Frame label
*
* @parameter_name FRAME_ADVANCE
* @parameter_type int
* @parameter_description Frame advance to use
*
END*/
class FrameLabel : public BufferedNode {
int inputID;
int outputID;
RCPtr<String> currentTag;
int currStart;
int currEnd;
int frameAdv;
public:
FrameLabel(string nodeName, ParameterSet params)
: BufferedNode(nodeName, params)
{
inputID = addInput("INPUT");
outputID = addOutput("OUTPUT");
frameAdv = dereference_cast<int> (parameters.get("FRAME_ADVANCE"));
currentTag = new String();
currStart=-1;
currEnd=-1;
inOrder=true;
}
void reset()
{
currStart=-1;
currEnd=-1;
BufferedNode::reset();
}
void calculate(int output_id, int count, Buffer &out)
{
ObjectRef inputValue = getInput(inputID, count);
int sample = (count*frameAdv)+1;
while (sample > currEnd)
{
IStream &file = object_cast<IStream> (inputValue);
currentTag = new String();
file >> currStart;
if (currStart != currEnd+1)
throw new NodeException (this, "Start and end label don't fit",__FILE__, __LINE__);
file >> currEnd;
//This had to be changed, not sure why
//file >> *currentTag;
string tmp;
file >> tmp;
*currentTag = tmp;
}
out[count] = currentTag;
}
};
}//namespace FD
syntax highlighted by Code2HTML, v. 0.9.1