view src/midiEventHolder.h @ 5:195907bb8bb7

added purple where notes have been seen - lets you see what updates have been used. Also the chopping of midi files to the beginning was introduced recently, so when they load, you chop any white space at the beginning, then use first note to launch.
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Fri, 19 Aug 2011 16:38:30 +0100
parents de86d77f2612
children 6f5836d432ca
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;
	
	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();
	void setSpeedPrior(double speedPriorValue);
	
	int width, height;
	/////
	string matchString;
	void updatePlayPosition();
	
	DoubleMatrix beatPeriodMatrix;
	
	void drawFile();
	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;
	
};
#endif