Mercurial > hg > midi-score-follower
view src/midiEventHolder.h @ 11:df9c838d0b8f
fixed bug where the full midi file was sometimes not drawn (since minNoteIndexToPrint) was at the max and did not decrease properly in draw routine
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Tue, 25 Oct 2011 15:01:52 +0100 |
parents | 2ab6f4670cf5 |
children | 3f103cf78148 |
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, drawPhaseMode; 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(); void findLocalTempoPairsWeightedForConfidence(); 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 drawMidiFile(); 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; int speedWindowWidthMillis; bool confidenceWeightingUsed; double minimumMatchError;//recent best error between observed note and aligned midi file }; #endif