view src/midiEventHolder.h @ 1:1a32ce016bb9

Changed bestEstimate timing to work via time sent from Max not the elapsed time. This had caused some problems, but this version now working surprisingly well on MIDI files with variable timing.
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Thu, 18 Aug 2011 23:27:42 +0100
parents b299a65a3ad0
children 5581023e0de4
line wrap: on
line source
/*
 *  midiEventHolder.h
 *  midiCannamReader3
 *
 *  Created by Andrew on 19/07/2011.
 *  Copyright 2011 QMUL. All rights reserved.
 *
 */
#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
	IntVector matchesFound;
	BoolVector noteOnMatches;
	
//	int recordedNoteOnIndex;
	DoubleVector recordedEventTimes;
	
	IntMatrix playedNoteOnMatrix;
	DoubleVector playedEventTimes;
	int playedNoteIndex;
	IntMatrix matchMatrix;
	DoubleMatrix matchConfidence;
	double totalConfidence;
	
	double mouseX;
	
	void clearAllEvents();
	bool drawTempoMode;
	
	double minimumMatchSpeed , maximumMatchSpeed;
	
	double period, pulsesPerQuarternote;
	double getEventTimeMillis(double ticks);
	double getEventTimeTicks(double millis);
	
	int getLocationFromTicks(double tickPosition);
	int getLocationFromMillis(double millisPosition);
	
	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 findLocalTempoPairs();
	
	
	double likelihoodWidth;
	double likelihoodToNoiseRatio;
	
	void printMatchMatrix();
	
	void setMatchLikelihoods(int numberOfMatches);
	
	void setStartPlayingTimes();
	
	int width, height;
	/////
	string matchString;
	void updatePlayPosition();
	
	DoubleMatrix beatPeriodMatrix;
	
	void drawFile();
	void reset();
	
	int ticksPerScreen;
	int tickLocation;
	int numberOfScreensIn;
	int noteArrayIndex;
	
	int matchWindowWidth;
	
	int noteMinimum, noteMaximum;
	int* screenWidth;
	int* screenHeight;
	float noteHeight;
	float tempo;
	double lastPeriodUpdateTime;
	
	double playPositionInMillis;
	
	double timeOffsetForScreen;
	
	double recentNoteOnTime;
	
	void exampleCrossUpdate();
	BayesianArrayStructure bayesStruct;

	string timeString;
	double startTime;
	
};