andrew@28: /* andrew@28: * BayesianArrayStructure.h andrew@28: * midiCannamReader andrew@28: * andrew@28: * Created by Andrew on 17/07/2011. andrew@28: * Copyright 2011 QMUL. All rights reserved. andrew@28: * andrew@28: */ andrew@28: #ifndef BAYESIAN_ARRAY_STRUCTURE andrew@28: #define BAYESIAN_ARRAY_STRUCTURE andrew@28: andrew@28: andrew@28: #include "ofMain.h" andrew@28: //#include "DynamicBayesianArray.h" andrew@28: #include "DynamicVector.h" andrew@28: andrew@28: class BayesianArrayStructure { andrew@28: andrew@28: public: andrew@28: // BayesianArrayStructure(); andrew@28: BayesianArrayStructure(); andrew@28: BayesianArrayStructure(int length); andrew@28: andrew@28: void calculatePosterior(); andrew@28: void drawArrays(); andrew@28: void drawArraysRelativeToTimeframe(const double& startTimeMillis, const double& endTimeMillis); andrew@28: andrew@28: void drawTempoArrays(); andrew@28: andrew@28: void resetSize(int length); andrew@28: void resetArrays(); andrew@28: void simpleExample(); andrew@28: void setStartPlaying(); andrew@28: void zeroArrays(); andrew@28: andrew@28: double screenWidth; andrew@28: andrew@28: void copyPriorToPosterior(); andrew@28: // DynamicBayesianArray bayesArray; andrew@28: andrew@28: double lastEventTime; andrew@28: double likelihoodNoise; andrew@28: double speedLikelihoodNoise; andrew@28: andrew@28: //DynamicVector tmpPrior; andrew@28: DynamicVector tmpPosteriorForStorage; andrew@28: DynamicVector prior; andrew@28: DynamicVector posterior; andrew@28: DynamicVector likelihood; andrew@28: andrew@28: DynamicVector relativeSpeedPrior; andrew@28: DynamicVector relativeSpeedLikelihood; andrew@28: DynamicVector relativeSpeedPosterior; andrew@28: DynamicVector acceleration; andrew@28: andrew@28: double tmpBestEstimate; andrew@28: void updateTmpBestEstimate(const double& timeDifference); andrew@28: andrew@28: int updateCounter; andrew@28: andrew@28: void setPositionDistributionScalar(double f); andrew@28: andrew@28: void resetSpeedToOne(); andrew@28: void addGaussianNoiseToSpeedPosterior(const double& std_dev); andrew@28: void addTriangularNoiseToSpeedPosterior(const double& std_dev); andrew@28: andrew@28: double bestEstimate; andrew@28: void updateBestEstimate(const double& timeDifference); andrew@28: double lastBestEstimateUpdateTime; andrew@28: double speedEstimate; andrew@28: andrew@28: double speedDecayWidth, speedDecayAmount; andrew@28: void decaySpeedDistribution(double timeDifference); andrew@28: andrew@28: void resetSpeedSize(int length); andrew@28: void setRelativeSpeedScalar(double f); andrew@28: void setSpeedPrior(double f); andrew@28: void calculateNewPriorOffset(const double& timeDifference); andrew@28: void setNewDistributionOffsets(const double& newOffset); andrew@28: andrew@28: void setLikelihoodToConstant(); andrew@28: void updateTempoLikelihood(const double& speedRatio, const double& matchFactor); andrew@28: void updateTempoDistribution(); andrew@28: andrew@28: void calculateTempoUpdate(); andrew@28: andrew@28: void crossUpdateArrays(DynamicVector& position, DynamicVector& speed, double timeDifference); andrew@28: void complexCrossUpdate(const double& timeDifferenceInPositionVectorUnits); andrew@28: void translateByMaximumSpeed(const double& timeDifferenceInPositionVectorUnits); andrew@28: double crossUpdateTimeThreshold;//time after which we do complex update of multiple speeds andrew@28: andrew@28: double speedPriorValue; andrew@28: int priorWidth; andrew@28: bool* realTimeMode; andrew@28: bool usingIntegratedTempoEstimate; andrew@28: double relativeSpeedLikelihoodStdDev; andrew@28: andrew@28: }; andrew@28: #endif