00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "ClassOutputSink.h"
00020
00021
00022 using std::ostringstream;
00023 using std::ofstream;
00024 using std::cout;
00025 using std::endl;
00026
00027 using namespace Marsyas;
00028
00029
00030 ClassOutputSink::ClassOutputSink(mrs_string name):MarSystem("ClassOutputSink", name)
00031 {
00032
00033
00034 mos_ = NULL;
00035
00036 addControls();
00037 }
00038
00039 ClassOutputSink::~ClassOutputSink()
00040 {
00041 if (mos_ != NULL)
00042 mos_->close();
00043 delete mos_;
00044 }
00045
00046 MarSystem*
00047 ClassOutputSink::clone() const
00048 {
00049 return new ClassOutputSink(*this);
00050 }
00051
00052 void
00053 ClassOutputSink::addControls()
00054 {
00055 addctrl("mrs_natural/memSize", 40);
00056 addctrl("mrs_natural/nLabels", 2);
00057
00058 addctrl("mrs_string/filename", "mugle.mf");
00059 setctrlState("mrs_string/filename", true);
00060 setctrlState("mrs_natural/nLabels", true);
00061 addctrl("mrs_string/labelNames", "Music,Speech");
00062 setctrlState("mrs_string/labelNames", true);
00063 addctrl("mrs_bool/silent", true);
00064 }
00065
00066 void
00067 ClassOutputSink::putHeader()
00068 {
00069 if ((filename_ != getctrl("mrs_string/filename")->to<mrs_string>()))
00070 {
00071 if (mos_ != NULL)
00072 {
00073 mos_->close();
00074 delete mos_;
00075 if (filename_ == "mugle.mf")
00076 remove(filename_.c_str());
00077 }
00078
00079
00080 filename_ = getctrl("mrs_string/filename")->to<mrs_string>();
00081
00082 mos_ = new ofstream;
00083 mos_->open(filename_.c_str());
00084
00085 }
00086 }
00087
00088
00089 void
00090 ClassOutputSink::myUpdate(MarControlPtr sender)
00091 {
00092 (void) sender;
00093 MRSDIAG("ClassOutputSink.cpp - ClassOutputSink:myUpdate");
00094
00095 setctrl("mrs_natural/onSamples", getctrl("mrs_natural/inSamples"));
00096 setctrl("mrs_natural/onObservations", getctrl("mrs_natural/inObservations"));
00097 setctrl("mrs_real/osrate", getctrl("mrs_real/israte"));
00098
00099 mrs_string labelNames = getctrl("mrs_string/labelNames")->to<mrs_string>();
00100
00101 labelNames_.clear();
00102
00103 mrs_string temp;
00104
00105 for (int i = 0; i < getctrl("mrs_natural/nLabels")->to<mrs_natural>(); ++i)
00106 {
00107 mrs_string labelName;
00108
00109
00110 labelName = labelNames.substr(0, labelNames.find(","));
00111 temp = labelNames.substr(labelNames.find(",")+1, labelNames.length());
00112 labelNames = temp;
00113 labelNames_.push_back(labelName);
00114 }
00115 count_ = 0;
00116
00117 putHeader();
00118 }
00119
00120
00121 void
00122 ClassOutputSink::myProcess(realvec& in, realvec& out)
00123 {
00124
00125
00126 mrs_natural p;
00127 mrs_natural g;
00128 mrs_natural o,t;
00129
00130
00131 for (o=0; o < inObservations_; o++)
00132 for (t = 0; t < inSamples_; t++)
00133 {
00134 out(o,t) = in(o,t);
00135 }
00136
00137 if (!getctrl("mrs_bool/silent")->isTrue())
00138 {
00139 for (o = 0; o < inObservations_; o++)
00140 for (t = 0; t < inSamples_; t++)
00141 {
00142 p = (mrs_natural)in(o,t);
00143 g = (mrs_natural)in(1,t);
00144 if (o < inObservations_-1)
00145 cout << "Predicted: " << labelNames_[p] << endl;
00146 (*mos_) << labelNames_[p] << endl;
00147 }
00148 }
00149
00150 }
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162