view hackday/BayesianArrayStructure.h @ 36:5a1b0c6fa1fb

Added class to read in the csv Annotation file, then write out the respective difference between the performed piece as followed here, and the annotation of RWC by Ewert and Muller
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Thu, 15 Dec 2011 02:28:49 +0000
parents 49a5b023df1e
children
line wrap: on
line source
/*
 *  BayesianArrayStructure.h
 *  midiCannamReader
 *
 *  Created by Andrew on 17/07/2011.
 *  Copyright 2011 QMUL. All rights reserved.
 *
 */
#ifndef BAYESIAN_ARRAY_STRUCTURE
#define BAYESIAN_ARRAY_STRUCTURE


#include "ofMain.h"
//#include "DynamicBayesianArray.h"
#include "DynamicVector.h"

class BayesianArrayStructure {
	
public:
//	BayesianArrayStructure();
	BayesianArrayStructure();
	BayesianArrayStructure(int length);
	
	void calculatePosterior();
	void drawArrays();
	void drawArraysRelativeToTimeframe(const double& startTimeMillis, const double& endTimeMillis);

	void drawTempoArrays();
	
	void resetSize(int length);
	void resetArrays();
	void simpleExample();
	void setStartPlaying();
	void zeroArrays();
	
	double screenWidth;
	
	void copyPriorToPosterior();
//	DynamicBayesianArray bayesArray;
	
	double lastEventTime;
	double likelihoodNoise;
	double speedLikelihoodNoise;
	
	//DynamicVector tmpPrior;
	DynamicVector tmpPosteriorForStorage;
	DynamicVector prior;
	DynamicVector posterior;
	DynamicVector likelihood;
	
	DynamicVector relativeSpeedPrior;
	DynamicVector relativeSpeedLikelihood;
	DynamicVector relativeSpeedPosterior;
	DynamicVector acceleration;
	
	double tmpBestEstimate;
	void updateTmpBestEstimate(const double& timeDifference);
	
	int updateCounter;
	
	void setPositionDistributionScalar(double f);
	
	void resetSpeedToOne();
	void addGaussianNoiseToSpeedPosterior(const double& std_dev);
	void addTriangularNoiseToSpeedPosterior(const double& std_dev);
	
	double bestEstimate;
	void updateBestEstimate(const double& timeDifference);
	double lastBestEstimateUpdateTime;
	double speedEstimate;
	
	double speedDecayWidth, speedDecayAmount;
	void decaySpeedDistribution(double timeDifference);
	
	void resetSpeedSize(int length);
	void setRelativeSpeedScalar(double f);
	void setSpeedPrior(double f);
	void calculateNewPriorOffset(const double& timeDifference);
	void setNewDistributionOffsets(const double& newOffset);
	
	void setLikelihoodToConstant();
	void updateTempoLikelihood(const double& speedRatio, const double& matchFactor);
	void updateTempoDistribution();
	
	void calculateTempoUpdate();
	
	void crossUpdateArrays(DynamicVector& position, DynamicVector& speed, double timeDifference);
	void complexCrossUpdate(const double& timeDifferenceInPositionVectorUnits);
	void translateByMaximumSpeed(const double& timeDifferenceInPositionVectorUnits);
	double crossUpdateTimeThreshold;//time after which we do complex update of multiple speeds
	
	double speedPriorValue;
	int priorWidth;
	bool* realTimeMode;
	bool usingIntegratedTempoEstimate;
	double relativeSpeedLikelihoodStdDev;
	
};
#endif