00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "BeatHistogramFromPeaks.h"
00020
00021 using std::ostringstream;
00022 using namespace Marsyas;
00023
00024
00025 BeatHistogramFromPeaks::BeatHistogramFromPeaks(mrs_string name):MarSystem("BeatHistogramFromPeaks",name)
00026 {
00027 addControls();
00028 }
00029
00030
00031 BeatHistogramFromPeaks::~BeatHistogramFromPeaks()
00032 {
00033 }
00034
00035
00036 MarSystem*
00037 BeatHistogramFromPeaks::clone() const
00038 {
00039 return new BeatHistogramFromPeaks(*this);
00040 }
00041
00042 void
00043 BeatHistogramFromPeaks::addControls()
00044 {
00045 addctrl("mrs_real/gain", 1.0);
00046 addctrl("mrs_bool/reset", false);
00047 setctrlState("mrs_bool/reset", true);
00048 addctrl("mrs_natural/startBin", 0);
00049 setctrlState("mrs_natural/startBin", true);
00050 addctrl("mrs_natural/endBin", 100);
00051 setctrlState("mrs_natural/endBin", true);
00052 }
00053
00054 void
00055 BeatHistogramFromPeaks::myUpdate(MarControlPtr sender)
00056 {
00057 (void) sender;
00058 MRSDIAG("BeatHistogramFromPeaks.cpp - BeatHistogramFromPeaks:myUpdate");
00059
00060 startBin_ = getctrl("mrs_natural/startBin")->to<mrs_natural>();
00061 endBin_ = getctrl("mrs_natural/endBin")->to<mrs_natural>();
00062 reset_ = getctrl("mrs_bool/reset")->to<mrs_bool>();
00063
00064 setctrl("mrs_natural/onSamples", endBin_ - startBin_);
00065 setctrl("mrs_natural/onObservations", getctrl("mrs_natural/inObservations"));
00066 setctrl("mrs_real/osrate", getctrl("mrs_real/israte"));
00067 }
00068
00069
00070 void
00071 BeatHistogramFromPeaks::myProcess(realvec& in, realvec& out)
00072 {
00073 mrs_natural t,o;
00074 if (reset_) {
00075 out.setval(0.0);
00076 reset_ = false;
00077 setctrl("mrs_bool/reset", false);
00078 }
00079
00080 mrs_natural bin=0;
00081 mrs_real amp;
00082
00083 for (o=0; o < inObservations_; o++)
00084 for (t = 0; t < inSamples_/2; t++)
00085 {
00086 bin = (mrs_natural)(in(o,2*t+1)+0.5);
00087 amp = in(o,2*t);
00088
00089 if ((bin < endBin_ - startBin_)&&(bin > 1))
00090 {
00091
00092 out(0,bin) += (amp * (bin-startBin_));
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103 }
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132 }
00133
00134 }