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
|