00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "TimeStretch.h"
00020
00021 using namespace std;
00022 using namespace Marsyas;
00023
00024 TimeStretch::TimeStretch(mrs_string name):MarSystem("TimeStretch",name)
00025 {
00026
00027
00028
00029 addControls();
00030 }
00031
00032 TimeStretch::~TimeStretch()
00033 {
00034 }
00035
00036 MarSystem*
00037 TimeStretch::clone() const
00038 {
00039 return new TimeStretch(*this);
00040 }
00041
00042 void
00043 TimeStretch::addControls()
00044 {
00045 addctrl("mrs_real/factor", 1.0);
00046 }
00047
00048 void
00049 TimeStretch::myProcess(realvec& in, realvec& out)
00050 {
00051
00052 mrs_real factor = getctrl("mrs_real/factor")->to<mrs_real>();
00053 mrs_natural inSamples = getctrl("mrs_natural/inSamples")->to<mrs_natural>();
00054
00055 for (mrs_natural t=0; t < inSamples; t++)
00056 {
00057
00058 ni = t* factor;
00059 li = ((unsigned long)ni) % inSamples;
00060 ri = li + 1;
00061
00062 w_ = ni - li;
00063 if (ri < inSamples)
00064 out(0,t) = in(li) + w_ * (in(0,ri) - in(0,li));
00065 else
00066 out(0,t) = in(li);
00067 }
00068 }
00069
00070
00071
00072
00073
00074
00075
00076
00077