annotate src/midiEventHolder.h @ 10:2ab6f4670cf5

added in the best estimate of error between the observed midi note and the aligned midi track.
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Mon, 17 Oct 2011 22:22:55 +0100
parents 75dcd1308658
children 3f103cf78148
rev   line source
andrew@0 1 /*
andrew@0 2 * midiEventHolder.h
andrew@0 3 * midiCannamReader3
andrew@0 4 *
andrew@0 5 * Created by Andrew on 19/07/2011.
andrew@0 6 * Copyright 2011 QMUL. All rights reserved.
andrew@0 7 *
andrew@0 8 */
andrew@2 9 #ifndef MIDI_EVENT_HOLDER
andrew@2 10 #define MIDI_EVENT_HOLDER
andrew@2 11
andrew@0 12 #include "ofMain.h"
andrew@0 13 #include "BayesianArrayStructure.h"
andrew@0 14
andrew@0 15 class midiEventHolder{
andrew@0 16
andrew@0 17 public:
andrew@0 18
andrew@0 19 midiEventHolder();
andrew@0 20 void printNotes();
andrew@0 21
andrew@0 22 typedef std::vector<int> IntVector;
andrew@0 23 typedef std::vector<IntVector> IntMatrix;
andrew@0 24
andrew@0 25 typedef std::vector<bool> BoolVector;
andrew@0 26
andrew@0 27 typedef std::vector<double> DoubleVector;
andrew@0 28 typedef std::vector<DoubleVector> DoubleMatrix;
andrew@0 29
andrew@0 30 //the rehearsal version
andrew@0 31 IntMatrix recordedNoteOnMatrix;//note, velocity, duration
andrew@2 32 DoubleVector recordedEventTimes;
andrew@2 33
andrew@0 34 IntVector matchesFound;
andrew@0 35 BoolVector noteOnMatches;
andrew@1 36
andrew@0 37 // int recordedNoteOnIndex;
andrew@2 38
andrew@0 39
andrew@0 40 IntMatrix playedNoteOnMatrix;
andrew@0 41 DoubleVector playedEventTimes;
andrew@0 42 int playedNoteIndex;
andrew@0 43 IntMatrix matchMatrix;
andrew@1 44 DoubleMatrix matchConfidence;
andrew@1 45 double totalConfidence;
andrew@0 46
andrew@1 47 double mouseX;
andrew@1 48
andrew@1 49 void clearAllEvents();
andrew@9 50 bool drawTempoMode, drawPhaseMode;
andrew@0 51
andrew@0 52 double minimumMatchSpeed , maximumMatchSpeed;
andrew@0 53
andrew@0 54 double period, pulsesPerQuarternote;
andrew@0 55 double getEventTimeMillis(double ticks);
andrew@0 56 double getEventTimeTicks(double millis);
andrew@0 57
andrew@0 58 int getLocationFromTicks(double tickPosition);
andrew@0 59 int getLocationFromMillis(double millisPosition);
andrew@0 60
andrew@0 61 double windowStartTime;
andrew@0 62
andrew@0 63 //functions for finding match to incoming note
andrew@0 64 void newNoteOnEvent(int pitch, int velocity, double timePlayed);
andrew@0 65 int findLocalMatches(int notePitch);
andrew@0 66 bool checkIfMatchedNote(const int& tmpIndex);
andrew@0 67 int findMatch(const int& notePitch, const int& startTime, const int& endTime);
andrew@0 68
andrew@0 69
andrew@0 70 void findLocalTempoPairs();
andrew@6 71 void findLocalTempoPairsWeightedForConfidence();
andrew@0 72
andrew@0 73 double likelihoodWidth;
andrew@0 74 double likelihoodToNoiseRatio;
andrew@0 75
andrew@0 76 void printMatchMatrix();
andrew@0 77
andrew@0 78 void setMatchLikelihoods(int numberOfMatches);
andrew@0 79
andrew@0 80 void setStartPlayingTimes();
andrew@3 81 void setSpeedPrior(double speedPriorValue);
andrew@0 82
andrew@0 83 int width, height;
andrew@0 84 /////
andrew@0 85 string matchString;
andrew@0 86 void updatePlayPosition();
andrew@0 87
andrew@0 88 DoubleMatrix beatPeriodMatrix;
andrew@0 89
andrew@0 90 void drawFile();
andrew@9 91 void drawMidiFile();
andrew@0 92 void reset();
andrew@5 93 void setMatchedNotesBackToFalse();
andrew@0 94
andrew@0 95 int ticksPerScreen;
andrew@0 96 int tickLocation;
andrew@0 97 int numberOfScreensIn;
andrew@0 98 int noteArrayIndex;
andrew@0 99
andrew@0 100 int matchWindowWidth;
andrew@0 101
andrew@0 102 int noteMinimum, noteMaximum;
andrew@0 103 int* screenWidth;
andrew@0 104 int* screenHeight;
andrew@0 105 float noteHeight;
andrew@0 106 float tempo;
andrew@0 107 double lastPeriodUpdateTime;
andrew@0 108
andrew@0 109 double playPositionInMillis;
andrew@0 110
andrew@0 111 double timeOffsetForScreen;
andrew@0 112
andrew@0 113 double recentNoteOnTime;
andrew@0 114
andrew@0 115 void exampleCrossUpdate();
andrew@0 116 BayesianArrayStructure bayesStruct;
andrew@0 117
andrew@3 118 double speedPriorValue;
andrew@5 119 int bestMatchIndex;
andrew@0 120 string timeString;
andrew@0 121 double startTime;
andrew@6 122 int speedWindowWidthMillis;
andrew@6 123
andrew@6 124 bool confidenceWeightingUsed;
andrew@0 125
andrew@10 126 double minimumMatchError;//recent best error between observed note and aligned midi file
andrew@2 127 };
andrew@2 128 #endif