view src/midiEventHolder.h @ 11:df9c838d0b8f

fixed bug where the full midi file was sometimes not drawn (since minNoteIndexToPrint) was at the max and did not decrease properly in draw routine
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Tue, 25 Oct 2011 15:01:52 +0100
parents 2ab6f4670cf5
children 3f103cf78148
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;
	
//	int recordedNoteOnIndex;
	
	
	IntMatrix playedNoteOnMatrix;
	DoubleVector playedEventTimes;
	int playedNoteIndex;
	IntMatrix matchMatrix;
	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 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();
	void findLocalTempoPairsWeightedForConfidence();
	
	double likelihoodWidth;
	double likelihoodToNoiseRatio;
	
	void printMatchMatrix();
	
	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 lastPeriodUpdateTime;
	
	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
};
#endif