00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "Selector.h"
00024
00025 using namespace std;
00026 using namespace Marsyas;
00027
00028 Selector::Selector(mrs_string name):MarSystem("Selector", name)
00029 {
00030 addControls();
00031 }
00032
00033 Selector::Selector(const Selector& a) : MarSystem(a)
00034 {
00035 ctrl_enabled_ = getctrl("mrs_realvec/enabled");
00036 }
00037
00038 Selector::~Selector()
00039 {
00040 }
00041
00042
00043 MarSystem*
00044 Selector::clone() const
00045 {
00046 return new Selector(*this);
00047 }
00048
00049 void
00050 Selector::addControls()
00051 {
00052 addctrl("mrs_natural/disable", -1);
00053 setctrlState("mrs_natural/disable", true);
00054 addctrl("mrs_natural/enable", -1);
00055 setctrlState("mrs_natural/enable", true);
00056
00057 addctrl("mrs_realvec/enabled", realvec(), ctrl_enabled_);
00058 }
00059
00060 void
00061 Selector::myUpdate(MarControlPtr sender)
00062 {
00063 MRSDIAG("Selector.cpp - Selector:myUpdate");
00064
00065 MarControlAccessor acc(ctrl_enabled_);
00066 mrs_realvec& enabled = acc.to<mrs_realvec>();
00067
00068
00069
00070
00071
00072 if ((mrs_natural)enabled.getSize() < inObservations_)
00073 {
00074 enabled.create(inObservations_);
00075 enabled.setval(1.0);
00076 }
00077
00078
00079
00080
00081 disable_ = getctrl("mrs_natural/disable")->to<mrs_natural>();
00082 if (disable_ != -1 && disable_ < inObservations_)
00083 {
00084 enabled(disable_) = 0.0;
00085 setctrl("mrs_natural/disable", -1);
00086 }
00087 else
00088 setctrl("mrs_natural/disable", -1);
00089
00090
00091
00092
00093
00094 enable_ = getctrl("mrs_natural/enable")->to<mrs_natural>();
00095 if (enable_ != -1 && enable_ < inObservations_)
00096 {
00097 enabled(enable_) = 1.0;
00098 setctrl("mrs_natural/enable", -1);
00099 }
00100 else
00101 setctrl("mrs_natural/enable", -1);
00102
00103
00104
00105
00106 mrs_natural total_enabled = 0;
00107 for (mrs_natural i=0; i < enabled.getSize(); ++i) {
00108 if (enabled(i) > 0.1)
00109 total_enabled++;
00110 }
00111
00112 ctrl_onObservations_->setValue(total_enabled, NOUPDATE);
00113 ctrl_onSamples_->setValue(ctrl_inSamples_, NOUPDATE);
00114 ctrl_osrate_->setValue(ctrl_israte_, NOUPDATE);
00115
00116 }
00117
00118 void
00119 Selector::myProcess(realvec& in, realvec& out)
00120 {
00121 MarControlAccessor acc(ctrl_enabled_);
00122 mrs_realvec& enabled = acc.to<mrs_realvec>();
00123
00124 mrs_natural outIndex = 0;
00125 mrs_natural t,o;
00126
00127
00128
00129
00130
00131 for (o=0; o < inObservations_; o++)
00132 if (enabled(o)) {
00133 for (t = 0; t < inSamples_; t++)
00134 {
00135 out(outIndex,t) = in(o,t);
00136 }
00137 outIndex++;
00138 }
00139 }