Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Showing
with 1918 additions and 700 deletions
......@@ -3,7 +3,6 @@
#include "PiPo.h"
#include "PiPoHost.h"
#include "PiPoCollection.h"
//#ifdef EXTERNAL_JSONCPP_PATH
#define EXTERNAL_JSONCPP_PATH "json.h"
......@@ -12,13 +11,12 @@
#define MIN_PIPO_SAMPLERATE (1.0 / 31536000000.0) /* once a year */
#define MAX_PIPO_SAMPLERATE (96000000000.0)
#define DEFAULT_PIPO_SAMPLERATE 1000.0
#define PIPO_OUT_RING_SIZE 2
struct pipoStreamAttributes {
pipoStreamAttributes() : // default parameters suited for audio
struct RapidPiPoStreamAttributes {
RapidPiPoStreamAttributes() : // default parameters suited for audio
hasTimeTags(false),
rate(MIN_PIPO_SAMPLERATE),
rate(DEFAULT_PIPO_SAMPLERATE),
offset(0),
width(1),
height(1),
......@@ -38,212 +36,25 @@ struct pipoStreamAttributes {
unsigned int maxFrames;
};
//class PiPoObserver;
class PiPoOut;
//================================ H O S T ===================================//
class PiPoHost : public PiPo::Parent {
friend class PiPoOut;
private:
PiPo *graph;
std::string graphName;
PiPoOut *out;
// PiPoObserver *obs;
PiPoStreamAttributes inputStreamAttrs;
PiPoStreamAttributes outputStreamAttrs;
class RapidPiPoHost : public PiPoHost {
public:
// PiPoHost(PiPoObserver *obs);
PiPoHost();
~PiPoHost();
// PiPoObserver *getObserver();
virtual bool setGraph(std::string name);
virtual void clearGraph();
// override this method when inheriting !!!
virtual void onNewFrameOut(double time, std::vector<PiPoValue> &frame);
virtual std::vector<PiPoValue> getLastFrameOut();
virtual int setInputStreamAttributes(pipoStreamAttributes &sa, bool propagate = true);
virtual pipoStreamAttributes getOutputStreamAttributes();
virtual int frames(double time, double weight, PiPoValue *values, unsigned int size,
unsigned int num);
// virtual bool setAttr(const std::string &attrName, bool value);
// virtual bool setAttr(const std::string &attrName, int value);
virtual bool setAttr(const std::string &attrName, double value);
virtual bool setAttr(const std::string &attrName, const std::vector<double> &values);
virtual bool setAttr(const std::string &attrName, const std::string &value); // for enums
// virtual const std::vector<std::string>& getAttrNames();
// virtual bool isBoolAttr(const std::string &attrName);
// virtual bool isEnumAttr(const std::string &attrName);
// virtual bool isIntAttr(const std::string &attrName);
// virtual bool isIntArrayAttr(const std::string &attrName);
// virtual bool isFloatAttr(const std::string &attrName);
// virtual bool isFloatArrayAttr(const std::string &attrName);
// virtual bool isStringAttr(const std::string &attrName);
virtual std::vector<std::string> getAttrNames();
virtual double getDoubleAttr(const std::string &attrName);
virtual std::vector<double> getDoubleArrayAttr(const std::string &attrName);
virtual std::string getEnumAttr(const std::string &attrName);
/** Get a JSON representation of the model in the form of a styled string */
virtual std::string getJSON();
/** Write a JSON model description to specified file path */
virtual void writeJSON(const std::string &filepath);
/** configure empty model with string. See getJSON() */
virtual bool putJSON(const std::string &jsonMessage);
/** read a JSON file at file path and build a modelSet from it */
virtual bool readJSON(const std::string &filepath);
virtual int setInputStreamAttributes(RapidPiPoStreamAttributes &a);
virtual void onNewFrame(double time, double weight, PiPoValue *values, unsigned int size);
/** Get a JSON representation of the model in the form of a styled string */
virtual std::string getJSON();
/** Write a JSON model description to specified file path */
virtual void writeJSON(const std::string &filepath);
/** configure empty model with string. See getJSON() */
virtual bool putJSON(const std::string &jsonMessage);
/** read a JSON file at file path and build a modelSet from it */
virtual bool readJSON(const std::string &filepath);
// int streamAttributes(bool hasTimeTags, double rate, double offset,
// unsigned int width, unsigned int height,
// const std::vector<std::string> &labels,
// bool hasVarSize, double domain, unsigned int maxFrames,
// bool propagate = true);
// void propagateInputAttributes();
// void streamAttributesChanged(PiPo *pipo, PiPo::Attr *attr);
// void signalError(PiPo *pipo, std::string errorMsg);
// void signalWarning(PiPo *pipo, std::string warningMsg);
/*
void setInputHasTimeTags(bool hasTimeTags, bool propagate = true);
void setInputFrameRate(double rate, bool propagate = true);
void setInputFrameOffset(double offset, bool propagate = true);
void setInputDims(int width, int height, bool propagate = true);
void setInputLabels(const std::vector<std::string> &labels, bool propagate = true);
void setInputHasVarSize(bool hasVarSize, bool propagate = true);
void setInputDomain(double domain, bool propagate = true);
void setInputMaxFrames(int maxFrames, bool propagate = true);
bool getInputHasTimeTags();
double getInputFrameRate();
double getInputFrameOffset();
void getInputDims(int &width, int &height);
void getInputLabels(std::vector<std::string> &labels);
bool getInputHasVarSize();
double getInputDomain();
int getInputMaxFrames();
bool getOutputHasTimeTags();
double getOutputFrameRate();
double getOutputFrameOffset();
void getOutputDims(int &width, int &height);
void getOutputLabels(std::vector<std::string> &labels);
bool getOutputHasVarSize();
double getOutputDomain();
int getOutputMaxFrames();
// void setPiPoParam(PiPoParam *param);
//*/
protected:
private:
Json::Value toJSON();
bool fromJSON(Json::Value &jv);
private:
int propagateInputStreamAttributes();
void setOutputAttributes(bool hasTimeTags, double rate, double offset,
unsigned int width, unsigned int height,
const char **labels, bool hasVarSize,
double domain, unsigned int maxFrames);
};
//================================= PiPoOut ==================================//
class PiPoOut : public PiPo {
private:
PiPoHost *host;
std::atomic<int> writeIndex, readIndex;
std::vector<std::vector<PiPoValue>> ringBuffer;
// std::function<void(std::vector<PiPoValue>, PiPoObserver *rpo)> frameCallback;
// std::function<void(std::vector<PiPoValue>)> simpleFrameCallback;
public:
PiPoOut(PiPoHost *host) :
PiPo((PiPo::Parent *)host) {
this->host = host;
writeIndex = 0;
readIndex = 0;
ringBuffer.resize(PIPO_OUT_RING_SIZE);
}
~PiPoOut() {}
int streamAttributes(bool hasTimeTags,
double rate, double offset,
unsigned int width, unsigned int height,
const char **labels, bool hasVarSize,
double domain, unsigned int maxFrames) {
this->host->setOutputAttributes(hasTimeTags, rate, offset, width, height,
labels, hasVarSize, domain, maxFrames);
for (int i = 0; i < PIPO_OUT_RING_SIZE; ++i) {
ringBuffer[i].resize(width * height);
}
return 0;
}
int frames(double time, double weight, float *values,
unsigned int size, unsigned int num) {
if (num > 0) {
for (int i = 0; i < num; ++i) {
for (int j = 0; j < size; ++j) {
ringBuffer[writeIndex][j] = values[i * size + j];
}
// atomic swap ?
writeIndex = 1 - writeIndex;
readIndex = 1 - writeIndex;
this->host->onNewFrameOut(time, ringBuffer[readIndex]);
if (writeIndex + 1 == PIPO_OUT_RING_SIZE) {
writeIndex = 0;
} else {
writeIndex++;
}
}
}
return 0;
}
//void setFrameCallback(std::function<void(std::vector<PiPoValue>,
// PiPoObserver *obs)> f) {
// frameCallback = f;
//}
// void setSimpleFrameCallback(std::function<void(std::vector<PiPoValue>)> f) {
// simpleFrameCallback = f;
// }
std::vector<PiPoValue> getLastFrame() {
std::vector<PiPoValue> f;
if (readIndex > -1) {
f = ringBuffer[readIndex];
}
return f;
}
};
#endif /* _RAPID_PIPO_HOST_H_ */
......@@ -3,7 +3,7 @@
#include "rapidPiPoHost.h"
typedef PiPoHost pipoHost;
typedef pipoStreamAttributes pipoStreamAttributes;
typedef RapidPiPoStreamAttributes signalAttributes;
typedef RapidPiPoHost signalProcessingHost;
# endif /* _RAPID_PIPO_TOOLS_H_ */
#endif /* _RAPID_PIPO_TOOLS_H_ */
/*
* signalProcessing.h
* Created by Michael Zbyszynski on 6 Feb 2017
/**
* @file signalProcessing.h
* @author Michael Zbyszynski
* @date 6 Feb 2017
* @copyright
* Copyright © 2017 Goldsmiths. All rights reserved.
*
* @ingroup signalprocessing
*/
#ifndef signalProcessing_h
#define signalProcessing_h
#include "rapidMix.h"
#include "rapidmix.h"
#include "maximilian.h"
#include "maxim.h"
#include "rapidStream.h"
#include "rapidPiPoTools.h"
#include "./rapidPiPoTools/rapidPiPoTools.h"
RAPIDMIX_BEGIN_NAMESPACE
namespace rapidmix {
/*
* Wrapper for signalProcessing modules, currently a collection of typedefs
*/
typedef maxiFFT FFT;
typedef maxiMFCC MFCC;
typedef rapidStream rapidStream; //MZ: Best... typedef... EVER!
typedef pipoHost pipoHost;
typedef pipoStreamAttributes pipoStreamAttributes;
/*
* Wrapper for signalProcessing modules, currently a collection of typedefs
*/
typedef maxiFFT FFT;
typedef maxiMFCC MFCC;
typedef rapidStream<double> rapidStream;
RAPIDMIX_END_NAMESPACE
typedef signalProcessingHost signalProcessingHost;
typedef signalAttributes signalAttributes;
}
#endif
{
"docType" : "rapid-mix:signal-processing",
"docVersion" : "1.0.0",
"payload" :
{
"description" : "slice:fft:sum:scale:onseg",
"parameters" :
[
{
"name" : "slice.size",
"type" : "Int",
"value" : [ 1024 ]
},
{
"name" : "slice.hop",
"type" : "Int",
"value" : [ 256 ]
},
{
"name" : "slice.wind",
"type" : "Enum",
"value" : "hann"
},
{
"name" : "slice.norm",
"type" : "Enum",
"value" : "power"
},
{
"name" : "fft.size",
"type" : "Int",
"value" : [ 0 ]
},
{
"name" : "fft.mode",
"type" : "Enum",
"value" : "power"
},
{
"name" : "fft.norm",
"type" : "Bool",
"value" : 1
},
{
"name" : "fft.weighting",
"type" : "Enum",
"value" : "itur468"
},
{
"name" : "sum.norm",
"type" : "Bool",
"value" : 0
},
{
"name" : "sum.colname",
"type" : "String",
"value" : ""
},
{
"name" : "scale.inmin",
"type" : "Double",
"value" : [ 1 ]
},
{
"name" : "scale.inmax",
"type" : "Double",
"value" : [ 10 ]
},
{
"name" : "scale.outmin",
"type" : "Double",
"value" : [ 0 ]
},
{
"name" : "scale.outmax",
"type" : "Double",
"value" : [ 10 ]
},
{
"name" : "scale.clip",
"type" : "Bool",
"value" : 0
},
{
"name" : "scale.func",
"type" : "Enum",
"value" : "log"
},
{
"name" : "scale.base",
"type" : "Double",
"value" : [ 10 ]
},
{
"name" : "scale.minlog",
"type" : "Double",
"value" : [ 1.0000000195414814e-24 ]
},
{
"name" : "scale.complete",
"type" : "Enum",
"value" : "repeatlast"
},
{
"name" : "scale.colindex",
"type" : "Int",
"value" : [ 0 ]
},
{
"name" : "scale.numcols",
"type" : "Int",
"value" : [ 0 ]
},
{
"name" : "onseg.colindex",
"type" : "Int",
"value" : [ 0 ]
},
{
"name" : "onseg.numcols",
"type" : "Int",
"value" : [ -1 ]
},
{
"name" : "onseg.filtersize",
"type" : "Int",
"value" : [ 3 ]
},
{
"name" : "onseg.threshold",
"type" : "Double",
"value" : [ 9 ]
},
{
"name" : "onseg.odfmode",
"type" : "Enum",
"value" : "mean"
},
{
"name" : "onseg.mininter",
"type" : "Double",
"value" : [ 50 ]
},
{
"name" : "onseg.startisonset",
"type" : "Bool",
"value" : 1
},
{
"name" : "onseg.duration",
"type" : "Bool",
"value" : 1
},
{
"name" : "onseg.durthresh",
"type" : "Double",
"value" : [ 0 ]
},
{
"name" : "onseg.offthresh",
"type" : "Double",
"value" : [ -120 ]
},
{
"name" : "onseg.maxsize",
"type" : "Double",
"value" : [ 0 ]
},
{
"name" : "onseg.min",
"type" : "Bool",
"value" : 0
},
{
"name" : "onseg.max",
"type" : "Bool",
"value" : 1
},
{
"name" : "onseg.mean",
"type" : "Bool",
"value" : 0
},
{
"name" : "onseg.stddev",
"type" : "Bool",
"value" : 0
},
{
"name" : "onseg.odfoutput",
"type" : "Bool",
"value" : 0
}
],
"streamAttributes" :
{
"input" :
{
"domain" : 0,
"hasTimeTags" : 0,
"hasVarSize" : false,
"height" : 1,
"labels" : true,
"maxFrames" : 1,
"offset" : 0,
"rate" : 1000,
"width" : 1
},
"output" :
{
"domain" : 0,
"hasTimeTags" : 1,
"hasVarSize" : false,
"height" : 1,
"labels" : true,
"maxFrames" : 1,
"offset" : 0,
"rate" : 3.90625,
"width" : 2
}
}
},
"target" :
{
"name" : "pipo",
"version" : 0.20000000000000001
}
}
#include <cassert>
#include <vector>
#include <iostream>
#include "rapidmix.h"
int main() {
///////////////////////////////////Test GVF
rapidmix::gvfTemporalVariation gvf;
rapidmix::trainingData myGVFData;
// Record first gesture
myGVFData.startRecording();
myGVFData.addElement({ 4.0, 0.7 });
myGVFData.addElement({ 3.0, 0.8 });
myGVFData.addElement({ 2.0, 0.9 });
myGVFData.addElement({ 1.0, 1.0 });
myGVFData.addElement({ 0.4, 1.2 });
myGVFData.addElement({ 0.2, 1.4 });
myGVFData.stopRecording();
// Record reverse of first gesture
myGVFData.startRecording();
myGVFData.addElement({ 0.2, 1.4 });
myGVFData.addElement({ 0.4, 1.2 });
myGVFData.addElement({ 1.0, 1.0 });
myGVFData.addElement({ 2.0, 0.9 });
myGVFData.addElement({ 3.0, 0.8 });
myGVFData.addElement({ 4.0, 0.7 });
myGVFData.stopRecording();
// Train
std::cout << "gvf train = " << gvf.train(myGVFData) << std::endl;
std::cout << "gvf passed." << std::endl;
//////////////////////////////////////Test RapidLib
rapidmix::staticRegression myNN;
rapidmix::trainingData myRLData;
std::vector<double> input = { 0.2, 0.7 };
std::vector<double> output = { 3.0 };
myRLData.recordSingleElement("label", input, output);
input = { 2.0, 44.2 };
output = { 20.14 };
myRLData.recordSingleElement("label", input, output);
std::cout << "staticRegression train = " << myNN.train(myRLData) << std::endl;
std::vector<double> inputVec = { 1.618, 18.9 };
assert(myNN.run(inputVec)[0] == 12.596715279688549);
std::cout << "staticRegression passed." << std::endl;
//////////////////////////////////////Test XMM
rapidmix::xmmConfig xcfg;
xcfg.relativeRegularization = 0.1;
rapidmix::trainingData myXmmData;
std::vector<double> myXmmInput;
std::vector<double> myXmmOutput;
myXmmData.startRecording("lab1");
myXmmInput = { 0.2, 0.7 };
myXmmData.addElement(myXmmInput, myXmmOutput);
myXmmData.stopRecording();
myXmmData.startRecording("lab2");
myXmmInput = { 0.8, 0.1 };
myXmmData.addElement(myXmmInput, myXmmOutput);
myXmmData.stopRecording();
myXmmData.writeJSON("/var/tmp/testTrainingData.json");
rapidmix::xmmStaticClassification myGmm(xcfg);
myGmm.train(myXmmData);
std::string filepath = "/var/tmp/modelSetDescription";
myGmm.writeJSON(filepath);
myXmmInput = { 0.2, 0.7 };
rapidmix::xmmStaticClassification myGmmFromFile;
myGmmFromFile.readJSON(filepath);
assert(myGmm.run(myXmmInput)[0] == myGmmFromFile.run(myXmmInput)[0]);
std::cout << "xmm passed." << std::endl;
/////////////////////////////////////Test pipo signal processing
rapidmix::signalProcessingHost spHost;
spHost.setGraph("slice<fft:moments,moments>");
spHost.setAttr("slice.size", 128);
spHost.setAttr("slice.hop", 64);
rapidmix::signalAttributes sa;
spHost.setInputStreamAttributes(sa);
for (unsigned int i = 0; i < 256; ++i)
{
std::vector<float> f({ 1, 2, 3 });
spHost.frames(0, 1, &f[0], 1, 1);
}
std::cout << "pipo passed." << std::endl;
/////////////////////////////////////Test rapidStream signal processing
rapidmix::rapidStream myProcessor(5); //create a processor with a window size of 5
myProcessor.pushToWindow(0.246);
myProcessor.pushToWindow(0.44);
myProcessor.pushToWindow(-0.228);
myProcessor.pushToWindow(0.402);
myProcessor.pushToWindow(-0.382);
assert(myProcessor.maximum() == 0.44);
assert(myProcessor.minimum() == -0.382);
assert(myProcessor.sum() == 0.478);
assert(myProcessor.mean() == 0.09559999999999999);
assert(myProcessor.standardDeviation() == 0.33702557766436664);
assert(myProcessor.rms() == 0.3503221374677884);
std::cout << "rapidStream passed." << std::endl;
/////////////////////////////////////Test Maxi signal processing
rapidmix::FFT myFFT;
myFFT.setup(1024, 512, 265);
for (int i = 0; i < 1024; ++i) {
float input = (i % 256/256.0);
myFFT.process(input);
}
assert(myFFT.spectralCentroid() == 3520.84277f);
std::cout << "maxi fft passed." << std::endl;
return 0;
}
......@@ -8,7 +8,7 @@
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
#include "machineLearning.h"
#include "rapidMix.h"
#include <iostream>
SCENARIO("Test NN Regression", "[machineLearning]")
......@@ -20,11 +20,15 @@ SCENARIO("Test NN Regression", "[machineLearning]")
rapidmix::trainingData myData;
std::vector<double> input = { 0.2, 0.7 };
std::vector<double> output = { 3.0 };
REQUIRE(myData.addElement(input, output) == 1);
REQUIRE(myData.recordSingleElement("label", input, output) == 1); //FIXME: Label is stupd here. -MZ
//testing alternate API
//auto newPhrase = myData.createNewPhrase("lab1");
//newPhrase->addElement(input, output);
input = { 2.0, 44.2 };
output = { 20.14 };
REQUIRE(myData.addElement(input, output) == 2);
REQUIRE(myData.recordSingleElement("label", input, output) == 3);
myData.writeJSON("/var/tmp/testTrainingData.json");
......@@ -33,8 +37,8 @@ SCENARIO("Test NN Regression", "[machineLearning]")
std::string filepath = "/var/tmp/modelSetDescription.json";
myNN.writeJSON(filepath);
std::vector<double> inputVec = { 1.618, 18.9 }; //arbitrary input
REQUIRE(myNN.run(inputVec)[0] == 12.596715279688551);
std::vector<double> inputVec = { 1.618, 18.9 }; //arbitrary input
REQUIRE(myNN.run(inputVec)[0] == 12.596715279688549);
WHEN("when NN model is deserialized from file")
{
......@@ -65,16 +69,9 @@ SCENARIO("Test kNN classification", "[machineLearning]")
GIVEN("kNN object and training dataset")
{
rapidmix::staticClassification myKnn;
rapidmix::trainingData myData;
std::vector<double> input = { 0.2, 0.7 };
std::vector<double> output = { 3.0 };
REQUIRE(myData.addElement(input, output) == 1);
input = { 2.0, 44.2 };
output = { 20.14 };
REQUIRE(myData.addElement(input, output) == 2);
REQUIRE(myData.recordSingleElement("cat", { 0.2, 0.7 }) == 1);
REQUIRE(myData.recordSingleElement("dog", { 2.0, 44.2 }) == 3); // This is not 2, because phrases get numbers, too.
REQUIRE(myKnn.train(myData) == true);
std::string filepath2 = "/var/tmp/modelSetDescription_knn.json";
......@@ -89,7 +86,7 @@ SCENARIO("Test kNN classification", "[machineLearning]")
std::vector<double> inputVec = { 2.0, 44.2 };
REQUIRE(myKnn.run(inputVec)[0] == 20.0); //FIXME: kNN truncates to ints!
REQUIRE(myKnn.run(inputVec, "label") == "dog");
WHEN("when kNN model is read from file")
{
......@@ -99,7 +96,7 @@ SCENARIO("Test kNN classification", "[machineLearning]")
}
}
WHEN("when NN model is read from JSON stream")
WHEN("when kNN model is read from JSON stream")
{
THEN("run models and compare")
{
......@@ -119,37 +116,37 @@ SCENARIO("Test DTW classification", "[machineLearning]")
myData.startRecording("setOne");
std::vector<double> input = { 0.1, 0.5 };
std::vector<double> output = {};
REQUIRE(myData.addElement(input, output) == 2); //TODO: Shouldn't this be 1?
REQUIRE(myData.addElement(input, output) == 1);
input = { 0.2, 0.4 };
REQUIRE(myData.addElement(input, output) == 3);
REQUIRE(myData.addElement(input, output) == 2);
input = { 0.3, 0.3 };
REQUIRE(myData.addElement(input, output) == 4);
REQUIRE(myData.addElement(input, output) == 3);
input = { 0.4, 0.2 };
REQUIRE(myData.addElement(input, output) == 5);
REQUIRE(myData.addElement(input, output) == 4);
input = { 0.5, 0.1 };
REQUIRE(myData.addElement(input, output) == 6);
REQUIRE(myData.addElement(input, output) == 5);
myData.stopRecording();
myData.startRecording("setTwo");
//alternate API
auto setTwo = myData.createNewPhrase("setTwo");
input = { 1., 4. };
myData.addElement(input, output);
setTwo->addElement(input, output);
input = { 2., -3. };
myData.addElement(input, output);
setTwo->addElement(input, output);
input = { 1., 5. };
myData.addElement(input, output);
setTwo->addElement(input, output);
input = { -2., 1. };
myData.addElement(input, output);
myData.stopRecording();
setTwo->addElement(input, output);
REQUIRE(myDTW.train(myData) == true);
std::vector<std::vector<double> > inputSet1;
inputSet1.push_back( {1., 4.});
inputSet1.push_back( {2., -3.});
inputSet1.push_back( {1., 5.});
inputSet1.push_back( {-2., 1.});
REQUIRE(myDTW.run(inputSet1) == 1);
REQUIRE(myDTW.run(inputSet1) == "setTwo");
std::vector<std::vector<double> > inputSet0;
inputSet0.push_back( { 0.1, 0.5 });
......@@ -158,7 +155,7 @@ SCENARIO("Test DTW classification", "[machineLearning]")
inputSet0.push_back( { 0.4, 0.2 });
inputSet0.push_back( { 0.5, 0.1 });
REQUIRE(myDTW.run(inputSet0) == 0);
REQUIRE(myDTW.run(inputSet0) == "setOne");
}
}
......@@ -169,7 +166,7 @@ SCENARIO("Test both classes reject bad data", "[machineLearning]") {
std::vector<double> input = { 0.1, 0.2, 0.3};
std::vector<double> output = { 1.0 };
myBadData.addElement(input,output);
myBadData.recordSingleElement("label", input,output); //FIXME: This label is uselsess? -MZ
input = { 1.0, 2.0, 3.0, 4.0 };
myBadData.addElement(input, output);
......@@ -179,14 +176,3 @@ SCENARIO("Test both classes reject bad data", "[machineLearning]") {
//TODO: These should return false with empty data set. I think it just crashes now. -mz
}
/*
rapidmix::staticClassification labelKnn;
labelKnn.train(myXmmData);
std::vector<double> input = { 0.8, 0.1 };
std::cout << "knn test: " << myXmmData.getLabel(labelKnn.run(input)[0]) << std::endl;
return 0;
*/
\ No newline at end of file
......@@ -8,18 +8,16 @@
#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file
#include "catch.hpp"
#include "machineLearning.h"
#include "trainingData.h"
#include "rapidMix.h"
TEST_CASE( "Tests default GVF ctor.", "[GVF]" ) {
GVF * gvf = new GVF();
gvf->translate(false);
gvf->segmentation(false);
REQUIRE(gvf != NULL);
}
TEST_CASE( "Tests default GVFGesture ctor.", "[GVF]" ) {
......@@ -35,7 +33,7 @@ TEST_CASE( "Tests default GVFGesture ctor.", "[GVF]" ) {
gvf->setTolerance(0.2f);
gvf->setScalingsVariance(0.00001f); //0.00001f); //0.000002f); //0.00004f);
gvf->setDynamicsVariance(0.0001f);
vector<vector<float>> trainingData;
if(gvf->getState() == GVF::STATE_LEARNING)
......@@ -66,12 +64,12 @@ TEST_CASE( "Tests default GVFGesture ctor.", "[GVF]" ) {
gvf->update(gesture.getLastObservation());
}
// float phase = gvf->getOutcomes().estimations[0].alignment;
// float speed = gvf->getOutcomes().estimations[0].dynamics[0];
//
// getDynamicsVariance();
// getScalingsVariance();
// getRotationsVariance();
// float phase = gvf->getOutcomes().estimations[0].alignment;
// float speed = gvf->getOutcomes().estimations[0].dynamics[0];
//
// getDynamicsVariance();
// getScalingsVariance();
// getRotationsVariance();
REQUIRE( gvf != NULL);
......@@ -129,7 +127,7 @@ SCENARIO("Test GVF Regression", "[machineLearning]")
myData.stopRecording();
// Train
gvf.train(myData);
REQUIRE(gvf.train(myData) == true);
// Set first gesture (or a fragment of it)
std::vector<double> outcomes;
......@@ -138,34 +136,35 @@ SCENARIO("Test GVF Regression", "[machineLearning]")
{
THEN("follows the the gesture (first) and confirm it is the likeliestGesture and likelihoods reasonable")
{
outcomes = gvf.process(inputs = { 3.0, 0.8 });
outcomes = gvf.process({ 2.0, 0.9 });
outcomes = gvf.process({ 1.0, 1.0 });
outcomes = gvf.process({ 0.4, 1.2 });
outcomes = gvf.process({ 0.2, 1.4 });
outcomes = gvf.run(inputs = { 3.0, 0.8 });
outcomes = gvf.run({ 2.0, 0.9 });
outcomes = gvf.run({ 1.0, 1.0 });
outcomes = gvf.run({ 0.4, 1.2 });
outcomes = gvf.run({ 0.2, 1.4 });
// The assumtion for the test is that the outcome of the last segment of the test gesture must converge
REQUIRE(outcomes[0] == 0); // outcomes[0] - likeliestGesture must be equal to first gesture '0'
REQUIRE(outcomes[1] > 0.5); // outcomes[1] - likelihood gesture '0' must be greater than 50%
REQUIRE(outcomes[2] < 0.5); // outcomes[2] - likelihood gesture '1' must be lesser than 50%
// REQUIRE(outcomes[3] < 0.5); // outcomes[3] - alignment gesture '0' must be lesser than 50%
// REQUIRE(outcomes[4] < 0.5); // outcomes[4] - alignment gesture '1' must be lesser than 50%
REQUIRE(gvf.getLikelihoods()[0] > 0.5); // outcomes[1] - likelihood gesture '0' must be greater than 50%
REQUIRE(gvf.getLikelihoods()[1] < 0.5); // outcomes[2] - likelihood gesture '1' must be lesser than 50%
REQUIRE(gvf.getAlignments()[0] < 0.5); // outcomes[3] - alignment gesture '0' must be lesser than 50%
// REQUIRE(outcomes[4] < 0.5); // outcomes[4] - alignment gesture '1' must be lesser than 50%
}
}
WHEN("when gvf is trained with two gestures")
{
THEN("gvf follows the test gesture (first gesture scaled) and confirm it is the likeliestGesture and likelihoods anc reasonable ")
WHEN("when gvf is trained with two gestures")
{
THEN("gvf follows the test gesture (first gesture scaled) and confirm it is the likeliestGesture and likelihoods anc reasonable ")
{
}
}
}
WHEN("when gvf is trained with two gestures")
{
THEN("gvf follows the test gesture (first gesture scaled) and confirm it is the likeliestGesture and likelihoods anc reasonable ")
WHEN("when gvf is trained with two gestures")
{
THEN("gvf follows the test gesture (first gesture scaled) and confirm it is the likeliestGesture and likelihoods anc reasonable ")
{
}
}
}
}
......
......@@ -15,7 +15,23 @@
#include "catch.hpp"
#include "signalProcessing.h"
//#define MAX_PATH_SIZE 256
#define MAX_PATH_SIZE 256
void doSomething(double time, double weight, PiPoValue *values, unsigned int size)
{
std::cout << time << std::endl;
}
class Stuff {
public:
Stuff() {}
~Stuff() {}
void doSomething(double time, double weight, PiPoValue *values, unsigned int size)
{
std::cout << time << std::endl;
}
};
//=============================== ONSEG TEST =================================//
......@@ -24,23 +40,29 @@ SCENARIO("Test rapidPiPoHost", "[signalProcessing]")
GIVEN("A rapidPiPoHost class with a rapidPiPo chain and an audio file")
{
maxiSample buffer;
Stuff stuff;
// in XCode this gives the path to DerivedData folder
// char pathStrBuf[MAX_PATH_SIZE];
// char *cwd = getcwd(pathStrBuf, sizeof(pathStrBuf));
// std::cout << std::string(cwd) << std::endl;
// but here we just add the file to the Copy File(s) Build Phase
buffer.load("./DnB-loop-175BPM.wav", 0);
buffer.load("./data/DnB-loop-175BPM.wav", 0);
// ( source : http://freesound.org/people/yewbic/sounds/40107/ )
buffer.reset(); // (no real need to do this here)
//====================================================================//
// instantiate PiPo related classes here :
rapidmix::pipoHost host; // -> this class is located in rapidPiPoTools
rapidmix::signalProcessingHost host;
// host.setFrameCallback(doSomething);
// host.setFrameCallback(stuff.doSomething);
// host.setFrameCallback(dynamic_cast<frameCallback>(std::bind(&Stuff::doSomething, stuff)));
// host.setFrameCallback(dynamic_cast<frameCallback>(Stuff::* doSomething));
// if we want to add some custom PiPos to our collection :
// #include "myCustomPiPo.h"
// PiPoCollection::addToCollection("myCustomPiPo", new PiPoCreator<myCustomPiPo>);
......@@ -50,9 +72,10 @@ SCENARIO("Test rapidPiPoHost", "[signalProcessing]")
// #include "PiPoMaximChroma.h"
// this one is not part of the default collection :
// PiPoCollection::addToCollection("chroma", new PiPoCreator<PiPoMaximChroma>);
//*
host.setGraph("slice:fft:sum:scale:onseg");
host.setAttr("slice.size", 1024);
host.setAttr("slice.hop", 256);
host.setAttr("slice.norm", "power");
......@@ -72,7 +95,7 @@ SCENARIO("Test rapidPiPoHost", "[signalProcessing]")
host.setAttr("onseg.startisonset", 1.);
host.setAttr("onseg.threshold", 9.);
host.setAttr("onseg.offthresh", -120.);
std::cout << "onseg threshold : ";
std::cout << host.getDoubleAttr("onseg.threshold") << std::endl;
std::cout << "fft mode : ";
......@@ -80,31 +103,45 @@ SCENARIO("Test rapidPiPoHost", "[signalProcessing]")
std::cout << "param names : " << std::endl;
std::vector<std::string> attrs = host.getAttrNames();
for (int i = 0; i < attrs.size(); ++i)
{
std::cout << "- " << attrs[i] << std::endl;
}
//*/
//char pathStrBuf[MAX_PATH_SIZE];
//char *cwd = getcwd(pathStrBuf, sizeof(pathStrBuf));
//std::string filePath = std::string(cwd) + "/hello.json";
//std::string filePath = ${PROJECT_DIR};
std::string filePath = "./data/pipo.json";
std::cout << filePath << std::endl;
//host.writeJSON(filePath);
host.readJSON(filePath);
//host.putJSON(jj);
//std::string jj = host.getJSON();
//std::cout << jj << std::endl;
std::cout << host.getJSON() << std::endl;
// set another chain :
// pipoHost.setChain("chroma");
WHEN("file is processed")
{
rapidmix::pipoStreamAttributes sa;
rapidmix::signalAttributes sa;
sa.hasTimeTags = true;
sa.rate = 44100;
sa.offset = 0;
sa.width = 1,
sa.height = 1,
sa.width = 1;
sa.height = 1;
sa.labels = std::vector<std::string>();
sa.hasVarSize = false;
sa.domain = 0;
sa.maxFrames = 1;
host.setInputStreamAttributes(sa);
host.setInputSignalAttributes(sa);
float value;
for (unsigned int i = 0; i < buffer.length; ++i) {
value = buffer.play();
......
//
// test_rapidXmmTools.cpp
// Unit tests for rapidXmmTools
//
#ifndef CATCH_CONFIG_MAIN
#define CATCH_CONFIG_MAIN
#endif
......@@ -18,37 +13,37 @@ SCENARIO("Test GMM", "[machineLearning]")
{
rapidmix::xmmConfig xcfg;
xcfg.relativeRegularization = 0.1;
rapidmix::trainingData myXmmData;
std::vector<double> myXmmInput;
std::vector<double> myXmmOutput;
myXmmData.startRecording("lab1");
myXmmInput = { 0.2, 0.7 };
myXmmData.addElement(myXmmInput, myXmmOutput);
myXmmData.stopRecording();
myXmmData.startRecording("lab2");
myXmmInput = { 0.8, 0.1 };
myXmmData.addElement(myXmmInput, myXmmOutput);
myXmmData.stopRecording();
myXmmData.writeJSON("/var/tmp/testTrainingData.json");
rapidmix::xmmStaticClassification myGmm(xcfg);
myGmm.train(myXmmData);
std::string filepath = "/var/tmp/modelSetDescription";
myGmm.writeJSON(filepath);
myXmmInput = { 0.2, 0.7 };
WHEN("GMM model is deserialized from file")
{
rapidmix::xmmStaticClassification myGmmFromFile;
myGmmFromFile.readJSON(filepath);
THEN("compare results of original and deserialized models")
{
REQUIRE(myGmm.run(myXmmInput)[0] == myGmmFromFile.run(myXmmInput)[0]);
......@@ -59,7 +54,7 @@ SCENARIO("Test GMM", "[machineLearning]")
{
rapidmix::xmmStaticClassification myGmmFromString;
myGmmFromString.putJSON(myGmm.getJSON());
THEN("compare results of original and deserialized models")
{
REQUIRE(myGmm.run(myXmmInput)[0] == myGmmFromString.run(myXmmInput)[0]);
......@@ -78,39 +73,39 @@ SCENARIO("Test GMR", "[machineLearning]")
{
rapidmix::xmmConfig xcfg;
xcfg.relativeRegularization = 0.1;
rapidmix::trainingData myXmmData;
std::vector<double> myXmmInput;
std::vector<double> myXmmOutput;
myXmmData.startRecording("lab1");
myXmmInput = { 0.2, 0.7 };
myXmmOutput = { 1.0 };
myXmmData.addElement(myXmmInput, myXmmOutput);
myXmmData.stopRecording();
myXmmData.startRecording("lab2");
myXmmInput = { 0.8, 0.1 };
myXmmOutput = { 2.0 };
myXmmData.addElement(myXmmInput, myXmmOutput);
myXmmData.stopRecording();
myXmmData.writeJSON("/var/tmp/testTrainingData.json");
rapidmix::xmmStaticRegression myGmr(xcfg);
myGmr.train(myXmmData);
std::string filepath = "/var/tmp/modelSetDescription";
myGmr.writeJSON(filepath);
myXmmInput = { 0.2, 0.7 };
WHEN("GMM model is deserialized from file")
{
rapidmix::xmmStaticClassification myGmrFromFile;
myGmrFromFile.readJSON(filepath);
THEN("compare results of original and deserialized models")
{
double epsilon = 0.001;
......@@ -119,12 +114,12 @@ SCENARIO("Test GMR", "[machineLearning]")
REQUIRE(std::abs(origOut - fileOut) < epsilon);
}
}
WHEN("GMM model is deserialized from JSON stream")
{
rapidmix::xmmStaticClassification myGmrFromString;
myGmrFromString.putJSON(myGmr.getJSON());
THEN("compare results of original and deserialized models")
{
double epsilon = 0.001;
......@@ -148,10 +143,10 @@ SCENARIO("Test HMM", "[machineLearning]")
xcfg.relativeRegularization = 0.1;
xcfg.states = 6;
xcfg.likelihoodWindow = 10;
rapidmix::trainingData myXmmData;
std::vector<double> myXmmOutput;
myXmmData.startRecording("lab1");
std::vector<std::vector<double>> myXmmPhrase = {
{ 0.0, 0.0 },
......@@ -179,16 +174,16 @@ SCENARIO("Test HMM", "[machineLearning]")
myXmmData.addElement(myXmmPhrase[i], myXmmOutput);
}
myXmmData.stopRecording();
rapidmix::xmmTemporalClassification myHmm(xcfg);
myHmm.train(myXmmData);
myXmmData.writeJSON("/var/tmp/testTrainingData.json");
std::string filepath = "/var/tmp/modelSetDescription";
myHmm.writeJSON(filepath);
WHEN("HMM model processes the phrase it was trained with")
{
THEN("check its time progression output is constantly increasing")
......@@ -201,16 +196,16 @@ SCENARIO("Test HMM", "[machineLearning]")
}
std::vector<double> sortedProgress = progress;
std::sort(sortedProgress.begin(), sortedProgress.end());
REQUIRE(std::equal(progress.begin(), progress.end(), sortedProgress.begin()));
}
}
WHEN("HMM model is deserialized from file")
{
rapidmix::xmmTemporalClassification myHmmFromFile;
myHmmFromFile.readJSON(filepath);
for (int i = 0; i < myXmmPhrase.size(); ++i) {
THEN("compare results of original and deserialized models")
......@@ -219,14 +214,14 @@ SCENARIO("Test HMM", "[machineLearning]")
}
}
}
WHEN("HMM model is deserialized from JSON stream")
{
rapidmix::xmmTemporalClassification myHmmFromString;
myHmmFromString.putJSON(myHmm.getJSON());
for (int i = 0; i < myXmmPhrase.size(); ++i) {
THEN("compare results of original and deserialized models")
{
REQUIRE(myHmm.run(myXmmPhrase[i]) == myHmmFromString.run(myXmmPhrase[i]));
......@@ -250,9 +245,9 @@ SCENARIO("Test HMR", "[machineLearning]")
xcfg.absoluteRegularization = 0.001;
xcfg.states = 6;
xcfg.likelihoodWindow = 10;
rapidmix::trainingData myXmmData;
myXmmData.startRecording("lab1");
std::vector <std::pair <std::vector<double>, std::vector<double>>> myXmmPhrase = {
{ { 0.0, 0.0 }, { 1.0 } },
......@@ -276,54 +271,59 @@ SCENARIO("Test HMR", "[machineLearning]")
{ { 1.5, 2.5 }, { 19.0 } },
{ { 1.6, 2.6 }, { 20.0 } }
};
for (int i = 0; i < myXmmPhrase.size(); ++i) {
myXmmData.addElement(myXmmPhrase[i].first, myXmmPhrase[i].second);
}
myXmmData.stopRecording();
rapidmix::xmmTemporalRegression myHmr(xcfg);
myHmr.train(myXmmData);
myXmmData.writeJSON("/var/tmp/testTrainingData.json");
std::string filepath = "/var/tmp/modelSetDescription";
myHmr.writeJSON(filepath);
myHmr.reset();
WHEN("HMR model processes the phrase it was trained with")
{
THEN("check its regression output is the same as the output example")
{
int cnt = 0;
double sum = 0;
for (int i = 0; i < myXmmPhrase.size(); ++i) {
std::vector<double> regression;
regression = myHmr.run(myXmmPhrase[i].first);
for (int j = 0; j < regression.size(); ++j) {
double delta = regression[j] - myXmmPhrase[i].second[j];
sum += delta * delta;
cnt++;
}
}
sum = std::sqrt(sum / cnt);
// totally arbitrary epsilon value :
double epsilon = 1.0;
REQUIRE(sum <= epsilon);
}
}
WHEN("HMR model is deserialized from file")
{
rapidmix::xmmTemporalRegression myHmrFromFile;
myHmrFromFile.readJSON(filepath);
for (int i = 0; i < myXmmPhrase.size(); ++i) {
myHmr.reset();
myHmrFromFile.reset();
THEN("compare results of original and deserialized models")
{
int cnt = 0;
......@@ -333,14 +333,14 @@ SCENARIO("Test HMR", "[machineLearning]")
std::vector<double> r1, r2;
r1 = myHmr.run(myXmmPhrase[i].first);
r2 = myHmrFromFile.run(myXmmPhrase[i].first);
for (int j = 0; j < r1.size(); ++j) {
double delta = r1[j] - r2[j];
sum += delta * delta;
cnt++;
}
}
sum = std::sqrt(sum / cnt);
// totally arbitrary epsilon value :
......@@ -349,33 +349,36 @@ SCENARIO("Test HMR", "[machineLearning]")
}
}
}
WHEN("HMR model is deserialized from JSON stream")
{
rapidmix::xmmTemporalRegression myHmrFromString;
myHmrFromString.putJSON(myHmr.getJSON());
for (int i = 0; i < myXmmPhrase.size(); ++i) {
myHmr.reset();
myHmrFromString.reset();
THEN("compare results of original and deserialized models")
{
int cnt = 0;
double sum = 0;
for (int i = 0; i < myXmmPhrase.size(); ++i) {
std::vector<double> r1, r2;
r1 = myHmr.run(myXmmPhrase[i].first);
r2 = myHmrFromString.run(myXmmPhrase[i].first);
for (int j = 0; j < r1.size(); ++j) {
double delta = r1[j] - r2[j];
sum += delta * delta;
cnt++;
}
}
sum = std::sqrt(sum / cnt);
// totally arbitrary epsilon value :
double epsilon = 0.1;
REQUIRE(sum <= epsilon);
......
#ifndef CATCH_CONFIG_MAIN
#define CATCH_CONFIG_MAIN
#endif
#include "catch.hpp"
#include "machineLearning.h"
//============================= TRAINING DATA ================================//
SCENARIO("Test training sets managements", "[machineLearning]")
{
GIVEN("A training set we fill in a variety of ways")
{
rapidmix::trainingData set;
set.createNewPhrase("test_label_01");
std::vector <std::pair <std::vector<double>, std::vector<double>>> phrase = {
{ { 0.0, 0.0 }, { 9.0 } },
{ { 1.0, 0.0 }, { 8.0 } },
{ { 2.0, 0.0 }, { 7.0 } },
{ { 3.0, 0.0 }, { 6.0 } },
{ { 4.0, 0.0 }, { 5.0 } },
{ { 5.0, 0.0 }, { 4.0 } },
{ { 6.0, 0.0 }, { 3.0 } },
{ { 7.0, 0.0 }, { 2.0 } },
{ { 8.0, 0.0 }, { 1.0 } },
{ { 9.0, 0.0 }, { 0.0 } }
};
for (int i = 0; i < phrase.size(); ++i) {
set.addElement(phrase[i].first, phrase[i].second);
}
WHEN("We serialize / deserialize a training set")
{
std::string js = set.getJSON();
std::cout << js << std::endl;
THEN("It should stay the same")
{
}
}
}
}
......@@ -31,16 +31,59 @@
311BA30F1EDC711E00244DAC /* trainingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EC01ED8459300E9FAFA /* trainingData.cpp */; };
311BA3101EDC746F00244DAC /* test_rapidPiPo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EE11ED8480D00E9FAFA /* test_rapidPiPo.cpp */; };
311BA3111EDC747A00244DAC /* rapidPiPoHost.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 311BA2AC1EDC6AED00244DAC /* rapidPiPoHost.cpp */; };
311BA3161EDC74E000244DAC /* libpipo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 311BA3141EDC74C400244DAC /* libpipo.a */; };
311BA31A1EDC7ADE00244DAC /* fft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5A0E1ED8450C00E9FAFA /* fft.cpp */; };
311BA31B1EDC7ADE00244DAC /* maxiBark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5A121ED8450C00E9FAFA /* maxiBark.cpp */; };
311BA31C1EDC7ADE00244DAC /* maxiFFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5A141ED8450C00E9FAFA /* maxiFFT.cpp */; };
311BA31D1EDC7ADE00244DAC /* maxiMFCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5A191ED8450C00E9FAFA /* maxiMFCC.cpp */; };
311BA31E1EDC7ADE00244DAC /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5A1F1ED8450C00E9FAFA /* maximilian.cpp */; };
311BA3211EDC7B2400244DAC /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 311BA3201EDC7B2400244DAC /* Accelerate.framework */; };
311BA3241EDC7BA800244DAC /* DnB-loop-175BPM.wav in CopyFiles */ = {isa = PBXBuildFile; fileRef = 311BA3231EDC7BA400244DAC /* DnB-loop-175BPM.wav */; };
311BA3251EDCE80B00244DAC /* jsoncpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5E081ED8450E00E9FAFA /* jsoncpp.cpp */; };
312C61BD1FE95A680085E283 /* trainingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EC01ED8459300E9FAFA /* trainingData.cpp */; };
312C61CD1FE95A680085E283 /* jsoncpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5E081ED8450E00E9FAFA /* jsoncpp.cpp */; };
312C61D41FE95A8F0085E283 /* test_trainingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 312C61B71FE958CB0085E283 /* test_trainingData.cpp */; };
319C94A11FC5BFA80055BE40 /* PiPoHost.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 319C93FD1FC49BAA0055BE40 /* PiPoHost.cpp */; };
319C94A21FC5C0C10055BE40 /* PiPoCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 319C947C1FC49D490055BE40 /* PiPoCollection.cpp */; };
319C94A31FC5C0DE0055BE40 /* BayesianFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 319C93ED1FC49B5C0055BE40 /* BayesianFilter.cpp */; };
319C94A41FC5C0DE0055BE40 /* filter_utilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 319C93EF1FC49B5C0055BE40 /* filter_utilities.cpp */; };
319C94A51FC5C1200055BE40 /* finitedifferences.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94761FC49D120055BE40 /* finitedifferences.c */; };
319C94A61FC5C1200055BE40 /* rta_bands.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94281FC49CC10055BE40 /* rta_bands.c */; };
319C94A71FC5C1200055BE40 /* rta_biquad.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C942A1FC49CC10055BE40 /* rta_biquad.c */; };
319C94A81FC5C1200055BE40 /* rta_correlation.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C942C1FC49CC10055BE40 /* rta_correlation.c */; };
319C94A91FC5C1200055BE40 /* rta_cubic.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C942E1FC49CC10055BE40 /* rta_cubic.c */; };
319C94AA1FC5C1200055BE40 /* rta_dct.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94301FC49CC10055BE40 /* rta_dct.c */; };
319C94AB1FC5C1200055BE40 /* rta_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94321FC49CC10055BE40 /* rta_delta.c */; };
319C94AC1FC5C1200055BE40 /* rta_fft.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94341FC49CC10055BE40 /* rta_fft.c */; };
319C94AD1FC5C1200055BE40 /* rta_lifter.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94371FC49CC10055BE40 /* rta_lifter.c */; };
319C94AE1FC5C1200055BE40 /* rta_lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94391FC49CC10055BE40 /* rta_lpc.c */; };
319C94AF1FC5C1200055BE40 /* rta_mel.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C943B1FC49CC10055BE40 /* rta_mel.c */; };
319C94B11FC5C1200055BE40 /* rta_preemphasis.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C943F1FC49CC10055BE40 /* rta_preemphasis.c */; };
319C94B21FC5C1200055BE40 /* rta_psy.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94411FC49CC10055BE40 /* rta_psy.c */; };
319C94B41FC5C1200055BE40 /* rta_window.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94451FC49CC10055BE40 /* rta_window.c */; };
319C94B51FC5C1200055BE40 /* rta_yin.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94471FC49CC10055BE40 /* rta_yin.c */; };
319C94B61FC5C1200055BE40 /* rta_mean_variance.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C941B1FC49CAA0055BE40 /* rta_mean_variance.c */; };
319C94B71FC5C1200055BE40 /* rta_moments.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C941D1FC49CAA0055BE40 /* rta_moments.c */; };
319C94B81FC5C1200055BE40 /* rta_selection.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C941F1FC49CAA0055BE40 /* rta_selection.c */; };
319C94B91FC5C1200055BE40 /* rta_svd.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94211FC49CAA0055BE40 /* rta_svd.c */; };
319C94BA1FC5C1200055BE40 /* rta_bpf.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C940A1FC49C990055BE40 /* rta_bpf.c */; };
319C94BB1FC5C1200055BE40 /* rta_int.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C940E1FC49C990055BE40 /* rta_int.c */; };
319C94BC1FC5C1200055BE40 /* rta_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 319C94141FC49C990055BE40 /* rta_util.c */; };
31A8F1971F4ECF3300CA8CEC /* rapidXMM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 31A8F1941F4ECD1200CA8CEC /* rapidXMM.cpp */; };
BE0AC6251FD17669008056E6 /* BayesianFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 319C93ED1FC49B5C0055BE40 /* BayesianFilter.cpp */; };
BE0AC6261FD1766D008056E6 /* filter_utilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 319C93EF1FC49B5C0055BE40 /* filter_utilities.cpp */; };
BE0AC6271FD1768D008056E6 /* BayesianFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 319C93ED1FC49B5C0055BE40 /* BayesianFilter.cpp */; };
BE0AC6281FD17690008056E6 /* filter_utilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 319C93EF1FC49B5C0055BE40 /* filter_utilities.cpp */; };
BE5733061F505ECC0063F4D1 /* machineLearning.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EBE1ED8459300E9FAFA /* machineLearning.cpp */; };
BE5733071F505F190063F4D1 /* rapidGVF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BE2E7351EE56F4F00722712 /* rapidGVF.cpp */; };
BE5733081F505F310063F4D1 /* GVF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BE2E72F1EE56E6D00722712 /* GVF.cpp */; };
BE5733091F505F7F0063F4D1 /* seriesClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE9286531EF01A23006847CF /* seriesClassification.cpp */; };
BE57330A1F505F870063F4D1 /* regression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF91ED8450E00E9FAFA /* regression.cpp */; };
BE57330B1F505F920063F4D1 /* dtw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE9286571EF01C45006847CF /* dtw.cpp */; };
BE57330C1F505F9B0063F4D1 /* neuralNetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF71ED8450E00E9FAFA /* neuralNetwork.cpp */; };
BE57330D1F505FAA0063F4D1 /* classification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DEA1ED8450E00E9FAFA /* classification.cpp */; };
BE57330E1F505FAD0063F4D1 /* modelSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF51ED8450E00E9FAFA /* modelSet.cpp */; };
BE57330F1F505FBD0063F4D1 /* knnClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5DF31ED8450E00E9FAFA /* knnClassification.cpp */; };
BE5733101F505FC80063F4D1 /* svmClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE92864E1EF017E2006847CF /* svmClassification.cpp */; };
BE5733111F505FDC0063F4D1 /* libsvm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5F0F1EDD74BC00E9FAFA /* libsvm.cpp */; };
BE9286491EF015AE006847CF /* test_signalProcessing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EE31ED8480D00E9FAFA /* test_signalProcessing.cpp */; };
BE92864C1EF015E7006847CF /* rapidStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE92864A1EF015E7006847CF /* rapidStream.cpp */; };
BE92864D1EF01622006847CF /* rapidStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE92864A1EF015E7006847CF /* rapidStream.cpp */; };
......@@ -63,6 +106,12 @@
BEA7B71E1EDD963E0003E84B /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5A1F1ED8450C00E9FAFA /* maximilian.cpp */; };
BEA7B7201EDD96AC0003E84B /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 311BA3201EDC7B2400244DAC /* Accelerate.framework */; };
BEA7B7211EDD97130003E84B /* test_gvf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE2C5EDE1ED8480D00E9FAFA /* test_gvf.cpp */; };
BEF47B1B1F7A74E5005B0C35 /* searchWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEF47B191F7A74E5005B0C35 /* searchWindow.cpp */; };
BEF47B1E1F7A74EE005B0C35 /* fastDTW.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEF47B1C1F7A74EE005B0C35 /* fastDTW.cpp */; };
BEF47B211F7A74FC005B0C35 /* warpPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEF47B1F1F7A74FC005B0C35 /* warpPath.cpp */; };
BEF47B221F7A8685005B0C35 /* fastDTW.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEF47B1C1F7A74EE005B0C35 /* fastDTW.cpp */; };
BEF47B231F7A868B005B0C35 /* warpPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEF47B1F1F7A74FC005B0C35 /* warpPath.cpp */; };
BEF47B241F7A8693005B0C35 /* searchWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEF47B191F7A74E5005B0C35 /* searchWindow.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
......@@ -102,13 +151,21 @@
);
runOnlyForDeploymentPostprocessing = 1;
};
312C61CF1FE95A680085E283 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
31D7B7281E6B048100917757 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 12;
dstPath = "";
dstSubfolderSpec = 16;
files = (
311BA3241EDC7BA800244DAC /* DnB-loop-175BPM.wav in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -128,15 +185,6 @@
0BFFEF3F1E5608C000EF19A5 /* test_signalProcessing */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_signalProcessing; sourceTree = BUILT_PRODUCTS_DIR; };
311BA2AC1EDC6AED00244DAC /* rapidPiPoHost.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rapidPiPoHost.cpp; path = rapidPiPoTools/rapidPiPoHost.cpp; sourceTree = "<group>"; };
311BA2AD1EDC6AED00244DAC /* rapidPiPoHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rapidPiPoHost.h; path = rapidPiPoTools/rapidPiPoHost.h; sourceTree = "<group>"; };
311BA2B11EDC6C6800244DAC /* PiPo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPo.h; path = pipo/src/include/PiPo.h; sourceTree = "<group>"; };
311BA2B21EDC6C6800244DAC /* PiPoParallel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoParallel.h; path = pipo/src/include/PiPoParallel.h; sourceTree = "<group>"; };
311BA2B31EDC6C6800244DAC /* PiPoSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoSequence.h; path = pipo/src/include/PiPoSequence.h; sourceTree = "<group>"; };
311BA2B41EDC6C6800244DAC /* RingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RingBuffer.h; path = pipo/src/include/RingBuffer.h; sourceTree = "<group>"; };
311BA2B61EDC6C7E00244DAC /* PiPoCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PiPoCollection.cpp; path = pipo/src/host/PiPoCollection.cpp; sourceTree = "<group>"; };
311BA2B71EDC6C7E00244DAC /* PiPoCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoCollection.h; path = pipo/src/host/PiPoCollection.h; sourceTree = "<group>"; };
311BA2B81EDC6C7E00244DAC /* PiPoGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoGraph.h; path = pipo/src/host/PiPoGraph.h; sourceTree = "<group>"; };
311BA2B91EDC6C7E00244DAC /* PiPoHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoHost.h; path = pipo/src/host/PiPoHost.h; sourceTree = "<group>"; };
311BA2BA1EDC6C7E00244DAC /* PiPoModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoModule.h; path = pipo/src/host/PiPoModule.h; sourceTree = "<group>"; };
311BA2BC1EDC6DB900244DAC /* rapidPiPoTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rapidPiPoTools.h; path = rapidPiPoTools/rapidPiPoTools.h; sourceTree = "<group>"; };
311BA2C61EDC6EC100244DAC /* xmmKMeans.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xmmKMeans.cpp; path = xmm/src/models/kmeans/xmmKMeans.cpp; sourceTree = "<group>"; };
311BA2C71EDC6EC100244DAC /* xmmKMeans.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = xmmKMeans.hpp; path = xmm/src/models/kmeans/xmmKMeans.hpp; sourceTree = "<group>"; };
......@@ -178,9 +226,130 @@
311BA2F81EDC6F0F00244DAC /* xmmJson.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = xmmJson.hpp; path = xmm/src/core/common/xmmJson.hpp; sourceTree = "<group>"; };
311BA2F91EDC6F0F00244DAC /* xmmMatrix.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = xmmMatrix.hpp; path = xmm/src/core/common/xmmMatrix.hpp; sourceTree = "<group>"; };
311BA2FC1EDC6F1900244DAC /* xmm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = xmm.h; path = xmm/src/xmm.h; sourceTree = "<group>"; };
311BA3141EDC74C400244DAC /* libpipo.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpipo.a; path = pipo/bin/osx/libpipo.a; sourceTree = "<group>"; };
311BA3201EDC7B2400244DAC /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
311BA3231EDC7BA400244DAC /* DnB-loop-175BPM.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = "DnB-loop-175BPM.wav"; path = "data/DnB-loop-175BPM.wav"; sourceTree = "<group>"; };
312C61B71FE958CB0085E283 /* test_trainingData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_trainingData.cpp; sourceTree = "<group>"; };
312C61D31FE95A680085E283 /* test_trainingData */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_trainingData; sourceTree = BUILT_PRODUCTS_DIR; };
318E7A361FD748D900FEEB7E /* pipo.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = pipo.json; path = data/pipo.json; sourceTree = "<group>"; };
319C93ED1FC49B5C0055BE40 /* BayesianFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BayesianFilter.cpp; path = pipo/modules/bayesfilter/src/BayesianFilter.cpp; sourceTree = "<group>"; };
319C93EE1FC49B5C0055BE40 /* BayesianFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BayesianFilter.h; path = pipo/modules/bayesfilter/src/BayesianFilter.h; sourceTree = "<group>"; };
319C93EF1FC49B5C0055BE40 /* filter_utilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filter_utilities.cpp; path = pipo/modules/bayesfilter/src/filter_utilities.cpp; sourceTree = "<group>"; };
319C93F01FC49B5C0055BE40 /* filter_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filter_utilities.h; path = pipo/modules/bayesfilter/src/filter_utilities.h; sourceTree = "<group>"; };
319C93F31FC49B8F0055BE40 /* mimo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimo.h; path = pipo/sdk/src/mimo.h; sourceTree = "<group>"; };
319C93F41FC49B8F0055BE40 /* PiPo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPo.h; path = pipo/sdk/src/PiPo.h; sourceTree = "<group>"; };
319C93F51FC49B8F0055BE40 /* PiPoParallel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoParallel.h; path = pipo/sdk/src/PiPoParallel.h; sourceTree = "<group>"; };
319C93F61FC49B8F0055BE40 /* PiPoSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoSequence.h; path = pipo/sdk/src/PiPoSequence.h; sourceTree = "<group>"; };
319C93F71FC49B8F0055BE40 /* RingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RingBuffer.h; path = pipo/sdk/src/RingBuffer.h; sourceTree = "<group>"; };
319C93F91FC49BAA0055BE40 /* mimo_host.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimo_host.h; path = pipo/sdk/src/host/mimo_host.h; sourceTree = "<group>"; };
319C93FA1FC49BAA0055BE40 /* PiPoChain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoChain.h; path = pipo/sdk/src/host/PiPoChain.h; sourceTree = "<group>"; };
319C93FB1FC49BAA0055BE40 /* PiPoCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoCollection.h; path = pipo/sdk/src/host/PiPoCollection.h; sourceTree = "<group>"; };
319C93FC1FC49BAA0055BE40 /* PiPoGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoGraph.h; path = pipo/sdk/src/host/PiPoGraph.h; sourceTree = "<group>"; };
319C93FD1FC49BAA0055BE40 /* PiPoHost.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PiPoHost.cpp; path = pipo/sdk/src/host/PiPoHost.cpp; sourceTree = "<group>"; };
319C93FE1FC49BAA0055BE40 /* PiPoHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoHost.h; path = pipo/sdk/src/host/PiPoHost.h; sourceTree = "<group>"; };
319C93FF1FC49BAA0055BE40 /* PiPoModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoModule.h; path = pipo/sdk/src/host/PiPoModule.h; sourceTree = "<group>"; };
319C94001FC49BAA0055BE40 /* PiPoModuleClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoModuleClass.h; path = pipo/sdk/src/host/PiPoModuleClass.h; sourceTree = "<group>"; };
319C94011FC49BAA0055BE40 /* PiPoOp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoOp.h; path = pipo/sdk/src/host/PiPoOp.h; sourceTree = "<group>"; };
319C94041FC49C5D0055BE40 /* rta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta.h; path = pipo/modules/rta/src/rta.h; sourceTree = "<group>"; };
319C940A1FC49C990055BE40 /* rta_bpf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_bpf.c; path = pipo/modules/rta/src/util/rta_bpf.c; sourceTree = "<group>"; };
319C940B1FC49C990055BE40 /* rta_bpf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_bpf.h; path = pipo/modules/rta/src/util/rta_bpf.h; sourceTree = "<group>"; };
319C940C1FC49C990055BE40 /* rta_complex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_complex.h; path = pipo/modules/rta/src/util/rta_complex.h; sourceTree = "<group>"; };
319C940D1FC49C990055BE40 /* rta_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_float.h; path = pipo/modules/rta/src/util/rta_float.h; sourceTree = "<group>"; };
319C940E1FC49C990055BE40 /* rta_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_int.c; path = pipo/modules/rta/src/util/rta_int.c; sourceTree = "<group>"; };
319C940F1FC49C990055BE40 /* rta_int.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_int.h; path = pipo/modules/rta/src/util/rta_int.h; sourceTree = "<group>"; };
319C94101FC49C990055BE40 /* rta_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_math.h; path = pipo/modules/rta/src/util/rta_math.h; sourceTree = "<group>"; };
319C94111FC49C990055BE40 /* rta_stdio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_stdio.h; path = pipo/modules/rta/src/util/rta_stdio.h; sourceTree = "<group>"; };
319C94121FC49C990055BE40 /* rta_stdlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_stdlib.h; path = pipo/modules/rta/src/util/rta_stdlib.h; sourceTree = "<group>"; };
319C94131FC49C990055BE40 /* rta_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_types.h; path = pipo/modules/rta/src/util/rta_types.h; sourceTree = "<group>"; };
319C94141FC49C990055BE40 /* rta_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_util.c; path = pipo/modules/rta/src/util/rta_util.c; sourceTree = "<group>"; };
319C94151FC49C990055BE40 /* rta_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_util.h; path = pipo/modules/rta/src/util/rta_util.h; sourceTree = "<group>"; };
319C941B1FC49CAA0055BE40 /* rta_mean_variance.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_mean_variance.c; path = pipo/modules/rta/src/statistics/rta_mean_variance.c; sourceTree = "<group>"; };
319C941C1FC49CAA0055BE40 /* rta_mean_variance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_mean_variance.h; path = pipo/modules/rta/src/statistics/rta_mean_variance.h; sourceTree = "<group>"; };
319C941D1FC49CAA0055BE40 /* rta_moments.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_moments.c; path = pipo/modules/rta/src/statistics/rta_moments.c; sourceTree = "<group>"; };
319C941E1FC49CAA0055BE40 /* rta_moments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_moments.h; path = pipo/modules/rta/src/statistics/rta_moments.h; sourceTree = "<group>"; };
319C941F1FC49CAA0055BE40 /* rta_selection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_selection.c; path = pipo/modules/rta/src/statistics/rta_selection.c; sourceTree = "<group>"; };
319C94201FC49CAA0055BE40 /* rta_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_selection.h; path = pipo/modules/rta/src/statistics/rta_selection.h; sourceTree = "<group>"; };
319C94211FC49CAA0055BE40 /* rta_svd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_svd.c; path = pipo/modules/rta/src/statistics/rta_svd.c; sourceTree = "<group>"; };
319C94221FC49CAA0055BE40 /* rta_svd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_svd.h; path = pipo/modules/rta/src/statistics/rta_svd.h; sourceTree = "<group>"; };
319C94281FC49CC10055BE40 /* rta_bands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_bands.c; path = pipo/modules/rta/src/signal/rta_bands.c; sourceTree = "<group>"; };
319C94291FC49CC10055BE40 /* rta_bands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_bands.h; path = pipo/modules/rta/src/signal/rta_bands.h; sourceTree = "<group>"; };
319C942A1FC49CC10055BE40 /* rta_biquad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_biquad.c; path = pipo/modules/rta/src/signal/rta_biquad.c; sourceTree = "<group>"; };
319C942B1FC49CC10055BE40 /* rta_biquad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_biquad.h; path = pipo/modules/rta/src/signal/rta_biquad.h; sourceTree = "<group>"; };
319C942C1FC49CC10055BE40 /* rta_correlation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_correlation.c; path = pipo/modules/rta/src/signal/rta_correlation.c; sourceTree = "<group>"; };
319C942D1FC49CC10055BE40 /* rta_correlation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_correlation.h; path = pipo/modules/rta/src/signal/rta_correlation.h; sourceTree = "<group>"; };
319C942E1FC49CC10055BE40 /* rta_cubic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_cubic.c; path = pipo/modules/rta/src/signal/rta_cubic.c; sourceTree = "<group>"; };
319C942F1FC49CC10055BE40 /* rta_cubic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_cubic.h; path = pipo/modules/rta/src/signal/rta_cubic.h; sourceTree = "<group>"; };
319C94301FC49CC10055BE40 /* rta_dct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_dct.c; path = pipo/modules/rta/src/signal/rta_dct.c; sourceTree = "<group>"; };
319C94311FC49CC10055BE40 /* rta_dct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_dct.h; path = pipo/modules/rta/src/signal/rta_dct.h; sourceTree = "<group>"; };
319C94321FC49CC10055BE40 /* rta_delta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_delta.c; path = pipo/modules/rta/src/signal/rta_delta.c; sourceTree = "<group>"; };
319C94331FC49CC10055BE40 /* rta_delta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_delta.h; path = pipo/modules/rta/src/signal/rta_delta.h; sourceTree = "<group>"; };
319C94341FC49CC10055BE40 /* rta_fft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_fft.c; path = pipo/modules/rta/src/signal/rta_fft.c; sourceTree = "<group>"; };
319C94351FC49CC10055BE40 /* rta_fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_fft.h; path = pipo/modules/rta/src/signal/rta_fft.h; sourceTree = "<group>"; };
319C94361FC49CC10055BE40 /* rta_filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_filter.h; path = pipo/modules/rta/src/signal/rta_filter.h; sourceTree = "<group>"; };
319C94371FC49CC10055BE40 /* rta_lifter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_lifter.c; path = pipo/modules/rta/src/signal/rta_lifter.c; sourceTree = "<group>"; };
319C94381FC49CC10055BE40 /* rta_lifter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_lifter.h; path = pipo/modules/rta/src/signal/rta_lifter.h; sourceTree = "<group>"; };
319C94391FC49CC10055BE40 /* rta_lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_lpc.c; path = pipo/modules/rta/src/signal/rta_lpc.c; sourceTree = "<group>"; };
319C943A1FC49CC10055BE40 /* rta_lpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_lpc.h; path = pipo/modules/rta/src/signal/rta_lpc.h; sourceTree = "<group>"; };
319C943B1FC49CC10055BE40 /* rta_mel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_mel.c; path = pipo/modules/rta/src/signal/rta_mel.c; sourceTree = "<group>"; };
319C943C1FC49CC10055BE40 /* rta_mel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_mel.h; path = pipo/modules/rta/src/signal/rta_mel.h; sourceTree = "<group>"; };
319C943D1FC49CC10055BE40 /* rta_onepole.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_onepole.c; path = pipo/modules/rta/src/signal/rta_onepole.c; sourceTree = "<group>"; };
319C943E1FC49CC10055BE40 /* rta_onepole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_onepole.h; path = pipo/modules/rta/src/signal/rta_onepole.h; sourceTree = "<group>"; };
319C943F1FC49CC10055BE40 /* rta_preemphasis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_preemphasis.c; path = pipo/modules/rta/src/signal/rta_preemphasis.c; sourceTree = "<group>"; };
319C94401FC49CC10055BE40 /* rta_preemphasis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_preemphasis.h; path = pipo/modules/rta/src/signal/rta_preemphasis.h; sourceTree = "<group>"; };
319C94411FC49CC10055BE40 /* rta_psy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_psy.c; path = pipo/modules/rta/src/signal/rta_psy.c; sourceTree = "<group>"; };
319C94421FC49CC10055BE40 /* rta_psy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_psy.h; path = pipo/modules/rta/src/signal/rta_psy.h; sourceTree = "<group>"; };
319C94431FC49CC10055BE40 /* rta_resample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_resample.c; path = pipo/modules/rta/src/signal/rta_resample.c; sourceTree = "<group>"; };
319C94441FC49CC10055BE40 /* rta_resample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_resample.h; path = pipo/modules/rta/src/signal/rta_resample.h; sourceTree = "<group>"; };
319C94451FC49CC10055BE40 /* rta_window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_window.c; path = pipo/modules/rta/src/signal/rta_window.c; sourceTree = "<group>"; };
319C94461FC49CC10055BE40 /* rta_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_window.h; path = pipo/modules/rta/src/signal/rta_window.h; sourceTree = "<group>"; };
319C94471FC49CC10055BE40 /* rta_yin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_yin.c; path = pipo/modules/rta/src/signal/rta_yin.c; sourceTree = "<group>"; };
319C94481FC49CC10055BE40 /* rta_yin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_yin.h; path = pipo/modules/rta/src/signal/rta_yin.h; sourceTree = "<group>"; };
319C945B1FC49CD10055BE40 /* rta_kdtree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_kdtree.c; path = pipo/modules/rta/src/recognition/rta_kdtree.c; sourceTree = "<group>"; };
319C945C1FC49CD10055BE40 /* rta_kdtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_kdtree.h; path = pipo/modules/rta/src/recognition/rta_kdtree.h; sourceTree = "<group>"; };
319C945D1FC49CD10055BE40 /* rta_kdtreebuild.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_kdtreebuild.c; path = pipo/modules/rta/src/recognition/rta_kdtreebuild.c; sourceTree = "<group>"; };
319C945E1FC49CD10055BE40 /* rta_kdtreeintern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_kdtreeintern.h; path = pipo/modules/rta/src/recognition/rta_kdtreeintern.h; sourceTree = "<group>"; };
319C945F1FC49CD10055BE40 /* rta_kdtreesearch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_kdtreesearch.c; path = pipo/modules/rta/src/recognition/rta_kdtreesearch.c; sourceTree = "<group>"; };
319C94601FC49CD10055BE40 /* rta_mahalanobis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rta_mahalanobis.c; path = pipo/modules/rta/src/recognition/rta_mahalanobis.c; sourceTree = "<group>"; };
319C94611FC49CD10055BE40 /* rta_mahalanobis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_mahalanobis.h; path = pipo/modules/rta/src/recognition/rta_mahalanobis.h; sourceTree = "<group>"; };
319C94741FC49CF90055BE40 /* rta_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rta_configuration.h; path = pipo/modules/rta/bindings/lib/rta_configuration.h; sourceTree = "<group>"; };
319C94761FC49D120055BE40 /* finitedifferences.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = finitedifferences.c; path = pipo/modules/finitedifferences/finitedifferences.c; sourceTree = "<group>"; };
319C94771FC49D120055BE40 /* finitedifferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = finitedifferences.h; path = pipo/modules/finitedifferences/finitedifferences.h; sourceTree = "<group>"; };
319C947A1FC49D260055BE40 /* mimo_stats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mimo_stats.h; path = pipo/modules/mimo/mimo_stats.h; sourceTree = "<group>"; };
319C947C1FC49D490055BE40 /* PiPoCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PiPoCollection.cpp; path = pipo/modules/collection/PiPoCollection.cpp; sourceTree = "<group>"; };
319C947E1FC49D690055BE40 /* PiPoBands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoBands.h; path = pipo/modules/PiPoBands.h; sourceTree = "<group>"; };
319C947F1FC49D690055BE40 /* PiPoBasic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoBasic.h; path = pipo/modules/PiPoBasic.h; sourceTree = "<group>"; };
319C94801FC49D690055BE40 /* PiPoBayesFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoBayesFilter.h; path = pipo/modules/PiPoBayesFilter.h; sourceTree = "<group>"; };
319C94811FC49D690055BE40 /* PiPoBiquad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoBiquad.h; path = pipo/modules/PiPoBiquad.h; sourceTree = "<group>"; };
319C94821FC49D690055BE40 /* PiPoBranch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoBranch.h; path = pipo/modules/PiPoBranch.h; sourceTree = "<group>"; };
319C94831FC49D690055BE40 /* PiPoChop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoChop.h; path = pipo/modules/PiPoChop.h; sourceTree = "<group>"; };
319C94841FC49D690055BE40 /* PiPoConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoConst.h; path = pipo/modules/PiPoConst.h; sourceTree = "<group>"; };
319C94851FC49D690055BE40 /* PiPoDct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoDct.h; path = pipo/modules/PiPoDct.h; sourceTree = "<group>"; };
319C94861FC49D690055BE40 /* PiPoDelta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoDelta.h; path = pipo/modules/PiPoDelta.h; sourceTree = "<group>"; };
319C94871FC49D690055BE40 /* PiPoDescr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoDescr.h; path = pipo/modules/PiPoDescr.h; sourceTree = "<group>"; };
319C94881FC49D690055BE40 /* PiPoFft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoFft.h; path = pipo/modules/PiPoFft.h; sourceTree = "<group>"; };
319C94891FC49D690055BE40 /* PiPoFiniteDif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoFiniteDif.h; path = pipo/modules/PiPoFiniteDif.h; sourceTree = "<group>"; };
319C948A1FC49D690055BE40 /* PiPoGate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoGate.h; path = pipo/modules/PiPoGate.h; sourceTree = "<group>"; };
319C948B1FC49D690055BE40 /* PiPoIdentity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoIdentity.h; path = pipo/modules/PiPoIdentity.h; sourceTree = "<group>"; };
319C948C1FC49D690055BE40 /* PiPoIdesc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoIdesc.h; path = pipo/modules/PiPoIdesc.h; sourceTree = "<group>"; };
319C948D1FC49D690055BE40 /* PiPoLpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoLpc.h; path = pipo/modules/PiPoLpc.h; sourceTree = "<group>"; };
319C948E1FC49D690055BE40 /* PiPoMaximChroma.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoMaximChroma.h; path = pipo/modules/PiPoMaximChroma.h; sourceTree = "<group>"; };
319C948F1FC49D690055BE40 /* PiPoMeanStddev.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoMeanStddev.h; path = pipo/modules/PiPoMeanStddev.h; sourceTree = "<group>"; };
319C94901FC49D690055BE40 /* PiPoMedian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoMedian.h; path = pipo/modules/PiPoMedian.h; sourceTree = "<group>"; };
319C94911FC49D690055BE40 /* PiPoMel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoMel.h; path = pipo/modules/PiPoMel.h; sourceTree = "<group>"; };
319C94921FC49D690055BE40 /* PiPoMfcc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoMfcc.h; path = pipo/modules/PiPoMfcc.h; sourceTree = "<group>"; };
319C94931FC49D690055BE40 /* PiPoMinMax.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoMinMax.h; path = pipo/modules/PiPoMinMax.h; sourceTree = "<group>"; };
319C94941FC49D690055BE40 /* PiPoMoments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoMoments.h; path = pipo/modules/PiPoMoments.h; sourceTree = "<group>"; };
319C94951FC49D690055BE40 /* PiPoMvavrg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoMvavrg.h; path = pipo/modules/PiPoMvavrg.h; sourceTree = "<group>"; };
319C94961FC49D690055BE40 /* PiPoOnseg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoOnseg.h; path = pipo/modules/PiPoOnseg.h; sourceTree = "<group>"; };
319C94971FC49D690055BE40 /* PiPoPeaks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoPeaks.h; path = pipo/modules/PiPoPeaks.h; sourceTree = "<group>"; };
319C94981FC49D690055BE40 /* PiPoPsy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoPsy.h; path = pipo/modules/PiPoPsy.h; sourceTree = "<group>"; };
319C94991FC49D690055BE40 /* PiPoRms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoRms.h; path = pipo/modules/PiPoRms.h; sourceTree = "<group>"; };
319C949A1FC49D690055BE40 /* PiPoScale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoScale.h; path = pipo/modules/PiPoScale.h; sourceTree = "<group>"; };
319C949B1FC49D690055BE40 /* PiPoSelect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoSelect.h; path = pipo/modules/PiPoSelect.h; sourceTree = "<group>"; };
319C949C1FC49D690055BE40 /* PiPoSlice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoSlice.h; path = pipo/modules/PiPoSlice.h; sourceTree = "<group>"; };
319C949D1FC49D690055BE40 /* PiPoSum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoSum.h; path = pipo/modules/PiPoSum.h; sourceTree = "<group>"; };
319C949E1FC49D690055BE40 /* PiPoWavelet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoWavelet.h; path = pipo/modules/PiPoWavelet.h; sourceTree = "<group>"; };
319C949F1FC49D690055BE40 /* PiPoYin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PiPoYin.h; path = pipo/modules/PiPoYin.h; sourceTree = "<group>"; };
319C94A01FC49D690055BE40 /* TempMod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TempMod.h; path = pipo/modules/TempMod.h; sourceTree = "<group>"; };
31A8F1941F4ECD1200CA8CEC /* rapidXMM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rapidXMM.cpp; path = rapidXMM/rapidXMM.cpp; sourceTree = "<group>"; };
31A8F1951F4ECD1200CA8CEC /* rapidXMM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rapidXMM.h; path = rapidXMM/rapidXMM.h; sourceTree = "<group>"; };
31D7B72C1E6B048100917757 /* test_rapidPiPo */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_rapidPiPo; sourceTree = BUILT_PRODUCTS_DIR; };
......@@ -244,98 +413,9 @@
BE2C5EE11ED8480D00E9FAFA /* test_rapidPiPo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_rapidPiPo.cpp; sourceTree = "<group>"; };
BE2C5EE21ED8480D00E9FAFA /* test_rapidXMM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_rapidXMM.cpp; sourceTree = "<group>"; };
BE2C5EE31ED8480D00E9FAFA /* test_signalProcessing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_signalProcessing.cpp; sourceTree = "<group>"; };
BE2C5EF21EDD73D000E9FAFA /* mimo_stats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mimo_stats.h; sourceTree = "<group>"; };
BE2C5EF31EDD73D000E9FAFA /* PiPoBands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoBands.h; sourceTree = "<group>"; };
BE2C5EF41EDD73D000E9FAFA /* PiPoBayesFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoBayesFilter.h; sourceTree = "<group>"; };
BE2C5EF51EDD73D000E9FAFA /* PiPoBiquad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoBiquad.h; sourceTree = "<group>"; };
BE2C5EF61EDD73D000E9FAFA /* PiPoChop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoChop.h; sourceTree = "<group>"; };
BE2C5EF71EDD73D000E9FAFA /* PiPoConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoConst.h; sourceTree = "<group>"; };
BE2C5EF81EDD73D000E9FAFA /* PiPoDct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoDct.h; sourceTree = "<group>"; };
BE2C5EF91EDD73D000E9FAFA /* PiPoDelta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoDelta.h; sourceTree = "<group>"; };
BE2C5EFA1EDD73D000E9FAFA /* PiPoFft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoFft.h; sourceTree = "<group>"; };
BE2C5EFB1EDD73D000E9FAFA /* PiPoFiniteDif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoFiniteDif.h; sourceTree = "<group>"; };
BE2C5EFC1EDD73D000E9FAFA /* PiPoGate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoGate.h; sourceTree = "<group>"; };
BE2C5EFD1EDD73D000E9FAFA /* PiPoLpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoLpc.h; sourceTree = "<group>"; };
BE2C5EFE1EDD73D000E9FAFA /* PiPoLpcFormants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoLpcFormants.h; sourceTree = "<group>"; };
BE2C5EFF1EDD73D000E9FAFA /* PiPoMeanStddev.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMeanStddev.h; sourceTree = "<group>"; };
BE2C5F001EDD73D000E9FAFA /* PiPoMedian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMedian.h; sourceTree = "<group>"; };
BE2C5F011EDD73D000E9FAFA /* PiPoMel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMel.h; sourceTree = "<group>"; };
BE2C5F021EDD73D000E9FAFA /* PiPoMfcc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMfcc.h; sourceTree = "<group>"; };
BE2C5F031EDD73D000E9FAFA /* PiPoMinMax.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMinMax.h; sourceTree = "<group>"; };
BE2C5F041EDD73D000E9FAFA /* PiPoMoments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMoments.h; sourceTree = "<group>"; };
BE2C5F051EDD73D000E9FAFA /* PiPoMvavrg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMvavrg.h; sourceTree = "<group>"; };
BE2C5F061EDD73D000E9FAFA /* PiPoOnseg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoOnseg.h; sourceTree = "<group>"; };
BE2C5F071EDD73D000E9FAFA /* PiPoPeaks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoPeaks.h; sourceTree = "<group>"; };
BE2C5F081EDD73D000E9FAFA /* PiPoRms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoRms.h; sourceTree = "<group>"; };
BE2C5F091EDD73D000E9FAFA /* PiPoScale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoScale.h; sourceTree = "<group>"; };
BE2C5F0A1EDD73D000E9FAFA /* PiPoSelect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoSelect.h; sourceTree = "<group>"; };
BE2C5F0B1EDD73D000E9FAFA /* PiPoSlice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoSlice.h; sourceTree = "<group>"; };
BE2C5F0C1EDD73D000E9FAFA /* PiPoSum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoSum.h; sourceTree = "<group>"; };
BE2C5F0D1EDD73D000E9FAFA /* TempMod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TempMod.h; sourceTree = "<group>"; };
BE2C5F0F1EDD74BC00E9FAFA /* libsvm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libsvm.cpp; sourceTree = "<group>"; };
BE2C5F101EDD74BC00E9FAFA /* libsvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libsvm.h; sourceTree = "<group>"; };
BE2C5F111EDD74BC00E9FAFA /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
BE2C5F151EDD74FC00E9FAFA /* BayesianFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BayesianFilter.cpp; sourceTree = "<group>"; };
BE2C5F161EDD74FC00E9FAFA /* BayesianFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BayesianFilter.h; sourceTree = "<group>"; };
BE2C5F171EDD74FC00E9FAFA /* filter_utilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = filter_utilities.cpp; sourceTree = "<group>"; };
BE2C5F181EDD74FC00E9FAFA /* filter_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter_utilities.h; sourceTree = "<group>"; };
BE2C5F1A1EDD74FC00E9FAFA /* finitedifferences.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = finitedifferences.c; sourceTree = "<group>"; };
BE2C5F1B1EDD74FC00E9FAFA /* finitedifferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = finitedifferences.h; sourceTree = "<group>"; };
BE2C5F1D1EDD74FC00E9FAFA /* bbpr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bbpr.cpp; sourceTree = "<group>"; };
BE2C5F1E1EDD74FC00E9FAFA /* bbpr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bbpr.h; sourceTree = "<group>"; };
BE2C5F1F1EDD74FC00E9FAFA /* rpoly.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rpoly.cpp; sourceTree = "<group>"; };
BE2C5F201EDD74FC00E9FAFA /* rpoly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rpoly.h; sourceTree = "<group>"; };
BE2C5F231EDD74FC00E9FAFA /* rta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta.h; sourceTree = "<group>"; };
BE2C5F241EDD74FC00E9FAFA /* rta_bpf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_bpf.c; sourceTree = "<group>"; };
BE2C5F251EDD74FC00E9FAFA /* rta_bpf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_bpf.h; sourceTree = "<group>"; };
BE2C5F261EDD74FC00E9FAFA /* rta_complex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_complex.h; sourceTree = "<group>"; };
BE2C5F271EDD74FC00E9FAFA /* rta_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_float.h; sourceTree = "<group>"; };
BE2C5F281EDD74FC00E9FAFA /* rta_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_int.c; sourceTree = "<group>"; };
BE2C5F291EDD74FC00E9FAFA /* rta_int.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_int.h; sourceTree = "<group>"; };
BE2C5F2A1EDD74FC00E9FAFA /* rta_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_math.h; sourceTree = "<group>"; };
BE2C5F2B1EDD74FC00E9FAFA /* rta_stdio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_stdio.h; sourceTree = "<group>"; };
BE2C5F2C1EDD74FC00E9FAFA /* rta_stdlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_stdlib.h; sourceTree = "<group>"; };
BE2C5F2D1EDD74FC00E9FAFA /* rta_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_types.h; sourceTree = "<group>"; };
BE2C5F2E1EDD74FC00E9FAFA /* rta_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_util.c; sourceTree = "<group>"; };
BE2C5F2F1EDD74FC00E9FAFA /* rta_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_util.h; sourceTree = "<group>"; };
BE2C5F311EDD74FC00E9FAFA /* rta_bands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_bands.c; sourceTree = "<group>"; };
BE2C5F321EDD74FC00E9FAFA /* rta_bands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_bands.h; sourceTree = "<group>"; };
BE2C5F331EDD74FC00E9FAFA /* rta_biquad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_biquad.c; sourceTree = "<group>"; };
BE2C5F341EDD74FC00E9FAFA /* rta_biquad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_biquad.h; sourceTree = "<group>"; };
BE2C5F351EDD74FC00E9FAFA /* rta_correlation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_correlation.c; sourceTree = "<group>"; };
BE2C5F361EDD74FC00E9FAFA /* rta_correlation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_correlation.h; sourceTree = "<group>"; };
BE2C5F371EDD74FC00E9FAFA /* rta_cubic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_cubic.c; sourceTree = "<group>"; };
BE2C5F381EDD74FC00E9FAFA /* rta_cubic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_cubic.h; sourceTree = "<group>"; };
BE2C5F391EDD74FC00E9FAFA /* rta_dct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_dct.c; sourceTree = "<group>"; };
BE2C5F3A1EDD74FC00E9FAFA /* rta_dct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_dct.h; sourceTree = "<group>"; };
BE2C5F3B1EDD74FC00E9FAFA /* rta_delta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_delta.c; sourceTree = "<group>"; };
BE2C5F3C1EDD74FC00E9FAFA /* rta_delta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_delta.h; sourceTree = "<group>"; };
BE2C5F3D1EDD74FC00E9FAFA /* rta_fft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_fft.c; sourceTree = "<group>"; };
BE2C5F3E1EDD74FC00E9FAFA /* rta_fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_fft.h; sourceTree = "<group>"; };
BE2C5F3F1EDD74FC00E9FAFA /* rta_filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_filter.h; sourceTree = "<group>"; };
BE2C5F401EDD74FC00E9FAFA /* rta_lifter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_lifter.c; sourceTree = "<group>"; };
BE2C5F411EDD74FC00E9FAFA /* rta_lifter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_lifter.h; sourceTree = "<group>"; };
BE2C5F421EDD74FC00E9FAFA /* rta_lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_lpc.c; sourceTree = "<group>"; };
BE2C5F431EDD74FC00E9FAFA /* rta_lpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_lpc.h; sourceTree = "<group>"; };
BE2C5F441EDD74FC00E9FAFA /* rta_mean_variance.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_mean_variance.c; sourceTree = "<group>"; };
BE2C5F451EDD74FC00E9FAFA /* rta_mean_variance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_mean_variance.h; sourceTree = "<group>"; };
BE2C5F461EDD74FC00E9FAFA /* rta_mel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_mel.c; sourceTree = "<group>"; };
BE2C5F471EDD74FC00E9FAFA /* rta_mel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_mel.h; sourceTree = "<group>"; };
BE2C5F481EDD74FC00E9FAFA /* rta_moments.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_moments.c; sourceTree = "<group>"; };
BE2C5F491EDD74FC00E9FAFA /* rta_moments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_moments.h; sourceTree = "<group>"; };
BE2C5F4A1EDD74FC00E9FAFA /* rta_onepole.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_onepole.c; sourceTree = "<group>"; };
BE2C5F4B1EDD74FC00E9FAFA /* rta_onepole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_onepole.h; sourceTree = "<group>"; };
BE2C5F4C1EDD74FC00E9FAFA /* rta_preemphasis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_preemphasis.c; sourceTree = "<group>"; };
BE2C5F4D1EDD74FC00E9FAFA /* rta_preemphasis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_preemphasis.h; sourceTree = "<group>"; };
BE2C5F4E1EDD74FC00E9FAFA /* rta_resample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_resample.c; sourceTree = "<group>"; };
BE2C5F4F1EDD74FC00E9FAFA /* rta_resample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_resample.h; sourceTree = "<group>"; };
BE2C5F501EDD74FC00E9FAFA /* rta_selection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_selection.c; sourceTree = "<group>"; };
BE2C5F511EDD74FC00E9FAFA /* rta_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_selection.h; sourceTree = "<group>"; };
BE2C5F521EDD74FC00E9FAFA /* rta_svd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_svd.c; sourceTree = "<group>"; };
BE2C5F531EDD74FC00E9FAFA /* rta_svd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_svd.h; sourceTree = "<group>"; };
BE2C5F541EDD74FC00E9FAFA /* rta_window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_window.c; sourceTree = "<group>"; };
BE2C5F551EDD74FC00E9FAFA /* rta_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_window.h; sourceTree = "<group>"; };
BE2C5F561EDD74FC00E9FAFA /* rta_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_configuration.h; sourceTree = "<group>"; };
BE92864A1EF015E7006847CF /* rapidStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rapidStream.cpp; sourceTree = "<group>"; };
BE92864B1EF015E7006847CF /* rapidStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rapidStream.h; sourceTree = "<group>"; };
BE92864E1EF017E2006847CF /* svmClassification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = svmClassification.cpp; sourceTree = "<group>"; };
......@@ -344,6 +424,12 @@
BE9286541EF01A23006847CF /* seriesClassification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = seriesClassification.h; sourceTree = "<group>"; };
BE9286571EF01C45006847CF /* dtw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dtw.cpp; sourceTree = "<group>"; };
BE9286581EF01C45006847CF /* dtw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dtw.h; sourceTree = "<group>"; };
BEF47B191F7A74E5005B0C35 /* searchWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = searchWindow.cpp; sourceTree = "<group>"; };
BEF47B1A1F7A74E5005B0C35 /* searchWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = searchWindow.h; sourceTree = "<group>"; };
BEF47B1C1F7A74EE005B0C35 /* fastDTW.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fastDTW.cpp; sourceTree = "<group>"; };
BEF47B1D1F7A74EE005B0C35 /* fastDTW.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fastDTW.h; sourceTree = "<group>"; };
BEF47B1F1F7A74FC005B0C35 /* warpPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = warpPath.cpp; sourceTree = "<group>"; };
BEF47B201F7A74FC005B0C35 /* warpPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = warpPath.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
......@@ -376,12 +462,18 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
312C61CE1FE95A680085E283 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
31D7B7271E6B048100917757 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
311BA3211EDC7B2400244DAC /* Accelerate.framework in Frameworks */,
311BA3161EDC74E000244DAC /* libpipo.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -409,18 +501,6 @@
path = rapidGVF;
sourceTree = "<group>";
};
311BA2A41EDC698600244DAC /* pipo */ = {
isa = PBXGroup;
children = (
BE2C5F131EDD74FC00E9FAFA /* dependencies */,
BE2C5EF01EDD73D000E9FAFA /* modules */,
311BA3121EDC74B300244DAC /* lib */,
311BA2B51EDC6C6F00244DAC /* host */,
311BA2B01EDC6C5A00244DAC /* include */,
);
name = pipo;
sourceTree = "<group>";
};
311BA2A51EDC698D00244DAC /* xmm */ = {
isa = PBXGroup;
children = (
......@@ -441,29 +521,6 @@
name = rapidPiPoTools;
sourceTree = "<group>";
};
311BA2B01EDC6C5A00244DAC /* include */ = {
isa = PBXGroup;
children = (
311BA2B11EDC6C6800244DAC /* PiPo.h */,
311BA2B21EDC6C6800244DAC /* PiPoParallel.h */,
311BA2B31EDC6C6800244DAC /* PiPoSequence.h */,
311BA2B41EDC6C6800244DAC /* RingBuffer.h */,
);
name = include;
sourceTree = "<group>";
};
311BA2B51EDC6C6F00244DAC /* host */ = {
isa = PBXGroup;
children = (
311BA2B61EDC6C7E00244DAC /* PiPoCollection.cpp */,
311BA2B71EDC6C7E00244DAC /* PiPoCollection.h */,
311BA2B81EDC6C7E00244DAC /* PiPoGraph.h */,
311BA2B91EDC6C7E00244DAC /* PiPoHost.h */,
311BA2BA1EDC6C7E00244DAC /* PiPoModule.h */,
);
name = host;
sourceTree = "<group>";
};
311BA2BD1EDC6E6700244DAC /* core */ = {
isa = PBXGroup;
children = (
......@@ -573,36 +630,251 @@
name = kmeans;
sourceTree = "<group>";
};
311BA3121EDC74B300244DAC /* lib */ = {
311BA31F1EDC7B2400244DAC /* Frameworks */ = {
isa = PBXGroup;
children = (
311BA3131EDC74B800244DAC /* osx */,
311BA3201EDC7B2400244DAC /* Accelerate.framework */,
);
name = lib;
name = Frameworks;
sourceTree = "<group>";
};
311BA3131EDC74B800244DAC /* osx */ = {
311BA3221EDC7B9A00244DAC /* data */ = {
isa = PBXGroup;
children = (
311BA3141EDC74C400244DAC /* libpipo.a */,
318E7A361FD748D900FEEB7E /* pipo.json */,
311BA3231EDC7BA400244DAC /* DnB-loop-175BPM.wav */,
);
name = osx;
name = data;
sourceTree = "<group>";
};
311BA31F1EDC7B2400244DAC /* Frameworks */ = {
319C93E91FC49B270055BE40 /* pipo */ = {
isa = PBXGroup;
children = (
311BA3201EDC7B2400244DAC /* Accelerate.framework */,
319C93EB1FC49B350055BE40 /* modules */,
319C93EA1FC49B300055BE40 /* sdk */,
);
name = Frameworks;
name = pipo;
sourceTree = "<group>";
};
311BA3221EDC7B9A00244DAC /* data */ = {
319C93EA1FC49B300055BE40 /* sdk */ = {
isa = PBXGroup;
children = (
311BA3231EDC7BA400244DAC /* DnB-loop-175BPM.wav */,
319C93F81FC49B960055BE40 /* host */,
319C93F31FC49B8F0055BE40 /* mimo.h */,
319C93F41FC49B8F0055BE40 /* PiPo.h */,
319C93F51FC49B8F0055BE40 /* PiPoParallel.h */,
319C93F61FC49B8F0055BE40 /* PiPoSequence.h */,
319C93F71FC49B8F0055BE40 /* RingBuffer.h */,
);
name = sdk;
sourceTree = "<group>";
};
319C93EB1FC49B350055BE40 /* modules */ = {
isa = PBXGroup;
children = (
319C93EC1FC49B4E0055BE40 /* bayesfilter */,
319C947B1FC49D380055BE40 /* collection */,
319C94751FC49D020055BE40 /* finitedifferences */,
319C94791FC49D170055BE40 /* mimo */,
319C94031FC49C430055BE40 /* rta */,
319C947E1FC49D690055BE40 /* PiPoBands.h */,
319C947F1FC49D690055BE40 /* PiPoBasic.h */,
319C94801FC49D690055BE40 /* PiPoBayesFilter.h */,
319C94811FC49D690055BE40 /* PiPoBiquad.h */,
319C94821FC49D690055BE40 /* PiPoBranch.h */,
319C94831FC49D690055BE40 /* PiPoChop.h */,
319C94841FC49D690055BE40 /* PiPoConst.h */,
319C94851FC49D690055BE40 /* PiPoDct.h */,
319C94861FC49D690055BE40 /* PiPoDelta.h */,
319C94871FC49D690055BE40 /* PiPoDescr.h */,
319C94881FC49D690055BE40 /* PiPoFft.h */,
319C94891FC49D690055BE40 /* PiPoFiniteDif.h */,
319C948A1FC49D690055BE40 /* PiPoGate.h */,
319C948B1FC49D690055BE40 /* PiPoIdentity.h */,
319C948C1FC49D690055BE40 /* PiPoIdesc.h */,
319C948D1FC49D690055BE40 /* PiPoLpc.h */,
319C948E1FC49D690055BE40 /* PiPoMaximChroma.h */,
319C948F1FC49D690055BE40 /* PiPoMeanStddev.h */,
319C94901FC49D690055BE40 /* PiPoMedian.h */,
319C94911FC49D690055BE40 /* PiPoMel.h */,
319C94921FC49D690055BE40 /* PiPoMfcc.h */,
319C94931FC49D690055BE40 /* PiPoMinMax.h */,
319C94941FC49D690055BE40 /* PiPoMoments.h */,
319C94951FC49D690055BE40 /* PiPoMvavrg.h */,
319C94961FC49D690055BE40 /* PiPoOnseg.h */,
319C94971FC49D690055BE40 /* PiPoPeaks.h */,
319C94981FC49D690055BE40 /* PiPoPsy.h */,
319C94991FC49D690055BE40 /* PiPoRms.h */,
319C949A1FC49D690055BE40 /* PiPoScale.h */,
319C949B1FC49D690055BE40 /* PiPoSelect.h */,
319C949C1FC49D690055BE40 /* PiPoSlice.h */,
319C949D1FC49D690055BE40 /* PiPoSum.h */,
319C949E1FC49D690055BE40 /* PiPoWavelet.h */,
319C949F1FC49D690055BE40 /* PiPoYin.h */,
319C94A01FC49D690055BE40 /* TempMod.h */,
);
name = data;
name = modules;
sourceTree = "<group>";
};
319C93EC1FC49B4E0055BE40 /* bayesfilter */ = {
isa = PBXGroup;
children = (
319C93ED1FC49B5C0055BE40 /* BayesianFilter.cpp */,
319C93EE1FC49B5C0055BE40 /* BayesianFilter.h */,
319C93EF1FC49B5C0055BE40 /* filter_utilities.cpp */,
319C93F01FC49B5C0055BE40 /* filter_utilities.h */,
);
name = bayesfilter;
sourceTree = "<group>";
};
319C93F81FC49B960055BE40 /* host */ = {
isa = PBXGroup;
children = (
319C93F91FC49BAA0055BE40 /* mimo_host.h */,
319C93FA1FC49BAA0055BE40 /* PiPoChain.h */,
319C93FB1FC49BAA0055BE40 /* PiPoCollection.h */,
319C93FC1FC49BAA0055BE40 /* PiPoGraph.h */,
319C93FD1FC49BAA0055BE40 /* PiPoHost.cpp */,
319C93FE1FC49BAA0055BE40 /* PiPoHost.h */,
319C93FF1FC49BAA0055BE40 /* PiPoModule.h */,
319C94001FC49BAA0055BE40 /* PiPoModuleClass.h */,
319C94011FC49BAA0055BE40 /* PiPoOp.h */,
);
name = host;
sourceTree = "<group>";
};
319C94031FC49C430055BE40 /* rta */ = {
isa = PBXGroup;
children = (
319C94041FC49C5D0055BE40 /* rta.h */,
319C94741FC49CF90055BE40 /* rta_configuration.h */,
319C94091FC49C840055BE40 /* physical-models */,
319C94081FC49C790055BE40 /* recognition */,
319C94071FC49C6C0055BE40 /* signal */,
319C94061FC49C640055BE40 /* statistics */,
319C94051FC49C5F0055BE40 /* util */,
);
name = rta;
sourceTree = "<group>";
};
319C94051FC49C5F0055BE40 /* util */ = {
isa = PBXGroup;
children = (
319C940A1FC49C990055BE40 /* rta_bpf.c */,
319C940B1FC49C990055BE40 /* rta_bpf.h */,
319C940C1FC49C990055BE40 /* rta_complex.h */,
319C940D1FC49C990055BE40 /* rta_float.h */,
319C940E1FC49C990055BE40 /* rta_int.c */,
319C940F1FC49C990055BE40 /* rta_int.h */,
319C94101FC49C990055BE40 /* rta_math.h */,
319C94111FC49C990055BE40 /* rta_stdio.h */,
319C94121FC49C990055BE40 /* rta_stdlib.h */,
319C94131FC49C990055BE40 /* rta_types.h */,
319C94141FC49C990055BE40 /* rta_util.c */,
319C94151FC49C990055BE40 /* rta_util.h */,
);
name = util;
sourceTree = "<group>";
};
319C94061FC49C640055BE40 /* statistics */ = {
isa = PBXGroup;
children = (
319C941B1FC49CAA0055BE40 /* rta_mean_variance.c */,
319C941C1FC49CAA0055BE40 /* rta_mean_variance.h */,
319C941D1FC49CAA0055BE40 /* rta_moments.c */,
319C941E1FC49CAA0055BE40 /* rta_moments.h */,
319C941F1FC49CAA0055BE40 /* rta_selection.c */,
319C94201FC49CAA0055BE40 /* rta_selection.h */,
319C94211FC49CAA0055BE40 /* rta_svd.c */,
319C94221FC49CAA0055BE40 /* rta_svd.h */,
);
name = statistics;
sourceTree = "<group>";
};
319C94071FC49C6C0055BE40 /* signal */ = {
isa = PBXGroup;
children = (
319C94281FC49CC10055BE40 /* rta_bands.c */,
319C94291FC49CC10055BE40 /* rta_bands.h */,
319C942A1FC49CC10055BE40 /* rta_biquad.c */,
319C942B1FC49CC10055BE40 /* rta_biquad.h */,
319C942C1FC49CC10055BE40 /* rta_correlation.c */,
319C942D1FC49CC10055BE40 /* rta_correlation.h */,
319C942E1FC49CC10055BE40 /* rta_cubic.c */,
319C942F1FC49CC10055BE40 /* rta_cubic.h */,
319C94301FC49CC10055BE40 /* rta_dct.c */,
319C94311FC49CC10055BE40 /* rta_dct.h */,
319C94321FC49CC10055BE40 /* rta_delta.c */,
319C94331FC49CC10055BE40 /* rta_delta.h */,
319C94341FC49CC10055BE40 /* rta_fft.c */,
319C94351FC49CC10055BE40 /* rta_fft.h */,
319C94361FC49CC10055BE40 /* rta_filter.h */,
319C94371FC49CC10055BE40 /* rta_lifter.c */,
319C94381FC49CC10055BE40 /* rta_lifter.h */,
319C94391FC49CC10055BE40 /* rta_lpc.c */,
319C943A1FC49CC10055BE40 /* rta_lpc.h */,
319C943B1FC49CC10055BE40 /* rta_mel.c */,
319C943C1FC49CC10055BE40 /* rta_mel.h */,
319C943D1FC49CC10055BE40 /* rta_onepole.c */,
319C943E1FC49CC10055BE40 /* rta_onepole.h */,
319C943F1FC49CC10055BE40 /* rta_preemphasis.c */,
319C94401FC49CC10055BE40 /* rta_preemphasis.h */,
319C94411FC49CC10055BE40 /* rta_psy.c */,
319C94421FC49CC10055BE40 /* rta_psy.h */,
319C94431FC49CC10055BE40 /* rta_resample.c */,
319C94441FC49CC10055BE40 /* rta_resample.h */,
319C94451FC49CC10055BE40 /* rta_window.c */,
319C94461FC49CC10055BE40 /* rta_window.h */,
319C94471FC49CC10055BE40 /* rta_yin.c */,
319C94481FC49CC10055BE40 /* rta_yin.h */,
);
name = signal;
sourceTree = "<group>";
};
319C94081FC49C790055BE40 /* recognition */ = {
isa = PBXGroup;
children = (
319C945B1FC49CD10055BE40 /* rta_kdtree.c */,
319C945C1FC49CD10055BE40 /* rta_kdtree.h */,
319C945D1FC49CD10055BE40 /* rta_kdtreebuild.c */,
319C945E1FC49CD10055BE40 /* rta_kdtreeintern.h */,
319C945F1FC49CD10055BE40 /* rta_kdtreesearch.c */,
319C94601FC49CD10055BE40 /* rta_mahalanobis.c */,
319C94611FC49CD10055BE40 /* rta_mahalanobis.h */,
);
name = recognition;
sourceTree = "<group>";
};
319C94091FC49C840055BE40 /* physical-models */ = {
isa = PBXGroup;
children = (
);
name = "physical-models";
sourceTree = "<group>";
};
319C94751FC49D020055BE40 /* finitedifferences */ = {
isa = PBXGroup;
children = (
319C94761FC49D120055BE40 /* finitedifferences.c */,
319C94771FC49D120055BE40 /* finitedifferences.h */,
);
name = finitedifferences;
sourceTree = "<group>";
};
319C94791FC49D170055BE40 /* mimo */ = {
isa = PBXGroup;
children = (
319C947A1FC49D260055BE40 /* mimo_stats.h */,
);
name = mimo;
sourceTree = "<group>";
};
319C947B1FC49D380055BE40 /* collection */ = {
isa = PBXGroup;
children = (
319C947C1FC49D490055BE40 /* PiPoCollection.cpp */,
);
name = collection;
sourceTree = "<group>";
};
31A8F1931F4ECD0500CA8CEC /* rapidXMM */ = {
......@@ -617,9 +889,9 @@
BE2C5A081ED8450C00E9FAFA /* dependencies */ = {
isa = PBXGroup;
children = (
319C93E91FC49B270055BE40 /* pipo */,
0BE2E72E1EE56E6D00722712 /* GVF */,
311BA2A51EDC698D00244DAC /* xmm */,
311BA2A41EDC698600244DAC /* pipo */,
BE2C5A091ED8450C00E9FAFA /* Maximilian */,
BE2C5BBE1ED8450D00E9FAFA /* RapidLib */,
BE2C5E041ED8450E00E9FAFA /* third_party */,
......@@ -684,6 +956,12 @@
BE2C5DE81ED8450E00E9FAFA /* src */ = {
isa = PBXGroup;
children = (
BEF47B1F1F7A74FC005B0C35 /* warpPath.cpp */,
BEF47B201F7A74FC005B0C35 /* warpPath.h */,
BEF47B1C1F7A74EE005B0C35 /* fastDTW.cpp */,
BEF47B1D1F7A74EE005B0C35 /* fastDTW.h */,
BEF47B191F7A74E5005B0C35 /* searchWindow.cpp */,
BEF47B1A1F7A74E5005B0C35 /* searchWindow.h */,
BE9286571EF01C45006847CF /* dtw.cpp */,
BE9286581EF01C45006847CF /* dtw.h */,
BE9286531EF01A23006847CF /* seriesClassification.cpp */,
......@@ -789,54 +1067,11 @@
BE2C5EE11ED8480D00E9FAFA /* test_rapidPiPo.cpp */,
BE2C5EE21ED8480D00E9FAFA /* test_rapidXMM.cpp */,
BE2C5EE31ED8480D00E9FAFA /* test_signalProcessing.cpp */,
312C61B71FE958CB0085E283 /* test_trainingData.cpp */,
);
path = src;
sourceTree = "<group>";
};
BE2C5EF01EDD73D000E9FAFA /* modules */ = {
isa = PBXGroup;
children = (
BE2C5EF11EDD73D000E9FAFA /* mimo */,
BE2C5EF31EDD73D000E9FAFA /* PiPoBands.h */,
BE2C5EF41EDD73D000E9FAFA /* PiPoBayesFilter.h */,
BE2C5EF51EDD73D000E9FAFA /* PiPoBiquad.h */,
BE2C5EF61EDD73D000E9FAFA /* PiPoChop.h */,
BE2C5EF71EDD73D000E9FAFA /* PiPoConst.h */,
BE2C5EF81EDD73D000E9FAFA /* PiPoDct.h */,
BE2C5EF91EDD73D000E9FAFA /* PiPoDelta.h */,
BE2C5EFA1EDD73D000E9FAFA /* PiPoFft.h */,
BE2C5EFB1EDD73D000E9FAFA /* PiPoFiniteDif.h */,
BE2C5EFC1EDD73D000E9FAFA /* PiPoGate.h */,
BE2C5EFD1EDD73D000E9FAFA /* PiPoLpc.h */,
BE2C5EFE1EDD73D000E9FAFA /* PiPoLpcFormants.h */,
BE2C5EFF1EDD73D000E9FAFA /* PiPoMeanStddev.h */,
BE2C5F001EDD73D000E9FAFA /* PiPoMedian.h */,
BE2C5F011EDD73D000E9FAFA /* PiPoMel.h */,
BE2C5F021EDD73D000E9FAFA /* PiPoMfcc.h */,
BE2C5F031EDD73D000E9FAFA /* PiPoMinMax.h */,
BE2C5F041EDD73D000E9FAFA /* PiPoMoments.h */,
BE2C5F051EDD73D000E9FAFA /* PiPoMvavrg.h */,
BE2C5F061EDD73D000E9FAFA /* PiPoOnseg.h */,
BE2C5F071EDD73D000E9FAFA /* PiPoPeaks.h */,
BE2C5F081EDD73D000E9FAFA /* PiPoRms.h */,
BE2C5F091EDD73D000E9FAFA /* PiPoScale.h */,
BE2C5F0A1EDD73D000E9FAFA /* PiPoSelect.h */,
BE2C5F0B1EDD73D000E9FAFA /* PiPoSlice.h */,
BE2C5F0C1EDD73D000E9FAFA /* PiPoSum.h */,
BE2C5F0D1EDD73D000E9FAFA /* TempMod.h */,
);
name = modules;
path = pipo/src/modules;
sourceTree = "<group>";
};
BE2C5EF11EDD73D000E9FAFA /* mimo */ = {
isa = PBXGroup;
children = (
BE2C5EF21EDD73D000E9FAFA /* mimo_stats.h */,
);
path = mimo;
sourceTree = "<group>";
};
BE2C5F0E1EDD74BC00E9FAFA /* libsvm */ = {
isa = PBXGroup;
children = (
......@@ -847,123 +1082,6 @@
path = libsvm;
sourceTree = "<group>";
};
BE2C5F131EDD74FC00E9FAFA /* dependencies */ = {
isa = PBXGroup;
children = (
BE2C5F141EDD74FC00E9FAFA /* bayesfilter */,
BE2C5F191EDD74FC00E9FAFA /* finitedifferences */,
BE2C5F1C1EDD74FC00E9FAFA /* lpcformants */,
BE2C5F211EDD74FC00E9FAFA /* rta */,
);
name = dependencies;
path = pipo/src/dependencies;
sourceTree = "<group>";
};
BE2C5F141EDD74FC00E9FAFA /* bayesfilter */ = {
isa = PBXGroup;
children = (
BE2C5F151EDD74FC00E9FAFA /* BayesianFilter.cpp */,
BE2C5F161EDD74FC00E9FAFA /* BayesianFilter.h */,
BE2C5F171EDD74FC00E9FAFA /* filter_utilities.cpp */,
BE2C5F181EDD74FC00E9FAFA /* filter_utilities.h */,
);
path = bayesfilter;
sourceTree = "<group>";
};
BE2C5F191EDD74FC00E9FAFA /* finitedifferences */ = {
isa = PBXGroup;
children = (
BE2C5F1A1EDD74FC00E9FAFA /* finitedifferences.c */,
BE2C5F1B1EDD74FC00E9FAFA /* finitedifferences.h */,
);
path = finitedifferences;
sourceTree = "<group>";
};
BE2C5F1C1EDD74FC00E9FAFA /* lpcformants */ = {
isa = PBXGroup;
children = (
BE2C5F1D1EDD74FC00E9FAFA /* bbpr.cpp */,
BE2C5F1E1EDD74FC00E9FAFA /* bbpr.h */,
BE2C5F1F1EDD74FC00E9FAFA /* rpoly.cpp */,
BE2C5F201EDD74FC00E9FAFA /* rpoly.h */,
);
path = lpcformants;
sourceTree = "<group>";
};
BE2C5F211EDD74FC00E9FAFA /* rta */ = {
isa = PBXGroup;
children = (
BE2C5F221EDD74FC00E9FAFA /* common */,
BE2C5F301EDD74FC00E9FAFA /* misc */,
BE2C5F561EDD74FC00E9FAFA /* rta_configuration.h */,
);
path = rta;
sourceTree = "<group>";
};
BE2C5F221EDD74FC00E9FAFA /* common */ = {
isa = PBXGroup;
children = (
BE2C5F231EDD74FC00E9FAFA /* rta.h */,
BE2C5F241EDD74FC00E9FAFA /* rta_bpf.c */,
BE2C5F251EDD74FC00E9FAFA /* rta_bpf.h */,
BE2C5F261EDD74FC00E9FAFA /* rta_complex.h */,
BE2C5F271EDD74FC00E9FAFA /* rta_float.h */,
BE2C5F281EDD74FC00E9FAFA /* rta_int.c */,
BE2C5F291EDD74FC00E9FAFA /* rta_int.h */,
BE2C5F2A1EDD74FC00E9FAFA /* rta_math.h */,
BE2C5F2B1EDD74FC00E9FAFA /* rta_stdio.h */,
BE2C5F2C1EDD74FC00E9FAFA /* rta_stdlib.h */,
BE2C5F2D1EDD74FC00E9FAFA /* rta_types.h */,
BE2C5F2E1EDD74FC00E9FAFA /* rta_util.c */,
BE2C5F2F1EDD74FC00E9FAFA /* rta_util.h */,
);
path = common;
sourceTree = "<group>";
};
BE2C5F301EDD74FC00E9FAFA /* misc */ = {
isa = PBXGroup;
children = (
BE2C5F311EDD74FC00E9FAFA /* rta_bands.c */,
BE2C5F321EDD74FC00E9FAFA /* rta_bands.h */,
BE2C5F331EDD74FC00E9FAFA /* rta_biquad.c */,
BE2C5F341EDD74FC00E9FAFA /* rta_biquad.h */,
BE2C5F351EDD74FC00E9FAFA /* rta_correlation.c */,
BE2C5F361EDD74FC00E9FAFA /* rta_correlation.h */,
BE2C5F371EDD74FC00E9FAFA /* rta_cubic.c */,
BE2C5F381EDD74FC00E9FAFA /* rta_cubic.h */,
BE2C5F391EDD74FC00E9FAFA /* rta_dct.c */,
BE2C5F3A1EDD74FC00E9FAFA /* rta_dct.h */,
BE2C5F3B1EDD74FC00E9FAFA /* rta_delta.c */,
BE2C5F3C1EDD74FC00E9FAFA /* rta_delta.h */,
BE2C5F3D1EDD74FC00E9FAFA /* rta_fft.c */,
BE2C5F3E1EDD74FC00E9FAFA /* rta_fft.h */,
BE2C5F3F1EDD74FC00E9FAFA /* rta_filter.h */,
BE2C5F401EDD74FC00E9FAFA /* rta_lifter.c */,
BE2C5F411EDD74FC00E9FAFA /* rta_lifter.h */,
BE2C5F421EDD74FC00E9FAFA /* rta_lpc.c */,
BE2C5F431EDD74FC00E9FAFA /* rta_lpc.h */,
BE2C5F441EDD74FC00E9FAFA /* rta_mean_variance.c */,
BE2C5F451EDD74FC00E9FAFA /* rta_mean_variance.h */,
BE2C5F461EDD74FC00E9FAFA /* rta_mel.c */,
BE2C5F471EDD74FC00E9FAFA /* rta_mel.h */,
BE2C5F481EDD74FC00E9FAFA /* rta_moments.c */,
BE2C5F491EDD74FC00E9FAFA /* rta_moments.h */,
BE2C5F4A1EDD74FC00E9FAFA /* rta_onepole.c */,
BE2C5F4B1EDD74FC00E9FAFA /* rta_onepole.h */,
BE2C5F4C1EDD74FC00E9FAFA /* rta_preemphasis.c */,
BE2C5F4D1EDD74FC00E9FAFA /* rta_preemphasis.h */,
BE2C5F4E1EDD74FC00E9FAFA /* rta_resample.c */,
BE2C5F4F1EDD74FC00E9FAFA /* rta_resample.h */,
BE2C5F501EDD74FC00E9FAFA /* rta_selection.c */,
BE2C5F511EDD74FC00E9FAFA /* rta_selection.h */,
BE2C5F521EDD74FC00E9FAFA /* rta_svd.c */,
BE2C5F531EDD74FC00E9FAFA /* rta_svd.h */,
BE2C5F541EDD74FC00E9FAFA /* rta_window.c */,
BE2C5F551EDD74FC00E9FAFA /* rta_window.h */,
);
path = misc;
sourceTree = "<group>";
};
BE325F281DB50BE100F199A8 = {
isa = PBXGroup;
children = (
......@@ -983,6 +1101,7 @@
0BFFEF311E56085C00EF19A5 /* test_rapidXMM */,
0BFFEF3F1E5608C000EF19A5 /* test_signalProcessing */,
31D7B72C1E6B048100917757 /* test_rapidPiPo */,
312C61D31FE95A680085E283 /* test_trainingData */,
);
name = Products;
sourceTree = "<group>";
......@@ -1058,6 +1177,23 @@
productReference = 0BFFEF3F1E5608C000EF19A5 /* test_signalProcessing */;
productType = "com.apple.product-type.tool";
};
312C61B91FE95A680085E283 /* test_trainingData */ = {
isa = PBXNativeTarget;
buildConfigurationList = 312C61D01FE95A680085E283 /* Build configuration list for PBXNativeTarget "test_trainingData" */;
buildPhases = (
312C61BA1FE95A680085E283 /* Sources */,
312C61CE1FE95A680085E283 /* Frameworks */,
312C61CF1FE95A680085E283 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = test_trainingData;
productName = test_XMM;
productReference = 312C61D31FE95A680085E283 /* test_trainingData */;
productType = "com.apple.product-type.tool";
};
31D7B7121E6B048100917757 /* test_rapidPiPo */ = {
isa = PBXNativeTarget;
buildConfigurationList = 31D7B7291E6B048100917757 /* Build configuration list for PBXNativeTarget "test_rapidPiPo" */;
......@@ -1081,7 +1217,7 @@
BE325F291DB50BE100F199A8 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0830;
LastUpgradeCheck = 0910;
ORGANIZATIONNAME = Goldsmiths;
TargetAttributes = {
0BFFEF1A1E56082700EF19A5 = {
......@@ -1115,6 +1251,7 @@
31D7B7121E6B048100917757 /* test_rapidPiPo */,
0BFFEF301E56085C00EF19A5 /* test_rapidXMM */,
0BFFEF3E1E5608C000EF19A5 /* test_signalProcessing */,
312C61B91FE95A680085E283 /* test_trainingData */,
);
};
/* End PBXProject section */
......@@ -1124,12 +1261,27 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
BE5733101F505FC80063F4D1 /* svmClassification.cpp in Sources */,
BE57330F1F505FBD0063F4D1 /* knnClassification.cpp in Sources */,
BE57330E1F505FAD0063F4D1 /* modelSet.cpp in Sources */,
BE57330D1F505FAA0063F4D1 /* classification.cpp in Sources */,
BE57330C1F505F9B0063F4D1 /* neuralNetwork.cpp in Sources */,
BE57330A1F505F870063F4D1 /* regression.cpp in Sources */,
BE57330B1F505F920063F4D1 /* dtw.cpp in Sources */,
BEF47B1B1F7A74E5005B0C35 /* searchWindow.cpp in Sources */,
BE92864C1EF015E7006847CF /* rapidStream.cpp in Sources */,
BE5733091F505F7F0063F4D1 /* seriesClassification.cpp in Sources */,
0BA41BAE1EE6E10A00B74667 /* jsoncpp.cpp in Sources */,
0BE2E7381EE56F5800722712 /* GVF.cpp in Sources */,
0BE2E7371EE56F4F00722712 /* rapidGVF.cpp in Sources */,
BEF47B1E1F7A74EE005B0C35 /* fastDTW.cpp in Sources */,
BEF47B211F7A74FC005B0C35 /* warpPath.cpp in Sources */,
BEA7B7211EDD97130003E84B /* test_gvf.cpp in Sources */,
0BA41BAD1EE6E0ED00B74667 /* trainingData.cpp in Sources */,
BE5733061F505ECC0063F4D1 /* machineLearning.cpp in Sources */,
BE5733111F505FDC0063F4D1 /* libsvm.cpp in Sources */,
BE0AC6271FD1768D008056E6 /* BayesianFilter.cpp in Sources */,
BE0AC6281FD17690008056E6 /* filter_utilities.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -1150,6 +1302,11 @@
BEA7B7171EDD7B7E0003E84B /* jsoncpp.cpp in Sources */,
BE9286511EF01801006847CF /* svmClassification.cpp in Sources */,
BE9286521EF01823006847CF /* libsvm.cpp in Sources */,
BE5733071F505F190063F4D1 /* rapidGVF.cpp in Sources */,
BE5733081F505F310063F4D1 /* GVF.cpp in Sources */,
BEF47B231F7A868B005B0C35 /* warpPath.cpp in Sources */,
BEF47B241F7A8693005B0C35 /* searchWindow.cpp in Sources */,
BEF47B221F7A8685005B0C35 /* fastDTW.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -1189,6 +1346,18 @@
BE9286491EF015AE006847CF /* test_signalProcessing.cpp in Sources */,
BEA7B71E1EDD963E0003E84B /* maximilian.cpp in Sources */,
BE92864D1EF01622006847CF /* rapidStream.cpp in Sources */,
BE0AC6251FD17669008056E6 /* BayesianFilter.cpp in Sources */,
BE0AC6261FD1766D008056E6 /* filter_utilities.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
312C61BA1FE95A680085E283 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
312C61D41FE95A8F0085E283 /* test_trainingData.cpp in Sources */,
312C61BD1FE95A680085E283 /* trainingData.cpp in Sources */,
312C61CD1FE95A680085E283 /* jsoncpp.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -1196,6 +1365,32 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
319C94A51FC5C1200055BE40 /* finitedifferences.c in Sources */,
319C94A61FC5C1200055BE40 /* rta_bands.c in Sources */,
319C94A71FC5C1200055BE40 /* rta_biquad.c in Sources */,
319C94A81FC5C1200055BE40 /* rta_correlation.c in Sources */,
319C94A91FC5C1200055BE40 /* rta_cubic.c in Sources */,
319C94AA1FC5C1200055BE40 /* rta_dct.c in Sources */,
319C94AB1FC5C1200055BE40 /* rta_delta.c in Sources */,
319C94AC1FC5C1200055BE40 /* rta_fft.c in Sources */,
319C94AD1FC5C1200055BE40 /* rta_lifter.c in Sources */,
319C94AE1FC5C1200055BE40 /* rta_lpc.c in Sources */,
319C94AF1FC5C1200055BE40 /* rta_mel.c in Sources */,
319C94B11FC5C1200055BE40 /* rta_preemphasis.c in Sources */,
319C94B21FC5C1200055BE40 /* rta_psy.c in Sources */,
319C94B41FC5C1200055BE40 /* rta_window.c in Sources */,
319C94B51FC5C1200055BE40 /* rta_yin.c in Sources */,
319C94B61FC5C1200055BE40 /* rta_mean_variance.c in Sources */,
319C94B71FC5C1200055BE40 /* rta_moments.c in Sources */,
319C94B81FC5C1200055BE40 /* rta_selection.c in Sources */,
319C94B91FC5C1200055BE40 /* rta_svd.c in Sources */,
319C94BA1FC5C1200055BE40 /* rta_bpf.c in Sources */,
319C94BB1FC5C1200055BE40 /* rta_int.c in Sources */,
319C94BC1FC5C1200055BE40 /* rta_util.c in Sources */,
319C94A31FC5C0DE0055BE40 /* BayesianFilter.cpp in Sources */,
319C94A41FC5C0DE0055BE40 /* filter_utilities.cpp in Sources */,
319C94A21FC5C0C10055BE40 /* PiPoCollection.cpp in Sources */,
319C94A11FC5BFA80055BE40 /* PiPoHost.cpp in Sources */,
311BA3101EDC746F00244DAC /* test_rapidPiPo.cpp in Sources */,
311BA3111EDC747A00244DAC /* rapidPiPoHost.cpp in Sources */,
311BA31A1EDC7ADE00244DAC /* fft.cpp in Sources */,
......@@ -1235,6 +1430,7 @@
0BFFEF2B1E56083D00EF19A5 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_C_LANGUAGE_STANDARD = c11;
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_NAME = "$(TARGET_NAME)";
};
......@@ -1243,6 +1439,7 @@
0BFFEF2C1E56083D00EF19A5 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_C_LANGUAGE_STANDARD = c11;
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_NAME = "$(TARGET_NAME)";
};
......@@ -1280,10 +1477,25 @@
};
name = Release;
};
312C61D11FE95A680085E283 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
312C61D21FE95A680085E283 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
31D7B72A1E6B048100917757 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/../dependencies/pipo/bin/**";
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_NAME = "$(TARGET_NAME)";
};
......@@ -1292,7 +1504,6 @@
31D7B72B1E6B048100917757 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/../dependencies/pipo/bin/**";
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_NAME = "$(TARGET_NAME)";
};
......@@ -1303,18 +1514,24 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LANGUAGE_STANDARD = "c++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
......@@ -1348,18 +1565,24 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LANGUAGE_STANDARD = "c++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
......@@ -1420,6 +1643,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
312C61D01FE95A680085E283 /* Build configuration list for PBXNativeTarget "test_trainingData" */ = {
isa = XCConfigurationList;
buildConfigurations = (
312C61D11FE95A680085E283 /* Debug */,
312C61D21FE95A680085E283 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
31D7B7291E6B048100917757 /* Build configuration list for PBXNativeTarget "test_rapidPiPo" */ = {
isa = XCConfigurationList;
buildConfigurations = (
......
File added
//
// BarChart.cpp
// RapidVisualizerOSC
//
// Created by James on 09/11/2017.
//
//
#include "BarChart.hpp"
BarChart::BarChart ( GraphState* state ) : RealTimeGraph (state)
{
//
}
BarChart::~BarChart ( void )
{
}
//
// BarChart.hpp
// RapidVisualizerOSC
//
// Created by James on 09/11/2017.
//
//
#ifndef BarChart_hpp
#define BarChart_hpp
#include <stdio.h>
#include "RealTimeGraph.hpp"
class BarChart : public RealTimeGraph
{
public:
BarChart ( GraphState* state ) : RealTimeGraph (state)
{
//
}
~BarChart ( void )
{
//
}
void updateRep ( void )
{
//
}
void drawSubGraph ( std::string subLabel, DataContainer<std::vector<double>>& data, ofRectangle subLabelRect )
{
double
minIn = 0,
minOut = 0,
maxOut = -subLabelRect.height,
startPosY = subLabelRect.height,
barSize = subLabelRect.width/data.labelData.size(),
separation = barSize/16,
halfSeparation = separation/2;
bool drawZeroSep = false;
if (data.minValue < 0)
{ // Add negative part
startPosY = subLabelRect.height/2;
minIn = -data.maxValue;
minOut = subLabelRect.height/2;
maxOut /= 2;
drawZeroSep = true;
}
for (uint32_t i = 0; i < data.labelData.size(); ++i)
{
double output = mapVals(data.labelData[i], minIn, data.maxValue, minOut, maxOut );
ofSetColor (graphColor);
ofFill();
ofDrawRectangle(subLabelRect.x + barSize * i + halfSeparation, subLabelRect.y + startPosY, barSize - separation, output );
}
if (drawZeroSep)
{
ofSetLineWidth(1.25);
ofSetColor (175,150,150);
ofDrawLine(subLabelRect.x, subLabelRect.y + startPosY,
subLabelRect.x + subLabelRect.width, subLabelRect.y + startPosY);
}
}
void update ( void )
{
//
}
};
#endif /* BarChart_hpp */
//
// Graph.hpp
// RapidVisualizerOSC
//
// Created by James on 09/11/2017.
//
//
#ifndef Graph_h
#define Graph_h
#include <string>
#include <vector>
#include <list>
#include "ofMain.h"
#include "ofxGui.h"
// TODO: add namespace, move funcs and struct to other header(s)
enum class TextAlignment {
LEFT,
CENTER,
RIGHT
};
static inline void drawTextLabel ( std::string label, ofVec2f position, ofColor labelBackgroundColor, ofColor stringColor, TextAlignment alignment, bool drawAbove )
{
uint32_t strLenPix = label.length()*8;
switch (alignment) {
case TextAlignment::LEFT:
// No exception
break;
case TextAlignment::CENTER:
position.x -= strLenPix / 2;
break;
case TextAlignment::RIGHT:
position.x -= strLenPix;
break;
default:
break;
}
ofSetColor (labelBackgroundColor);
ofRectangle bmpStringRect(position.x - 2,
position.y + ((drawAbove) ? -4 : 12) + 2,
strLenPix + 4, -12);
ofDrawRectangle(bmpStringRect);
ofSetColor (stringColor);
ofDrawBitmapString(label, position.x, position.y + ((drawAbove) ? -4 : 12));
}
static inline double mapVals ( double x, double in_min, double in_max, double out_min, double out_max )
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
template <typename T>
struct DataContainer {
T labelData;
double minValue = 0.0;
double maxValue = 1.0;
uint32_t iteratorPos = 0;
//ofColor graphColor;
void updateMinMax ( void )
{
auto mm = std::minmax_element(labelData.begin(), labelData.end());
double min = labelData[std::distance(labelData.begin(), mm.first)];
double max = labelData[std::distance(labelData.begin(), mm.second)];
if (min < minValue)
minValue = min;
if (max > maxValue)
maxValue = max;
if (fabs(min) > maxValue)
maxValue = fabs(min);
}
};
class Graph {
public:
enum graphLayout {
GRAPHS_STACKED,
GRAPHS_VERTICAL
};
struct GraphState {
std::string label;
graphLayout layout = graphLayout::GRAPHS_STACKED;
bool hasHistory = false;
ofRectangle positionAndSize;
uint32_t historySize;
};
Graph ( GraphState* state )
: state(state)
{
graphColor = ofColor(24, 219, 92);
textColor = ofColor(255, 157, 117);
}
virtual ~Graph ( void )
{
}
virtual void updateRep ( void ) = 0; // update representation
virtual void addData ( std::string subLabel, std::vector<double>& data ) = 0;
virtual void reset ( void ) = 0;
virtual void update ( void ) = 0;
virtual void draw ( void ) = 0;
virtual uint32_t getNumSubGraphs ( void ) const = 0;
protected:
GraphState *state = nullptr;
ofColor graphColor;
ofColor textColor;
};
#endif /* Graph_h */
//
// HistoryGraph.hpp
// RapidVisualizerOSC
//
// Created by James on 09/11/2017.
//
//
#ifndef HistoryGraph_h
#define HistoryGraph_h
#include "Graph.hpp"
#include <list>
class HistoryGraph : public Graph
{
public:
HistoryGraph ( GraphState* state )
: Graph(state)
{
}
~HistoryGraph ( void )
{
}
virtual void updateRep ( void ) = 0; // update representation
virtual void drawSubGraph ( std::string subLabel, DataContainer<std::list<double>>& data, ofRectangle subLabelrect ) = 0;
virtual void update ( void ) = 0;
void addData ( std::string subLabel, std::vector<double>& data )
{
if (data.size() < state->historySize)
{
//FIXME: can be sped up by using the result of this search instead of accessing by[] again
if ( subLabelData.find(subLabel) == subLabelData.end() ) {
// not found
DataContainer<std::list<double>> container;
container.labelData.resize(state->historySize);
std::fill(container.labelData.begin(), container.labelData.end(), 0.0);
subLabelData[subLabel] = container;
}
DataContainer<std::list<double>>& dataRef = subLabelData[subLabel];
list<double>& referencedList = dataRef.labelData;
while (referencedList.size() + data.size() >= state->historySize)
{
referencedList.pop_front();
}
for (int32_t i = data.size()-1; i >= 0; --i)
{
double val = data[i];
if (val < dataRef.minValue)
dataRef.minValue = val;
if (val > dataRef.maxValue)
dataRef.maxValue = val;
if (fabs(val) > dataRef.maxValue)
dataRef.maxValue = fabs(val);
referencedList.push_back(val);
}
}
}
void reset ( void )
{
subLabelData.clear();
}
void draw ( void )
{
uint32_t numElements = subLabelData.size();
uint16_t heightBetweenSubLabels = state->positionAndSize.height/numElements;
uint16_t subLabelY = 0;
ofSetColor (graphColor);
ofDrawLine(state->positionAndSize.x, state->positionAndSize.y,
state->positionAndSize.x + state->positionAndSize.width, state->positionAndSize.y);
std::map<std::string, DataContainer<std::list<double>>>::iterator it;
for(it = subLabelData.begin(); it != subLabelData.end(); ++it)
{
std::string subLabel = it->first;
DataContainer<std::list<double>>& data = it->second;
drawSubGraph (subLabel, data, ofRectangle(state->positionAndSize.x,
state->positionAndSize.y + subLabelY,
state->positionAndSize.width,
heightBetweenSubLabels));
// Draw label and background
drawTextLabel(subLabel, ofVec2f(state->positionAndSize.x + state->positionAndSize.width,
state->positionAndSize.y + subLabelY),
ofColor(100, 100, 100), ofColor(textColor), TextAlignment::RIGHT, false);
// Draw max value
drawTextLabel(ofToString(data.maxValue),
ofVec2f(state->positionAndSize.x + state->positionAndSize.width/2,
state->positionAndSize.y + subLabelY),
ofColor(50, 50, 50), ofColor(255, 255, 255), TextAlignment::CENTER, false);
// Increment Y position
subLabelY += heightBetweenSubLabels;
// Draw min value
// Show actual min value?
drawTextLabel(ofToString((data.minValue < 0) ? -data.maxValue : 0),
ofVec2f(state->positionAndSize.x + state->positionAndSize.width/2,
state->positionAndSize.y + subLabelY),
ofColor(50, 50, 50), ofColor(255, 255, 255), TextAlignment::CENTER, true);
// Draw Line at bottom of graph
ofSetLineWidth(2.0);
ofSetColor (180,180,180);
ofDrawLine(state->positionAndSize.x, state->positionAndSize.y + subLabelY,
state->positionAndSize.x + state->positionAndSize.width, state->positionAndSize.y + subLabelY);
}
}
uint32_t getNumSubGraphs ( void ) const
{
return subLabelData.size();
}
protected:
std::map <std::string, DataContainer<std::list<double>>> subLabelData;
};
#endif /* HistoryGraph_h */
//
// LineGraph.hpp
// RapidVisualizerOSC
//
// Created by James on 09/11/2017.
//
//
#ifndef LineGraph_h
#define LineGraph_h
#include <stdio.h>
#include "RealTimeGraph.hpp"
class LineGraph : public RealTimeGraph
{
public:
LineGraph ( GraphState* state ) : RealTimeGraph (state)
{
//
}
~LineGraph ( void )
{
//
}
void updateRep ( void )
{
//
}
void drawSubGraph ( std::string subLabel, DataContainer<std::vector<double>>& data, ofRectangle subLabelRect )
{
double
minIn = 0,
minOut = 0,
maxOut = -subLabelRect.height,
startPosY = subLabelRect.height,
pointDistance = subLabelRect.width/data.labelData.size(),
separation = pointDistance/2;
//halfSeparation = separation/2;
bool drawZeroSep = false;
if (data.minValue < 0)
{ // Add negative part
startPosY = subLabelRect.height/2;
minIn = -data.maxValue;
minOut = subLabelRect.height/2;
maxOut /= 2;
drawZeroSep = true;
}
ofBeginShape();
ofFill();
ofVertex(subLabelRect.x, subLabelRect.y + startPosY);
double output = mapVals(data.labelData[0], minIn, data.maxValue, minOut, maxOut );
ofVertex(subLabelRect.x, subLabelRect.y + startPosY + output);
for (uint32_t i = 0; i < data.labelData.size(); ++i)
{
output = mapVals(data.labelData[i], minIn, data.maxValue, minOut, maxOut );
ofSetColor (graphColor);
ofVertex(subLabelRect.x + pointDistance * i + separation, subLabelRect.y + startPosY + output);
//ofDrawRectangle(subLabelRect.x + barSize * i + halfSeparation, subLabelRect.y + startPosY, barSize - separation, output );
}
output = mapVals(data.labelData[data.labelData.size()-1], minIn, data.maxValue, minOut, maxOut );
ofVertex(subLabelRect.x + subLabelRect.width, subLabelRect.y + startPosY + output);
ofVertex(subLabelRect.x + subLabelRect.width, subLabelRect.y + startPosY);
ofEndShape();
if (drawZeroSep)
{
ofSetLineWidth(1.25);
ofSetColor (175,150,150);
ofDrawLine(subLabelRect.x, subLabelRect.y + startPosY,
subLabelRect.x + subLabelRect.width, subLabelRect.y + startPosY);
}
}
void update ( void )
{
//
}
};
#endif /* LineGraph_h */
//
// LineGraphHistory.hpp
// RapidVisualizerOSC
//
// Created by James on 10/11/2017.
//
//
#ifndef LineGraphHistory_h
#define LineGraphHistory_h
#include <stdio.h>
#include "HistoryGraph.hpp"
class LineGraphHistory : public HistoryGraph
{
public:
LineGraphHistory ( GraphState* state ) : HistoryGraph (state)
{
//
}
~LineGraphHistory ( void )
{
//
}
void updateRep ( void )
{
//
}
void drawSubGraph ( std::string subLabel, DataContainer<std::list<double>>& data, ofRectangle subLabelRect )
{
double
minIn = 0,
minOut = 0,
maxOut = -subLabelRect.height,
startPosY = subLabelRect.height,
pointDistance = subLabelRect.width/data.labelData.size(),
separation = pointDistance/2;
//halfSeparation = separation/2;
bool drawZeroSep = false;
if (data.minValue < 0)
{ // Add negative part
startPosY = subLabelRect.height/2;
minIn = -data.maxValue;
minOut = subLabelRect.height/2;
maxOut /= 2;
drawZeroSep = true;
}
ofBeginShape();
ofFill();
ofVertex(subLabelRect.x, subLabelRect.y + startPosY);
double output = mapVals(data.labelData.front(), minIn, data.maxValue, minOut, maxOut );
ofVertex(subLabelRect.x, subLabelRect.y + startPosY + output);
uint32_t i = 0;
for (double d : data.labelData)
{
output = mapVals(d, minIn, data.maxValue, minOut, maxOut );
ofSetColor (graphColor);
ofVertex(subLabelRect.x + pointDistance * i + separation, subLabelRect.y + startPosY + output);
//ofDrawRectangle(subLabelRect.x + barSize * i + halfSeparation, subLabelRect.y + startPosY, barSize - separation, output );
++i;
}
output = mapVals(data.labelData.back(), minIn, data.maxValue, minOut, maxOut );
ofVertex(subLabelRect.x + subLabelRect.width, subLabelRect.y + startPosY + output);
ofVertex(subLabelRect.x + subLabelRect.width, subLabelRect.y + startPosY);
ofEndShape();
if (drawZeroSep)
{
ofSetLineWidth(1.25);
ofSetColor (175,150,150);
ofDrawLine(subLabelRect.x, subLabelRect.y + startPosY,
subLabelRect.x + subLabelRect.width, subLabelRect.y + startPosY);
}
}
void update ( void )
{
//
}
};
#endif /* LineGraphHistory_h */
//
// RapidVisualization.cpp
// RapidVisualizerOSC
//
// Created by James on 13/11/2017.
//
//
#include <stdio.h>
#include "RapidVisualization.hpp"
RapidVisualization::RapidVisualization ( void )
{
}
RapidVisualization::~RapidVisualization ( void )
{
std::map<std::string, RapidVisualizer*>::iterator it;
for(it = visualizers.begin(); it != visualizers.end(); ++it)
{
if (it->second)
delete it->second;
}
}
void RapidVisualization::setup ( ofRectangle posAndSize, uint32_t defaultHistorySize )
{
this->posAndSize = posAndSize;
this->defaultHistorySize = defaultHistorySize;
}
std::pair<std::string, std::string> RapidVisualization::getRoute(std::string& address)
{
std::pair<std::string, std::string> ret;
size_t delimPos = address.substr(1).find("/");
if (delimPos != std::string::npos)
{
delimPos += 1;
ret.first = address.substr(0, delimPos);
ret.second = address.substr(delimPos);
}
else
{
ret.first = address.substr(0, address.length());
ret.second = "/";
}
return ret;
}
void RapidVisualization::addData ( std::string& address, std::vector<double>& data )
{
std::pair<std::string, std::string> route = getRoute(address);
if ( visualizers.find(route.first) == visualizers.end() ) {
RapidVisualizer* ptr = visualizers[route.first] = new RapidVisualizer(); // Add new graph
ptr->setup(route.first, RapidVisualizer::LINE_GRAPH_WITH_HISTORY, defaultHistorySize, Graph::GRAPHS_STACKED, false, ofRectangle(0,0,100,100));
updateRep();
}
RapidVisualizer* rapidVizPtr = visualizers[route.first];
rapidVizPtr->addData(address, data);
}
void RapidVisualization::addData ( std::string& graphName, std::string& subGraphName, std::vector<double>& data )
{
if ( visualizers.find(graphName) == visualizers.end() ) {
RapidVisualizer* ptr = visualizers[graphName] = new RapidVisualizer(); // Add new graph
ptr->setup(graphName, RapidVisualizer::LINE_GRAPH_WITH_HISTORY, defaultHistorySize, Graph::GRAPHS_STACKED, false, ofRectangle(0,0,100,100));
updateRep();
}
RapidVisualizer* rapidVizPtr = visualizers[graphName];
rapidVizPtr->addData(subGraphName, data);
}
void RapidVisualization::reset ( void )
{
std::map<std::string, RapidVisualizer*>::iterator it;
for(it = visualizers.begin(); it != visualizers.end(); ++it)
{
if (it->second)
delete it->second;
}
visualizers.clear();
}
void RapidVisualization::update ( void )
{
uint32_t tempNumGraphs = 0;
bool resetCase = false; // This is terrible (stops jitter when selecting new graph type)
std::map<std::string, RapidVisualizer*>::iterator it;
for(it = visualizers.begin(); it != visualizers.end(); ++it)
{
it->second->update();
uint32_t tGraph = it->second->getNumGraphs();
if (tGraph == 0)
{
resetCase = true;
break;
}
tempNumGraphs += tGraph;
}
if (tempNumGraphs != numGraphs && !resetCase)
{
numGraphs = tempNumGraphs;
updateRep();
}
}
void RapidVisualization::draw ( void )
{
std::map<std::string, RapidVisualizer*>::iterator it;
for(it = visualizers.begin(); it != visualizers.end(); ++it)
{
it->second->draw();
}
if (!guiHidden)
for(it = visualizers.begin(); it != visualizers.end(); ++it)
{
it->second->drawMenu(posAndSize); // Stop menu being behind next graph
}
if (numGraphs == 0)
{
drawTextLabel("Waiting for OSC messages on port 8338", ofVec2f(posAndSize.x+posAndSize.width/2, posAndSize.y), ofColor(24, 219, 92), ofColor(255, 157, 117), TextAlignment::CENTER, false );
}
}
void RapidVisualization::setPos ( ofVec2f pos )
{
posAndSize.x = pos.x;
posAndSize.y = pos.y;
updateRep();
}
void RapidVisualization::setSize ( ofVec2f size )
{
posAndSize.width = size.x;
posAndSize.height = size.y;
updateRep();
}
void RapidVisualization::setPosAndSize ( ofRectangle posAndSize )
{
this->posAndSize = posAndSize;
updateRep();
}
void RapidVisualization::updateRep ( void )
{
double graphHeight = posAndSize.height/numGraphs; // Height of single graph
std::map<std::string, RapidVisualizer*>::iterator it;
double drawHeight = posAndSize.y;
double height;
for(it = visualizers.begin(); it != visualizers.end(); ++it)
{
height = it->second->getNumGraphs()*graphHeight;
it->second->setRect(ofRectangle(posAndSize.x,
drawHeight,
posAndSize.width,
height));
drawHeight += height;
}
}
void RapidVisualization::setGuiHidden ( bool guiHidden )
{
this->guiHidden = guiHidden;
}
//
// RapidVisualization.hpp
// RapidVisualizerOSC
//
// Created by James on 10/11/2017.
//
//
#ifndef RapidVisualization_h
#define RapidVisualization_h
#include "RapidVisualizer.hpp"
class RapidVisualization
{
public:
RapidVisualization ( void );
~RapidVisualization ( void );
void setup ( ofRectangle posAndSize, uint32_t defaultHistorySize=256 );
// Append multiple types of graphs to cycle through as new entry addresses are added
// Implement?
//RapidVisualizer* addGraphType ( RapidVisualizer::graphTypeRealtime graphType );
//RapidVisualizer* addGraphType ( RapidVisualizer::graphTypeWithHistory graphType, uint32_t historySize );
void addData ( std::string& address, std::vector<double>& data );
void addData ( std::string& graphName, std::string& subGraphName, std::vector<double>& data );
void reset ( void );
void update ( void );
void draw ( void );
void setPos ( ofVec2f pos );
void setSize ( ofVec2f size );
void setPosAndSize ( ofRectangle posAndSize );
void setGuiHidden ( bool guiHidden );
private:
bool guiHidden = false;
uint32_t numGraphs = 0;
std::map<std::string, RapidVisualizer*> visualizers;
ofRectangle posAndSize;
uint32_t defaultHistorySize;
std::pair<std::string, std::string> getRoute ( std::string& address );
void updateRep ( void );
};
#endif /* RapidVisualization_h */