00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "SliceShuffle.h"
00020
00021 using namespace std;
00022 using namespace Marsyas;
00023
00024 SliceShuffle::SliceShuffle(mrs_string name) : MarSystem("SliceShuffle", name)
00025 {
00027 addControls();
00028 }
00029
00030 SliceShuffle::SliceShuffle(const SliceShuffle& a) : MarSystem(a)
00031 {
00034 ctrl_bufferSize_ = getControl("mrs_natural/bufferSize");
00035 }
00036
00037
00038 SliceShuffle::~SliceShuffle()
00039 {
00040 }
00041
00042 MarSystem*
00043 SliceShuffle::clone() const
00044 {
00045 return new SliceShuffle(*this);
00046 }
00047
00048 void
00049 SliceShuffle::addControls()
00050 {
00052
00053 addControl("mrs_natural/bufferSize", 10, ctrl_bufferSize_);
00054 setctrlState("mrs_natural/bufferSize", true);
00055 }
00056
00057 void
00058 SliceShuffle::myUpdate(MarControlPtr sender)
00059 {
00060 MRSDIAG("SliceShuffle.cpp - SliceShuffle:myUpdate");
00061
00063 MarSystem::myUpdate(sender);
00064
00065
00066 bufferSize_ = getControl("mrs_natural/bufferSize")->to<mrs_natural>();
00067
00068
00069 sliceBuffer_.stretch(inObservations_, inSamples_ * bufferSize_);
00070 sliceBuffer_.setval(0.0);
00071 }
00072
00073 void
00074 SliceShuffle::myProcess(realvec& in, realvec& out)
00075 {
00076 mrs_natural t,o;
00078 mrs_natural slice_t = (rand() % bufferSize_) * inSamples_;
00079
00081 for (o = 0; o < inObservations_; o++)
00082 {
00083 for (t = 0; t < inSamples_; t++)
00084 {
00085 out(o, t) = sliceBuffer_(o, slice_t + t);
00086 sliceBuffer_(o, slice_t + t) = in(o, t);
00087 }
00088 }
00089 }