annotate src/timeWarp.h @ 0:572c856e38ac

Starting up openFrameworks project for audio time warping. The ofxFileReader goes in addons of your OF folder, the libraries and source (chromogram, fftw and source code src+ timewarp) are probably best kept in the repository, then dragged into the project afresh. That way, as we update the repository, the code that the openFrameworks project looks for will be updated.
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Tue, 17 May 2011 08:48:58 +0100
parents
children 6842ff391568
rev   line source
andrew@0 1 /*
andrew@0 2 * timeWarp.h
andrew@0 3 * chromaReader13
andrew@0 4 *
andrew@0 5 * Created by Andrew on 16/05/2011.
andrew@0 6 * Copyright 2011 QMUL. All rights reserved.
andrew@0 7 *
andrew@0 8 */
andrew@0 9
andrew@0 10 #ifndef _TIME_WARP
andrew@0 11 #define _TIME_WARP
andrew@0 12
andrew@0 13
andrew@0 14 #include "ofMain.h"
andrew@0 15 #include "chromaGram.h"
andrew@0 16 #include "ChordDetect.h"
andrew@0 17 #include "sndfile.h"
andrew@0 18 #include "ofxFileDialogOSX.h"
andrew@0 19
andrew@0 20
andrew@0 21 #define FRAMESIZE 512
andrew@0 22 #define ENERGY_LENGTH 80000
andrew@0 23 #define CHROMA_LENGTH 12000
andrew@0 24 #define CHROMA_CONVERSION_FACTOR 16 //16 times as many frames in energy as in chroma
andrew@0 25 //length in terms of frames (at 512 samples per frame - there are 90 per second) => 900: 10 seconds
andrew@0 26
andrew@0 27 class timeWarp : public ofBaseApp{
andrew@0 28
andrew@0 29 public:
andrew@0 30
andrew@0 31 /*
andrew@0 32 void setup();
andrew@0 33 void update();
andrew@0 34 void draw();
andrew@0 35
andrew@0 36 void keyPressed (int key);
andrew@0 37 void keyReleased(int key);
andrew@0 38 void mouseMoved(int x, int y );
andrew@0 39 void mouseDragged(int x, int y, int button);
andrew@0 40 void mousePressed(int x, int y, int button);
andrew@0 41 void mouseReleased(int x, int y, int button);
andrew@0 42 void windowResized(int w, int h);
andrew@0 43
andrew@0 44 void audioRequested (float * input, int bufferSize, int nChannels);
andrew@0 45 void loadSndfile();
andrew@0 46 */
andrew@0 47
andrew@0 48 double getEnergyOfFrame();
andrew@0 49 void putEnergyInFrame();
andrew@0 50
andrew@0 51 // void drawChromoGram();
andrew@0 52 // void loadFirstAudioFile();
andrew@0 53 void initialiseVariables();
andrew@0 54
andrew@0 55 //variables
andrew@0 56 typedef std::vector<double> DoubleVector;
andrew@0 57 typedef std::vector<DoubleVector> DoubleMatrix;
andrew@0 58
andrew@0 59 DoubleMatrix chromaMatrix;
andrew@0 60 DoubleMatrix secondMatrix;
andrew@0 61 DoubleMatrix* matrixPtr;
andrew@0 62
andrew@0 63 // void drawDoubleMatrix(DoubleMatrix* dMatrix);//DoubleMatrix* dMatrix); WOULD BE NICE TO USE POINTER BUT NOT WORKING YET
andrew@0 64 // void drawSpectralDifference(DoubleMatrix* dMatrix);
andrew@0 65
andrew@0 66 DoubleVector firstEnergyVector;
andrew@0 67 DoubleVector secondEnergyVector;
andrew@0 68
andrew@0 69 DoubleMatrix similarityMatrix;
andrew@0 70
andrew@0 71 void calculateSimilarityMatrix();
andrew@0 72
andrew@0 73 // bool drawSimilarity;
andrew@0 74 // void drawSimilarityMatrix();
andrew@0 75 // void printSimilarityMatrix(int sizeToPrint);
andrew@0 76
andrew@0 77 DoubleMatrix alignmentMeasureMatrix;
andrew@0 78 DoubleVector minimumAlignmentPath;
andrew@0 79
andrew@0 80 // void drawAlignmentPath(int startingChromaXFrame, int startingChromaYFrame);
andrew@0 81 int findStartWidthFrame();
andrew@0 82
andrew@0 83 // void printScoreForRow(int row, int max);
andrew@0 84
andrew@0 85 // int numberOfScrollWidthsForFirstFile;
andrew@0 86 // int numberOfScrollWidthsForSecondFile;
andrew@0 87 // void checkIfAudioPositionExceedsWidthForFirstFile();
andrew@0 88
andrew@0 89 typedef std::vector<int> IntVector;
andrew@0 90 typedef std::vector<IntVector> IntMatrix;
andrew@0 91
andrew@0 92 // void updateAlignmentPathIndex(int idenifier);
andrew@0 93
andrew@0 94 IntMatrix backwardsAlignmentPath;
andrew@0 95 int backwardsAlignmentIndex;
andrew@0 96
andrew@0 97 bool findPreviousMinimumInBackwardsPath();
andrew@0 98 bool testForNewAlignmentMinimum(double *previousMinimum, int i, int j);
andrew@0 99
andrew@0 100 void calculateAlignmentMatrix();
andrew@0 101 double getDistance(int i, int j);
andrew@0 102 void printAlignmentMatrix();
andrew@0 103 double getMinimum(int i, int j, float newValue);
andrew@0 104 bool extendAlignmentUp();
andrew@0 105 bool extendAlignmentAlong();
andrew@0 106 void calculateMinimumAlignmentPath();
andrew@0 107 int findMinimumOfVector(DoubleVector *d);
andrew@0 108 // void swapBetweenPlayingFilesUsingAlignmentMatch();
andrew@0 109 // int findMatchFromAlignment(bool whichFileToTest);
andrew@0 110
andrew@0 111 // void drawEnergyVectorFromPointer(DoubleVector* energyVec);
andrew@0 112
andrew@0 113 // void processAudioToDoubleMatrix(Chromagram* chromaG, DoubleMatrix* myDoubleMatrix, DoubleVector* energyVector);
andrew@0 114
andrew@0 115
andrew@0 116
andrew@0 117
andrew@0 118 Chromagram chromoGramm;
andrew@0 119 Chromagram secondChromoGramm;
andrew@0 120
andrew@0 121
andrew@0 122
andrew@0 123 // void loadNewAudio(string soundFileName);
andrew@0 124 // void loadSecondAudio(string soundFileName);
andrew@0 125
andrew@0 126 // void loadSoundFiles();
andrew@0 127 // void openFileDialogBox();
andrew@0 128 // void loadLibSndFile(const char * filename);
andrew@0 129 // bool getFilenameFromDialogBox(string* fileNameToSave);
andrew@0 130 // void openNewAudioFileWithdialogBox();
andrew@0 131
andrew@0 132 //int* firstAudioLength, secondAudioLength;
andrew@0 133
andrew@0 134 // string soundFileName, secondFileName;
andrew@0 135
andrew@0 136 // float screenHeight, screenWidth;
andrew@0 137
andrew@0 138
andrew@0 139 // bool moveOn;
andrew@0 140 // bool drawSpectralDifferenceFunction;
andrew@0 141
andrew@0 142 float frame[FRAMESIZE];
andrew@0 143
andrew@0 144 float diagonalPenalty;
andrew@0 145
andrew@0 146 // int frameIndex;
andrew@0 147
andrew@0 148 // float chromoGramVector[CHROMA_LENGTH][12];
andrew@0 149 // int rootChord[CHROMA_LENGTH];
andrew@0 150
andrew@0 151 // int energyIndex;
andrew@0 152 // int totalFrames;
andrew@0 153
andrew@0 154 // int scrollWidth;// 1600
andrew@0 155 // float chromoLength;
andrew@0 156
andrew@0 157 // bool audioPlaying, audioPaused;
andrew@0 158 // bool drawSecondMatrix;
andrew@0 159
andrew@0 160 /*
andrew@0 161
andrew@0 162
andrew@0 163 //------------------- for the simple sine wave synthesis
andrew@0 164 float targetFrequency;
andrew@0 165 float phase;
andrew@0 166 float phaseAdder;
andrew@0 167 float phaseAdderTarget;
andrew@0 168
andrew@0 169 string sndfileInfoString, textString;
andrew@0 170 int xIndex;
andrew@0 171
andrew@0 172 bool firstAudioFilePlaying;
andrew@0 173 ofSoundPlayer loadedAudio;
andrew@0 174 ofSoundPlayer secondAudio;
andrew@0 175 ofSoundPlayer *playingAudio;
andrew@0 176
andrew@0 177 */
andrew@0 178 // float audioPosition;
andrew@0 179 // float width, height;
andrew@0 180 // int chromaIndex;
andrew@0 181 // int totalNumberOfFrames;
andrew@0 182 // int currentPlayingFrame;
andrew@0 183 // int currentChromaFrame ;
andrew@0 184
andrew@0 185 // string chordString;
andrew@0 186
andrew@0 187 //Chromagram* chromoGrammPtr;
andrew@0 188
andrew@0 189
andrew@0 190
andrew@0 191
andrew@0 192 // string userInfoString;
andrew@0 193 // ChordDetect chord;
andrew@0 194 //sndfile part
andrew@0 195 // SNDFILE *infile; // define input and output sound files
andrew@0 196 // SF_INFO sfinfo ; // struct to hold info about sound file
andrew@0 197
andrew@0 198
andrew@0 199 };
andrew@0 200
andrew@0 201 #endif