Marsyas
0.6.0-alpha
|
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 }