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@0
|
9 #include "ofMain.h"
|
andrew@0
|
10 #include "BayesianArrayStructure.h"
|
andrew@0
|
11
|
andrew@0
|
12 class midiEventHolder{
|
andrew@0
|
13
|
andrew@0
|
14 public:
|
andrew@0
|
15
|
andrew@0
|
16 midiEventHolder();
|
andrew@0
|
17 void printNotes();
|
andrew@0
|
18
|
andrew@0
|
19 typedef std::vector<int> IntVector;
|
andrew@0
|
20 typedef std::vector<IntVector> IntMatrix;
|
andrew@0
|
21
|
andrew@0
|
22 typedef std::vector<bool> BoolVector;
|
andrew@0
|
23
|
andrew@0
|
24 typedef std::vector<double> DoubleVector;
|
andrew@0
|
25 typedef std::vector<DoubleVector> DoubleMatrix;
|
andrew@0
|
26
|
andrew@0
|
27 //the rehearsal version
|
andrew@0
|
28 IntMatrix recordedNoteOnMatrix;//note, velocity, duration
|
andrew@0
|
29 IntVector matchesFound;
|
andrew@0
|
30 BoolVector noteOnMatches;
|
andrew@0
|
31 // int recordedNoteOnIndex;
|
andrew@0
|
32 DoubleVector recordedEventTimes;
|
andrew@0
|
33
|
andrew@0
|
34 IntMatrix playedNoteOnMatrix;
|
andrew@0
|
35 DoubleVector playedEventTimes;
|
andrew@0
|
36 int playedNoteIndex;
|
andrew@0
|
37 IntMatrix matchMatrix;
|
andrew@0
|
38
|
andrew@0
|
39
|
andrew@0
|
40 double minimumMatchSpeed , maximumMatchSpeed;
|
andrew@0
|
41
|
andrew@0
|
42 double period, pulsesPerQuarternote;
|
andrew@0
|
43 double getEventTimeMillis(double ticks);
|
andrew@0
|
44 double getEventTimeTicks(double millis);
|
andrew@0
|
45
|
andrew@0
|
46 int getLocationFromTicks(double tickPosition);
|
andrew@0
|
47 int getLocationFromMillis(double millisPosition);
|
andrew@0
|
48
|
andrew@0
|
49 double windowStartTime;
|
andrew@0
|
50
|
andrew@0
|
51 //functions for finding match to incoming note
|
andrew@0
|
52 void newNoteOnEvent(int pitch, int velocity, double timePlayed);
|
andrew@0
|
53 int findLocalMatches(int notePitch);
|
andrew@0
|
54 bool checkIfMatchedNote(const int& tmpIndex);
|
andrew@0
|
55 int findMatch(const int& notePitch, const int& startTime, const int& endTime);
|
andrew@0
|
56
|
andrew@0
|
57
|
andrew@0
|
58 void findLocalTempoPairs();
|
andrew@0
|
59
|
andrew@0
|
60
|
andrew@0
|
61 double likelihoodWidth;
|
andrew@0
|
62 double likelihoodToNoiseRatio;
|
andrew@0
|
63
|
andrew@0
|
64 void printMatchMatrix();
|
andrew@0
|
65
|
andrew@0
|
66 void setMatchLikelihoods(int numberOfMatches);
|
andrew@0
|
67
|
andrew@0
|
68 void setStartPlayingTimes();
|
andrew@0
|
69
|
andrew@0
|
70 int width, height;
|
andrew@0
|
71 /////
|
andrew@0
|
72 string matchString;
|
andrew@0
|
73 void updatePlayPosition();
|
andrew@0
|
74
|
andrew@0
|
75 DoubleMatrix beatPeriodMatrix;
|
andrew@0
|
76
|
andrew@0
|
77 void drawFile();
|
andrew@0
|
78 void reset();
|
andrew@0
|
79
|
andrew@0
|
80 int ticksPerScreen;
|
andrew@0
|
81 int tickLocation;
|
andrew@0
|
82 int numberOfScreensIn;
|
andrew@0
|
83 int noteArrayIndex;
|
andrew@0
|
84
|
andrew@0
|
85 int matchWindowWidth;
|
andrew@0
|
86
|
andrew@0
|
87 int noteMinimum, noteMaximum;
|
andrew@0
|
88 int* screenWidth;
|
andrew@0
|
89 int* screenHeight;
|
andrew@0
|
90 float noteHeight;
|
andrew@0
|
91 float tempo;
|
andrew@0
|
92 double lastPeriodUpdateTime;
|
andrew@0
|
93
|
andrew@0
|
94 double playPositionInMillis;
|
andrew@0
|
95
|
andrew@0
|
96 double timeOffsetForScreen;
|
andrew@0
|
97
|
andrew@0
|
98 double recentNoteOnTime;
|
andrew@0
|
99
|
andrew@0
|
100 void exampleCrossUpdate();
|
andrew@0
|
101 BayesianArrayStructure bayesStruct;
|
andrew@0
|
102
|
andrew@0
|
103 string timeString;
|
andrew@0
|
104 double startTime;
|
andrew@0
|
105
|
andrew@0
|
106 }; |