annotate DrumTimingLoader_OF/ofxAudioFileLoader/AudioFile.cpp @ 0:82352cfc0b23

Added files from ISMIR groove drum timing work
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Mon, 01 Oct 2012 22:24:32 +0100
parents
children
rev   line source
andrew@0 1 /*
andrew@0 2 * audioFile.cpp
andrew@0 3 * audioFileLoader3
andrew@0 4 *
andrew@0 5 * Created by Andrew on 31/07/2011.
andrew@0 6 * Copyright 2011 QMUL. All rights reserved.
andrew@0 7 *
andrew@0 8 */
andrew@0 9
andrew@0 10 #include "AudioFile.h"
andrew@0 11
andrew@0 12 const double samplingFrequency = 44100.0;
andrew@0 13
andrew@0 14 AudioFile::AudioFile(){
andrew@0 15 audioScaleSamples = 44100;
andrew@0 16 playPosition = 0;
andrew@0 17
andrew@0 18 }
andrew@0 19
andrew@0 20 void AudioFile::drawAudioVectorMillis(double startTimeMillis, double endTimeMillis){
andrew@0 21
andrew@0 22 ofBackground(255);
andrew@0 23 double startTimeSamples = startTimeMillis * samplingFrequency / 1000.0;
andrew@0 24 double endTimeSamples = endTimeMillis * samplingFrequency / 1000.0;
andrew@0 25 double screenHeight = ofGetHeight() ;
andrew@0 26 double screenWidth = ofGetWidth();
andrew@0 27
andrew@0 28 ofSetColor(255,0,0);
andrew@0 29 double numberOfSamples = endTimeSamples - startTimeSamples;
andrew@0 30 double samplesPerPixel = numberOfSamples / screenWidth;
andrew@0 31 string samplesString = "millis : sps ";
andrew@0 32 samplesString += ofToString(samplesPerPixel, 2);
andrew@0 33 samplesString += " , \n";
andrew@0 34
andrew@0 35 int lastSampleIndex = (int) startTimeSamples;
andrew@0 36
andrew@0 37 for (int i = 1;i < screenWidth;i++){// && startTimeSamples + samplesPerPixel * i < endTimeSamples;i += 1){
andrew@0 38 int sampleIndex = (int) min((startTimeSamples + samplesPerPixel * i), (double) length-1);
andrew@0 39 //if (sampleIndex < 0)
andrew@0 40 // sampleIndex = 0;
andrew@0 41 ofLine(i-1, screenHeight - (1-audioVector[sampleIndex])*screenHeight/2.0 , i, screenHeight - (1-audioVector[lastSampleIndex])*screenHeight/2.0);
andrew@0 42 samplesString += ofToString(audioVector[i])+" , \n";
andrew@0 43 lastSampleIndex = sampleIndex;
andrew@0 44
andrew@0 45 }
andrew@0 46 ofDrawBitmapString(samplesString, 20,20);
andrew@0 47
andrew@0 48 ofSetColor(100,100,100);
andrew@0 49 ofLine(screenWidth/2, 0, screenWidth/2, screenHeight);
andrew@0 50
andrew@0 51
andrew@0 52 }
andrew@0 53
andrew@0 54
andrew@0 55
andrew@0 56 void AudioFile::drawAudioVectorSamples(double startTimeSample, double endTimeSample){
andrew@0 57
andrew@0 58 ofBackground(255);
andrew@0 59 screenHeight = ofGetHeight() ;
andrew@0 60 double screenWidth = ofGetWidth();
andrew@0 61
andrew@0 62 ofSetColor(255,0,0);
andrew@0 63 double numberOfSamples = endTimeSample - startTimeSample;
andrew@0 64 double samplesPerPixel = numberOfSamples / screenWidth;
andrew@0 65
andrew@0 66 double halfHeight = screenHeight/2;
andrew@0 67
andrew@0 68 int lastSampleIndex = (int) startTimeSample;
andrew@0 69 /*
andrew@0 70 for (int i = 1;i < screenWidth;i++){// && startTimeSamples + samplesPerPixel * i < endTimeSamples;i += 1){
andrew@0 71 int sampleIndex = (int) (startTimeSample + samplesPerPixel * i);
andrew@0 72 ofLine(i-1, screenHeight - (1-audioVector[sampleIndex])*screenHeight/2.0 , i, screenHeight - (1-audioVector[lastSampleIndex])*screenHeight/2.0);
andrew@0 73 lastSampleIndex = sampleIndex;
andrew@0 74
andrew@0 75 }
andrew@0 76 */
andrew@0 77 double firstXpos = halfHeight;
andrew@0 78 double firstYpos = getPosition(startTimeSample);//screenHeight - ((1-audioVector[startTimeSample])*screenHeight/2.0);
andrew@0 79
andrew@0 80 int stepSize = 1;//(int) samplesPerPixel); optimize !! XXX
andrew@0 81 for (int sampleIndex = startTimeSample+1;sampleIndex < min(endTimeSample, (double) length);sampleIndex+= stepSize){
andrew@0 82
andrew@0 83 double secondXpos = (sampleIndex - startTimeSample) * screenWidth/numberOfSamples;
andrew@0 84 double secondYpos = getPosition(sampleIndex);//screenHeight - ((1-audioVector[sampleIndex])*screenHeight/2.0);
andrew@0 85 ofLine(firstXpos, firstYpos, secondXpos, secondYpos);
andrew@0 86
andrew@0 87 if (numberOfSamples < 100)
andrew@0 88 ofCircle(secondXpos, secondYpos, 2);
andrew@0 89
andrew@0 90 firstXpos = secondXpos;
andrew@0 91 firstYpos = secondYpos;
andrew@0 92
andrew@0 93
andrew@0 94 }
andrew@0 95
andrew@0 96 string samplesString = "samples: sps " + ofToString(samplesPerPixel, 2);
andrew@0 97 samplesString += ", number of smaplers " + ofToString(numberOfSamples, 2);
andrew@0 98 samplesString += " , \n";
andrew@0 99
andrew@0 100
andrew@0 101 string textString;
andrew@0 102 textString = ofToString(playPosition, 1);
andrew@0 103 ofDrawBitmapString(textString, 20, 20);
andrew@0 104 ofDrawBitmapString(samplesString, 20, 60);
andrew@0 105
andrew@0 106 ofSetColor(0,0,255);
andrew@0 107 ofLine(0, halfHeight, screenWidth, halfHeight);
andrew@0 108
andrew@0 109 }
andrew@0 110 /*
andrew@0 111 double testApp::getXposition(int index, int startTimeSampleIndex){
andrew@0 112 if (index >= 0 && index < audioVector.size())
andrew@0 113 return (index - startTimeSampleIndex) * screenWidth/numberOfSamples;
andrew@0 114 }
andrew@0 115 */
andrew@0 116 double AudioFile::getPosition(int index){
andrew@0 117 if (index >= 0 && index < audioVector.size())
andrew@0 118 return screenHeight - ((1-audioVector[index])*screenHeight/2.0);
andrew@0 119 else
andrew@0 120 return screenHeight /2 ;
andrew@0 121 }
andrew@0 122
andrew@0 123