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 2188 additions and 452 deletions
/**
* @file signalProcessing.h
* Created by Michael Zbyszynski on 6 Feb 2017
* @author Michael Zbyszynski
* @date 6 Feb 2017
* @copyright
* Copyright © 2017 Goldsmiths. All rights reserved.
*
* @ingroup signalprocessing
......@@ -9,26 +11,24 @@
#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]")
......@@ -22,6 +22,10 @@ SCENARIO("Test NN Regression", "[machineLearning]")
std::vector<double> output = { 3.0 };
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.recordSingleElement("label", input, output) == 3);
......@@ -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,7 +69,6 @@ SCENARIO("Test kNN classification", "[machineLearning]")
GIVEN("kNN object and training dataset")
{
rapidmix::staticClassification myKnn;
rapidmix::trainingData myData;
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.
......@@ -124,19 +127,19 @@ SCENARIO("Test DTW classification", "[machineLearning]")
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.});
......
......@@ -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);
......@@ -146,26 +144,27 @@ SCENARIO("Test GVF Regression", "[machineLearning]")
// 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,47 @@
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 */; };
......@@ -75,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 */
......@@ -114,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;
};
......@@ -140,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>"; };
......@@ -190,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; };
......@@ -256,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>"; };
......@@ -356,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 */
......@@ -388,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;
};
......@@ -421,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 = (
......@@ -453,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 = (
......@@ -585,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 */ = {
......@@ -629,9 +889,9 @@
BE2C5A081ED8450C00E9FAFA /* dependencies */ = {
isa = PBXGroup;
children = (
319C93E91FC49B270055BE40 /* pipo */,
0BE2E72E1EE56E6D00722712 /* GVF */,
311BA2A51EDC698D00244DAC /* xmm */,
311BA2A41EDC698600244DAC /* pipo */,
BE2C5A091ED8450C00E9FAFA /* Maximilian */,
BE2C5BBE1ED8450D00E9FAFA /* RapidLib */,
BE2C5E041ED8450E00E9FAFA /* third_party */,
......@@ -696,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 */,
......@@ -801,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 = (
......@@ -859,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 = (
......@@ -995,6 +1101,7 @@
0BFFEF311E56085C00EF19A5 /* test_rapidXMM */,
0BFFEF3F1E5608C000EF19A5 /* test_signalProcessing */,
31D7B72C1E6B048100917757 /* test_rapidPiPo */,
312C61D31FE95A680085E283 /* test_trainingData */,
);
name = Products;
sourceTree = "<group>";
......@@ -1070,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" */;
......@@ -1093,7 +1217,7 @@
BE325F291DB50BE100F199A8 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0830;
LastUpgradeCheck = 0910;
ORGANIZATIONNAME = Goldsmiths;
TargetAttributes = {
0BFFEF1A1E56082700EF19A5 = {
......@@ -1127,6 +1251,7 @@
31D7B7121E6B048100917757 /* test_rapidPiPo */,
0BFFEF301E56085C00EF19A5 /* test_rapidXMM */,
0BFFEF3E1E5608C000EF19A5 /* test_signalProcessing */,
312C61B91FE95A680085E283 /* test_trainingData */,
);
};
/* End PBXProject section */
......@@ -1143,15 +1268,20 @@
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;
};
......@@ -1174,6 +1304,9 @@
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;
};
......@@ -1213,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;
};
......@@ -1220,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 */,
......@@ -1259,6 +1430,7 @@
0BFFEF2B1E56083D00EF19A5 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_C_LANGUAGE_STANDARD = c11;
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_NAME = "$(TARGET_NAME)";
};
......@@ -1267,6 +1439,7 @@
0BFFEF2C1E56083D00EF19A5 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_C_LANGUAGE_STANDARD = c11;
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_NAME = "$(TARGET_NAME)";
};
......@@ -1304,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)";
};
......@@ -1316,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)";
};
......@@ -1327,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;
......@@ -1372,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;
......@@ -1444,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 */
//
// RapidVisualizer.cpp
// RapidVisualizerOSC
//
// Created by James on 09/11/2017.
//
//
#include "RapidVisualizer.hpp"
RapidVisualizer::RapidVisualizer ( void )
{
uint32 initialHistorySize = 256;
minimumGui.setup();
expandedGui.setBackgroundColor(ofColor(0,0,0,127));
expandedGui.setup();
historySizeSlider.addListener(this, &RapidVisualizer::historySizeSliderChanged);
auto gNameRef = expandButton.setup(graphState.label, false);
expandButton.setBackgroundColor(ofColor(0, 0, 0, 127));
minimumGui.add(gNameRef);
expandedGui.add(graphTypesLabel.setup("Graph Type",""));
expandedGui.add(viewTypes[0].setup("Bar Chart", false));
expandedGui.add(viewTypes[1].setup("Line Graph", false));
expandedGui.add(viewTypes[2].setup("Line Graph History", false));
expandedGui.add(viewTypes[3].setup("Scope", false));
expandedGui.add(prefLabel.setup("Preferences",""));
expandedGui.add(splitArrayIntoGraphs.setup("Split Multiple Input", false));
expandedGui.add(historySizeSlider.setup("History Size", initialHistorySize, 4, 4096));
setHistory(initialHistorySize);
setLayout (Graph::GRAPHS_STACKED);
setSplitEachArgument (false);
setRect (ofRectangle(0,0,200,200));
}
RapidVisualizer::~RapidVisualizer ( void )
{
if (currentGraph)
{
delete currentGraph;
}
}
void RapidVisualizer::setup ( std::string label, graphTypeT graphType, Graph::graphLayout layout, bool splitEachArgument, ofRectangle positionAndSize )
{
setLabel (label);
setLayout (layout);
setSplitEachArgument (splitEachArgument);
setRect (positionAndSize);
setGraphType (graphType); // FIXME: Check if successfully initialized
}
void RapidVisualizer::setup ( std::string label, graphTypeT graphType, uint32_t historySize, Graph::graphLayout layout, bool splitEachArgument, ofRectangle positionAndSize )
{
setLabel (label);
setLayout (layout);
setSplitEachArgument (splitEachArgument);
setRect (positionAndSize);
setGraphType (graphType, historySize); // FIXME: Check if successfully initialized
}
void RapidVisualizer::setLabel ( std::string label )
{
graphState.label = label;
expandButton.setName(label);
if (currentGraph)
currentGraph->updateRep();
}
void RapidVisualizer::setGraphType ( graphTypeT graphType )
{
if (currentGraphType != graphType)
{
if (currentGraph)
{
// TODO: add lock for when doing this, or have all types loaded?
delete currentGraph;
}
switch (graphType) {
case BAR_CHART:
currentGraph = new BarChart ( &graphState );
graphState.hasHistory = false;
break;
case LINE_GRAPH:
currentGraph = new LineGraph ( &graphState );
graphState.hasHistory = false;
break;
case LINE_GRAPH_WITH_HISTORY:
currentGraph = new LineGraphHistory ( &graphState );
graphState.hasHistory = true;
break;
case SCOPE:
currentGraph = new ScopeWithHistory ( &graphState );
graphState.hasHistory = true;
break;
default:
break;
}
currentGraphType = graphType;
}
}
void RapidVisualizer::setGraphType ( graphTypeT graphType, uint32_t historySize )
{
setHistory(historySize);
setGraphType(graphType);
}
void RapidVisualizer::setLayout ( Graph::graphLayout layout )
{
graphState.layout = layout;
if (currentGraph)
currentGraph->updateRep();
}
void RapidVisualizer::setSplitEachArgument ( bool splitEachArgument )
{
this->splitEachArgument = splitEachArgument;
splitArrayIntoGraphs = splitEachArgument;
}
void RapidVisualizer::setPos ( ofVec2f pos )
{
graphState.positionAndSize.x = pos.x;
graphState.positionAndSize.y = pos.y;
if (currentGraph)
currentGraph->updateRep();
}
void RapidVisualizer::setSize ( ofVec2f size )
{
graphState.positionAndSize.width = size.x;
graphState.positionAndSize.height = size.y;
if (currentGraph)
currentGraph->updateRep();
}
void RapidVisualizer::setRect ( ofRectangle positionAndSize )
{
graphState.positionAndSize = positionAndSize;
if (currentGraph)
currentGraph->updateRep();
}
void RapidVisualizer::setHistory( uint32_t historySize )
{
graphState.historySize = historySize;
historySizeSlider = historySize;
if (currentGraph)
currentGraph->updateRep();
}
void RapidVisualizer::historySizeSliderChanged (int32_t &val)
{
setHistory(val);
}
void RapidVisualizer::addData ( std::string subLabel, std::vector<double>& data )
{
if (currentGraph)
{
if (splitEachArgument && data.size() > 1)
{
int16_t currentIndex = 0;
std::vector<double> splitData;
for (double d : data)
{
splitData = {d};
currentGraph->addData (subLabel + ofToString(currentIndex), splitData);
++currentIndex;
}
}
else
currentGraph->addData (subLabel, data);
}
}
void RapidVisualizer::update ( void )
{
if (currentGraph)
{
currentGraph->update();
}
}
void RapidVisualizer::drawMenu ( ofRectangle mainPosAndSize )
{
minimumGui.setPosition(graphState.positionAndSize.x, graphState.positionAndSize.y);
minimumGui.draw();
if (menuActive)
{
double expandedGuiXPos = graphState.positionAndSize.x + minimumGui.getWidth();
double expandedGuiYPos = graphState.positionAndSize.y;
double mainYPlusHeight = mainPosAndSize.y + mainPosAndSize.height;
double check = expandedGuiYPos + expandedGui.getHeight() - mainYPlusHeight;
if (check > 0)
{
expandedGuiYPos -= check;
}
expandedGui.setPosition(expandedGuiXPos, expandedGuiYPos);
expandedGui.draw();
}
}
void RapidVisualizer::draw ( void )
{
if (currentGraph)
{
currentGraph->draw();
}
//drawMenu();
menuActive = expandButton;
if (menuActive)
{
bool noneActive = true;
for (uint8_t i = 0; i < NUMVIEWTYPES; ++i)
{
if (viewTypes[i] && !oldTypeToggles[i])
{
std::fill(viewTypes, viewTypes + NUMVIEWTYPES, false);
viewTypes[i] = true;
setGraphType(static_cast<graphTypeT>(i));
}
if (viewTypes[i])
noneActive = false;
oldTypeToggles[i] = viewTypes[i];
}
if (noneActive && currentGraphType != NOT_INITIALIZED)
{
viewTypes[currentGraphType] = true;
}
if (splitEachArgument != splitArrayIntoGraphs)
{
// Dirty, solution for now
if (currentGraph)
currentGraph->reset();
splitEachArgument = splitArrayIntoGraphs;
}
}
}
uint32_t RapidVisualizer::getNumGraphs ( void ) const
{
if (currentGraph)
{
return currentGraph->getNumSubGraphs();
} else {
return 0;
}
}
#undef NUMVIEWTYPES
//
// RapidVisualizer.hpp
// RapidVisualizerOSC
//
// Created by James on 09/11/2017.
//
//
#ifndef RapidVisualizer_hpp
#define RapidVisualizer_hpp
#include <stdio.h>
#include <map>
#include "ofMain.h"
#include "Graph.hpp"
#include "BarChart.hpp"
#include "LineGraph.hpp"
#include "LineGraphHistory.hpp"
#include "ScopeWithHistory.hpp"
#define NUMVIEWTYPES 4
// TODO add historySize slider and init with default 256 or so
class RapidVisualizer {
public:
enum graphTypeT {
BAR_CHART,
LINE_GRAPH,
LINE_GRAPH_WITH_HISTORY,
SCOPE,
NOT_INITIALIZED
};
RapidVisualizer ( void );
~RapidVisualizer ( void );
void setup ( std::string label, graphTypeT graphType, Graph::graphLayout layout, bool splitEachArgument, ofRectangle positionAndSize );
void setup ( std::string label, graphTypeT graphType, uint32_t historySize, Graph::graphLayout layout, bool splitEachArgument, ofRectangle positionAndSize );
void setLabel ( std::string label );
void setGraphType ( graphTypeT graphType );
void setGraphType ( graphTypeT graphType, uint32_t historySize );
void setLayout ( Graph::graphLayout layout );
void setSplitEachArgument ( bool splitEachArgument );
void setPos ( ofVec2f pos );
void setSize ( ofVec2f size );
void setRect ( ofRectangle rect );
void setHistory ( uint32_t historySize );
void historySizeSliderChanged (int32_t &val);
void addData ( std::string subLabel, std::vector<double>& data );
void update ( void );
void drawMenu ( ofRectangle mainPosAndSize );
void draw ( void );
uint32_t getNumGraphs ( void ) const;
private:
graphTypeT currentGraphType = NOT_INITIALIZED;
Graph::GraphState graphState;
Graph* currentGraph = nullptr;
bool splitEachArgument = false;
bool menuActive = false;
ofxLabel graphName;
ofxLabel graphTypesLabel;
ofxLabel prefLabel;
ofxPanel minimumGui;
ofxToggle expandButton;
ofxPanel expandedGui;
ofxIntSlider historySizeSlider;
ofxToggle splitArrayIntoGraphs;
bool oldTypeToggles[NUMVIEWTYPES];
ofxToggle viewTypes[NUMVIEWTYPES];
};
#endif /* RapidVisualizer_hpp */