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