00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "Series.h"
00020
00021 using namespace std;
00022 using namespace Marsyas;
00023
00024 Series::Series(mrs_string name):MarSystem("Series",name)
00025 {
00026 isComposite_ = true;
00027 addControls();
00028 }
00029
00030 Series::~Series()
00031 {
00032 }
00033
00034 MarSystem*
00035 Series::clone() const
00036 {
00037 return new Series(*this);
00038 }
00039
00040 void
00041 Series::addControls()
00042 {
00043 }
00044
00045
00046 void
00047 Series::myUpdate(MarControlPtr sender)
00048 {
00049 if (marsystemsSize_ != 0)
00050 {
00051
00052 marsystems_[0]->setctrl("mrs_natural/inObservations", inObservations_);
00053 marsystems_[0]->setctrl("mrs_natural/inSamples", inSamples_);
00054 marsystems_[0]->setctrl("mrs_real/israte", israte_);
00055 marsystems_[0]->setctrl("mrs_string/inObsNames", inObsNames_);
00056 marsystems_[0]->setctrl("mrs_natural/inStabilizingDelay", inStabilizingDelay_);
00057 marsystems_[0]->update();
00058
00059
00060 for (mrs_natural i=1; i < marsystemsSize_; ++i)
00061 {
00062 marsystems_[i]->setctrl(marsystems_[i]->ctrl_inObsNames_,
00063 marsystems_[i-1]->ctrl_onObsNames_);
00064 marsystems_[i]->setctrl(marsystems_[i]->ctrl_inObservations_,
00065 marsystems_[i-1]->ctrl_onObservations_);
00066 marsystems_[i]->setctrl(marsystems_[i]->ctrl_inSamples_,
00067 marsystems_[i-1]->ctrl_onSamples_);
00068 marsystems_[i]->setctrl(marsystems_[i]->ctrl_israte_,
00069 marsystems_[i-1]->ctrl_osrate_);
00070 marsystems_[i]->setctrl(marsystems_[i]->ctrl_inStabilizingDelay_,
00071 marsystems_[i-1]->ctrl_onStabilizingDelay_);
00072 marsystems_[i]->update();
00073 }
00074
00075
00076 updControl(ctrl_onObsNames_, marsystems_[marsystemsSize_-1]->ctrl_onObsNames_, NOUPDATE);
00077 updControl(ctrl_onSamples_, marsystems_[marsystemsSize_-1]->ctrl_onSamples_, NOUPDATE);
00078 updControl(ctrl_onObservations_, marsystems_[marsystemsSize_-1]->ctrl_onObservations_, NOUPDATE);
00079 updControl(ctrl_osrate_, marsystems_[marsystemsSize_-1]->ctrl_osrate_, NOUPDATE);
00080 updControl(ctrl_onStabilizingDelay_, marsystems_[marsystemsSize_-1]->ctrl_onStabilizingDelay_, NOUPDATE);
00081
00082 for (mrs_natural i=0; i< marsystemsSize_-1; ++i)
00083 {
00084 MarControlAccessor acc(marsystems_[i]->ctrl_processedData_, NOUPDATE);
00085 realvec& processedData = acc.to<mrs_realvec>();
00086
00087 if (processedData.getRows() != marsystems_[i]->ctrl_onObservations_->to<mrs_natural>() ||
00088 processedData.getCols() != marsystems_[i]->ctrl_onSamples_->to<mrs_natural>())
00089 {
00090 processedData.create(marsystems_[i]->ctrl_onObservations_->to<mrs_natural>(),
00091 marsystems_[i]->ctrl_onSamples_->to<mrs_natural>());
00092 }
00093 }
00094 }
00095 else
00096 MarSystem::myUpdate(sender);
00097 }
00098
00099 void
00100 Series::myProcess(realvec& in, realvec& out)
00101 {
00102
00103
00104 if (marsystemsSize_ == 1)
00105 marsystems_[0]->process(in,out);
00106 else if(marsystemsSize_ > 1)
00107 {
00108 for (mrs_natural i = 0; i < marsystemsSize_; ++i)
00109 {
00110 if (i==0)
00111 {
00112 MarControlAccessor acc(marsystems_[i]->ctrl_processedData_);
00113 realvec& slice = acc.to<mrs_realvec>();
00114 marsystems_[i]->process(in, slice);
00115 }
00116 else if (i == marsystemsSize_-1)
00117 {
00118 MarControlAccessor acc(marsystems_[i-1]->ctrl_processedData_, true, true);
00119 realvec& slice = acc.to<mrs_realvec>();
00120 marsystems_[i]->process(slice, out);
00121 }
00122 else
00123 {
00124 MarControlAccessor acc1(marsystems_[i-1]->ctrl_processedData_, true, true);
00125 realvec& slice1 = acc1.to<mrs_realvec>();
00126 MarControlAccessor acc2(marsystems_[i]->ctrl_processedData_);
00127 realvec& slice2 = acc2.to<mrs_realvec>();
00128 marsystems_[i]->process(slice1, slice2);
00129 }
00130 }
00131 }
00132 else if(marsystemsSize_ == 0)
00133 {
00134 MRSWARN("Series::process: composite has no children MarSystems - passing input to output without changes.");
00135 out = in;
00136 }
00137
00138
00139 }