view bayesianArraySrc/midiEventHolder.h @ 56:4394c9490716 tip

minor changes
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Mon, 24 Dec 2012 18:58:39 +0000
parents c4f9e49226eb
children
line wrap: on
line source
/*
 *  midiEventHolder.h
 *  midiCannamReader3
 *
 *  Created by Andrew on 19/07/2011.
 *  Copyright 2011 QMUL. All rights reserved.
 *
 */
#ifndef MIDI_EVENT_HOLDER
#define MIDI_EVENT_HOLDER
 
#include "ofMain.h"
#include "BayesianArrayStructure.h"


class midiEventHolder{

public:
	
	midiEventHolder();
	void printNotes();
	
	typedef std::vector<int> IntVector;
	typedef std::vector<IntVector> IntMatrix;
	
	typedef std::vector<bool> BoolVector;
	
	typedef std::vector<double> DoubleVector;
	typedef std::vector<DoubleVector> DoubleMatrix;
	
	//the rehearsal version
	IntMatrix recordedNoteOnMatrix;//note, velocity, duration
	DoubleVector recordedEventTimes;
	
	IntVector matchesFound;
	BoolVector noteOnMatches;
	
	void drawMidiFile(IntMatrix& midiFileToDraw);
	
//	int recordedNoteOnIndex;
	
	
	IntMatrix playedNoteOnMatrix;
	DoubleVector playedEventTimes;
	int playedNoteIndex;
	IntMatrix matchMatrix;
	IntVector bestMatchFound;
	IntVector measureVector;
	
	IntVector recordedTotalNoteCounterByPitch;
	int totalNoteCounterIndex;
	
	DoubleMatrix matchConfidence;
	double totalConfidence;
	
	double mouseX;
	
	void clearAllEvents();
	bool drawTempoMode, drawPhaseMode;
	
	double minimumMatchSpeed , maximumMatchSpeed;
	
	double period, pulsesPerQuarternote;
	double getEventTimeMillis(double ticks);
	double getEventTimeTicks(double millis);
	
	int getLocationFromTicks(double tickPosition);
	int getLocationFromMillis(double millisPosition);
	
	double getTimeNow(double eventTime);
	bool runningInRealTime;
	
	double windowStartTime;
	
	//functions for finding match to incoming note
	void newNoteOnEvent(int pitch, int velocity, double timePlayed);
	int findLocalMatches(int notePitch);
	bool checkIfMatchedNote(const int& tmpIndex);
	int findMatch(const int& notePitch, const int& startTime, const int& endTime);
	
	void updateTempo();
	void findLocalTempoPairs();
	void findLocalTempoPairsWeightedForConfidence();
	void findOptimumTempoPairsToCurrentBestMatch();
	double getBestSpeedEstimate(const int& currentPlayedIndex, const int& equivalentRecordedIndex);
	
	
	void 	calcuateNewInterNoteIntervals();
	
	double likelihoodWidth;
	double likelihoodToNoiseRatio;
	
	void printMatchMatrix();
	void printRecordedEvents();
	void printNoteCounter();
	void updateNoteCounter();
	
	void setMatchLikelihoods(int numberOfMatches);
	
	void setStartPlayingTimes();
	void setSpeedPrior(double speedPriorValue);
	
	int width, height;
	/////
	string matchString;
	void updatePlayPosition();
	
	DoubleMatrix beatPeriodMatrix;
	
	void drawFile();
	void drawMidiFile();
	void reset();
	void setMatchedNotesBackToFalse();
	
	int ticksPerScreen;
	int tickLocation;
	int numberOfScreensIn;
	int noteArrayIndex;
	
	int matchWindowWidth;
	
	int noteMinimum, noteMaximum;
	int* screenWidth;
	int* screenHeight;
	float noteHeight;
	float tempo;
	double startPlayingTime;
	int lastPlayedPitch;
	
	//double playPositionInMillis;
	
	double timeOffsetForScreen;
	
	double recentNoteOnTime;
	
	void exampleCrossUpdate();
	BayesianArrayStructure bayesStruct;

	double speedPriorValue;
	int bestMatchIndex;
	string timeString;
	//double startTime;
	int speedWindowWidthMillis;
	
	bool confidenceWeightingUsed;
	
	double minimumMatchError;//recent best error between observed note and aligned midi file
	
	void reorderMatrixFromNoteTimes(IntMatrix& noteOnMatrix);
	int getIndexOfMinimumAboveTime(const double& time, IntMatrix& noteOnMatrix);
	void correctTiming(IntMatrix& noteOnMatrix);
	void doublecheckOrder(IntMatrix& noteOnMatrix);
	int getIndexOfMinimumAboveIndex(const int& index, IntMatrix& noteOnMatrix);
	bool useTempoPrior;
	string	tempoSpeedString;
	int minimumTimeIntervalForTempoUpdate;
	
	double ticksFactor;
	
	bool newOptimalMethod;
	DoubleMatrix interNoteIntervals;
	IntVector intervalsToCheck;
	void checkForCorrectInterval(const double& playedTimeDifference, DoubleVector* v);
	void drawInterNoteIntervals();
	void printInterNoteIntervals();
	int interNoteRange;
	DoubleMatrix periodValues;
	int 	periodCounter;
	void updatePeriodValue(const double& miupdatesllis);
	
	double smoothPlayPosition;
//	double storedSmoothPlayPosition;
//	double lastSmoothUpdateTime;
//	double relativeSpeedForSmooth;
//	void updateSmoothPlaySpeed();;
	//best alignment
	double alignmentPosition;
	double firstEventOffsetTimeMillis;
	
	void updateSmoothPositionTo(const double& newPosition);
	int smoothIndex;
	DoubleVector beatPositions;

};
#endif