00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "StereoSpectrumSources.h"
00020 #include "Peaker.h"
00021
00022 using namespace std;
00023 using namespace Marsyas;
00024
00025 StereoSpectrumSources::StereoSpectrumSources(mrs_string name):MarSystem("StereoSpectrumSources", name)
00026 {
00027 panPeaker_ = new Peaker("panPeaker");
00028 }
00029
00030 StereoSpectrumSources::StereoSpectrumSources(const StereoSpectrumSources& a):MarSystem(a)
00031 {
00032 panPeaker_ = new Peaker("panPeaker");
00033 }
00034
00035 StereoSpectrumSources::~StereoSpectrumSources()
00036 {
00037 delete panPeaker_;
00038 }
00039
00040 MarSystem*
00041 StereoSpectrumSources::clone() const
00042 {
00043 return new StereoSpectrumSources(*this);
00044 }
00045
00046 void
00047 StereoSpectrumSources::myUpdate(MarControlPtr sender)
00048 {
00049 (void) sender;
00050 MRSDIAG("StereoSpectrumSources.cpp - StereoSpectrumSources:myUpdate");
00051
00052 ctrl_onSamples_->setValue(ctrl_inSamples_, NOUPDATE);
00053 ctrl_onObservations_->setValue(1, NOUPDATE);
00054 ctrl_osrate_->setValue(ctrl_israte_, NOUPDATE);
00055 ctrl_onObsNames_->setValue("StereoSpectrumSources,", NOUPDATE);
00056
00057 panPeaker_->updControl("mrs_natural/inSamples", inObservations_-1);
00058 panPeaker_->updControl("mrs_natural/inObservations", 1);
00059 panPeaker_->updControl("mrs_natural/peakStart", 0);
00060 panPeaker_->updControl("mrs_natural/peakEnd", inObservations_-2);
00061 panPeaker_->updControl("mrs_real/peakStrength", 1.0);
00062 }
00063
00064 void
00065 StereoSpectrumSources::myProcess(realvec& in, realvec& out)
00066 {
00067 mrs_natural t,o;
00068 for (t = 0; t < inSamples_; t++)
00069 {
00070
00071
00072 in.getCol(t, orderedPans_);
00073 orderedPans_.sort();
00074
00075
00076
00077
00078
00079 panChanges_.create(inObservations_-1);
00080 for(o=0; o<inObservations_-1; ++o)
00081 panChanges_(o) = orderedPans_(o+1)-orderedPans_(o);
00082
00083
00084
00085
00086
00087
00088 panPeaks_.create(inObservations_-1);
00089 panPeaker_->process(panChanges_, panPeaks_);
00090
00091
00092
00093
00094 out(0, t) = 0.0;
00095 for(o=0; o < inObservations_-1; ++o)
00096 out(0,t) += (panPeaks_(o) != 0.0);
00097
00098
00099
00100
00101
00102 }
00103 }