annotate src/midiEventHolder.h @ 52:13194a9dca77 tip

Added exporting of image and text data
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Tue, 17 Jul 2012 22:13:10 +0100
parents 9860abc92a30
children
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@22 44 IntVector bestMatchFound;
andrew@22 45
andrew@1 46 DoubleMatrix matchConfidence;
andrew@1 47 double totalConfidence;
andrew@0 48
andrew@1 49 double mouseX;
andrew@1 50
andrew@1 51 void clearAllEvents();
andrew@9 52 bool drawTempoMode, drawPhaseMode;
andrew@0 53
andrew@0 54 double minimumMatchSpeed , maximumMatchSpeed;
andrew@0 55
andrew@0 56 double period, pulsesPerQuarternote;
andrew@0 57 double getEventTimeMillis(double ticks);
andrew@0 58 double getEventTimeTicks(double millis);
andrew@0 59
andrew@0 60 int getLocationFromTicks(double tickPosition);
andrew@0 61 int getLocationFromMillis(double millisPosition);
andrew@0 62
andrew@14 63 double getTimeNow(double eventTime);
andrew@14 64 bool runningInRealTime;
andrew@14 65
andrew@0 66 double windowStartTime;
andrew@0 67
andrew@0 68 //functions for finding match to incoming note
andrew@0 69 void newNoteOnEvent(int pitch, int velocity, double timePlayed);
andrew@0 70 int findLocalMatches(int notePitch);
andrew@0 71 bool checkIfMatchedNote(const int& tmpIndex);
andrew@0 72 int findMatch(const int& notePitch, const int& startTime, const int& endTime);
andrew@0 73
andrew@0 74
andrew@0 75 void findLocalTempoPairs();
andrew@6 76 void findLocalTempoPairsWeightedForConfidence();
andrew@0 77
andrew@0 78 double likelihoodWidth;
andrew@0 79 double likelihoodToNoiseRatio;
andrew@0 80
andrew@0 81 void printMatchMatrix();
andrew@16 82 void printRecordedEvents();
andrew@0 83
andrew@0 84 void setMatchLikelihoods(int numberOfMatches);
andrew@0 85
andrew@0 86 void setStartPlayingTimes();
andrew@3 87 void setSpeedPrior(double speedPriorValue);
andrew@0 88
andrew@0 89 int width, height;
andrew@0 90 /////
andrew@0 91 string matchString;
andrew@0 92 void updatePlayPosition();
andrew@0 93
andrew@0 94 DoubleMatrix beatPeriodMatrix;
andrew@0 95
andrew@0 96 void drawFile();
andrew@9 97 void drawMidiFile();
andrew@0 98 void reset();
andrew@5 99 void setMatchedNotesBackToFalse();
andrew@0 100
andrew@0 101 int ticksPerScreen;
andrew@0 102 int tickLocation;
andrew@0 103 int numberOfScreensIn;
andrew@0 104 int noteArrayIndex;
andrew@0 105
andrew@0 106 int matchWindowWidth;
andrew@0 107
andrew@0 108 int noteMinimum, noteMaximum;
andrew@0 109 int* screenWidth;
andrew@0 110 int* screenHeight;
andrew@0 111 float noteHeight;
andrew@0 112 float tempo;
andrew@0 113 double lastPeriodUpdateTime;
andrew@0 114
andrew@0 115 double playPositionInMillis;
andrew@0 116
andrew@0 117 double timeOffsetForScreen;
andrew@0 118
andrew@0 119 double recentNoteOnTime;
andrew@0 120
andrew@0 121 void exampleCrossUpdate();
andrew@0 122 BayesianArrayStructure bayesStruct;
andrew@0 123
andrew@3 124 double speedPriorValue;
andrew@5 125 int bestMatchIndex;
andrew@0 126 string timeString;
andrew@0 127 double startTime;
andrew@6 128 int speedWindowWidthMillis;
andrew@6 129
andrew@6 130 bool confidenceWeightingUsed;
andrew@0 131
andrew@10 132 double minimumMatchError;//recent best error between observed note and aligned midi file
andrew@14 133
andrew@16 134 void reorderMatrixFromNoteTimes(IntMatrix& noteOnMatrix);
andrew@16 135 int getIndexOfMinimumAboveTime(const double& time, IntMatrix& noteOnMatrix);
andrew@16 136 void correctTiming(IntMatrix& noteOnMatrix);
andrew@17 137 void doublecheckOrder(IntMatrix& noteOnMatrix);
andrew@17 138 int getIndexOfMinimumAboveIndex(const int& index, IntMatrix& noteOnMatrix);
andrew@21 139 bool useTempoPrior;
andrew@22 140 string tempoSpeedString;
andrew@22 141 int minimumTimeIntervalForTempoUpdate;
andrew@2 142 };
andrew@2 143 #endif