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 |