Marsyas  0.6.0-alpha
/usr/src/RPM/BUILD/marsyas-0.6.0/src/marsyas/marsystems/ChromaScale.cpp
Go to the documentation of this file.
00001 /*
00002  *  ChromaScale.cpp
00003  *  testMood
00004  *
00005  *  Created by tsunoo on 09/09/10.
00006  *  Copyright 2009 Emiru Tsunoo. All rights reserved.
00007  *
00008  */
00009 
00010 #include "ChromaScale.h"
00011 
00012 using std::ostringstream;
00013 using namespace Marsyas;
00014 
00015 ChromaScale::ChromaScale(mrs_string name): MarSystem("ChromaScale", name)
00016 {
00017   addControls();
00018 }
00019 
00020 ChromaScale::ChromaScale(const ChromaScale& a): MarSystem(a)
00021 {
00022 }
00023 
00024 ChromaScale::~ChromaScale()
00025 {
00026 }
00027 
00028 MarSystem*
00029 ChromaScale::clone() const
00030 {
00031   return new ChromaScale(*this);
00032 }
00033 
00034 void ChromaScale::addControls()
00035 {
00036 }
00037 
00038 void ChromaScale::myUpdate(MarControlPtr sender)
00039 {
00040   (void) sender;  //suppress warning of unused parameter(s)
00041   ctrl_onObservations_->setValue(6, NOUPDATE);
00042   ctrl_onSamples_->setValue(inSamples_, NOUPDATE);
00043   ctrl_osrate_->setValue(israte_, NOUPDATE);
00044   ostringstream oss;
00045 
00046   for(mrs_natural o=0; o<ctrl_onObservations_->to<mrs_natural>(); o++) {
00047     oss << "ChromaScale_" << o << ",";
00048   }
00049   ctrl_onObsNames_->setValue(oss.str(), NOUPDATE);
00050 }
00051 
00052 void
00053 ChromaScale::myProcess(realvec& in, realvec& out)
00054 {
00055   mrs_natural i, j, k, tmp;
00056   mrs_real s, s12;
00057 
00058   if(inSamples_ > 0) {
00059     for(i=0; i<inSamples_; ++i) {
00060       for(j=0; j<6; j++) {
00061         out(j,i) = 0.0;
00062       }
00063       s = 0.0;
00064       for(k=0; k<inObservations_; k++) {
00065         s += in(k,i);
00066       }
00067       s12 = s/12.0;
00068       if(s > 0) {
00069         for(j=0; j<6; j++) {
00070           for(k=0; k<inObservations_; k++) {
00071             tmp = k+j+1;
00072             if(tmp >= inObservations_) {
00073               tmp -= inObservations_;
00074             }
00075             out(j,i) += (s12-in(k,i))*(s12-in(tmp,i));
00076           }
00077           out(j,i) /= s*s;
00078         }
00079       }
00080     }
00081   }
00082 }