00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "Peak2Rms.h"
00020
00021 using std::ostringstream;
00022 using namespace Marsyas;
00023
00024 Peak2Rms::Peak2Rms(mrs_string name):MarSystem("Peak2Rms", name)
00025 {
00026 }
00027
00028 Peak2Rms::Peak2Rms(const Peak2Rms& a) : MarSystem(a)
00029 {
00030 }
00031
00032 Peak2Rms::~Peak2Rms()
00033 {
00034 }
00035
00036 MarSystem*
00037 Peak2Rms::clone() const
00038 {
00039 return new Peak2Rms(*this);
00040 }
00041
00042 void
00043 Peak2Rms::myUpdate(MarControlPtr sender)
00044 {
00045 (void) sender;
00046 setctrl("mrs_natural/onObservations",1);
00047 setctrl("mrs_natural/onSamples",1);
00048 setctrl("mrs_real/osRate", israte_ / inSamples_);
00049 }
00050
00051 void
00052 Peak2Rms::myProcess(realvec& in, realvec& out)
00053 {
00054 mrs_real peak = in.maxval();
00055 mrs_real rms = 0.0;
00056 mrs_natural t;
00057
00058 for (t = 0; t < inSamples_; t++)
00059 {
00060 rms += in(0,t) * in(0,t);
00061 }
00062 rms /= inSamples_;
00063 rms = sqrt(rms);
00064 out(0) = peak/rms;
00065 }