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 void AudioFile::drawAudioVectorMillis(double startTimeMillis, double endTimeMillis){
|
andrew@0
|
20
|
andrew@0
|
21 double startTimeSamples = startTimeMillis * samplingFrequency / 1000.0;
|
andrew@0
|
22 double endTimeSamples = endTimeMillis * samplingFrequency / 1000.0;
|
andrew@0
|
23 double screenHeight = ofGetHeight() ;
|
andrew@0
|
24 double screenWidth = ofGetWidth();
|
andrew@0
|
25
|
andrew@0
|
26 ofSetColor(255,0,0);
|
andrew@0
|
27 double numberOfSamples = endTimeSamples - startTimeSamples;
|
andrew@0
|
28 double samplesPerPixel = numberOfSamples / screenWidth;
|
andrew@0
|
29 string samplesString = "millis : sps ";
|
andrew@0
|
30 samplesString += ofToString(samplesPerPixel, 2);
|
andrew@0
|
31 samplesString += " , \n";
|
andrew@0
|
32
|
andrew@0
|
33 int lastSampleIndex = (int) startTimeSamples;
|
andrew@0
|
34
|
andrew@0
|
35 for (int i = 1;i < screenWidth;i++){// && startTimeSamples + samplesPerPixel * i < endTimeSamples;i += 1){
|
andrew@0
|
36 int sampleIndex = (int) min((startTimeSamples + samplesPerPixel * i), (double) length-1);
|
andrew@0
|
37 //if (sampleIndex < 0)
|
andrew@0
|
38 // sampleIndex = 0;
|
andrew@0
|
39 ofLine(i-1, screenHeight - (1-audioVector[sampleIndex])*screenHeight/2.0 , i, screenHeight - (1-audioVector[lastSampleIndex])*screenHeight/2.0);
|
andrew@0
|
40 samplesString += ofToString(audioVector[i])+" , \n";
|
andrew@0
|
41 lastSampleIndex = sampleIndex;
|
andrew@0
|
42
|
andrew@0
|
43 }
|
andrew@0
|
44 ofDrawBitmapString(samplesString, 20,20);
|
andrew@0
|
45
|
andrew@0
|
46 }
|
andrew@0
|
47
|
andrew@0
|
48
|
andrew@0
|
49
|
andrew@0
|
50 void AudioFile::drawAudioVectorSamples(double startTimeSample, double endTimeSample){
|
andrew@0
|
51
|
andrew@0
|
52 screenHeight = ofGetHeight() ;
|
andrew@0
|
53 double screenWidth = ofGetWidth();
|
andrew@0
|
54
|
andrew@0
|
55 ofSetColor(255,0,0);
|
andrew@0
|
56 double numberOfSamples = endTimeSample - startTimeSample;
|
andrew@0
|
57 double samplesPerPixel = numberOfSamples / screenWidth;
|
andrew@0
|
58
|
andrew@0
|
59 double halfHeight = screenHeight/2;
|
andrew@0
|
60
|
andrew@0
|
61 int lastSampleIndex = (int) startTimeSample;
|
andrew@0
|
62 /*
|
andrew@0
|
63 for (int i = 1;i < screenWidth;i++){// && startTimeSamples + samplesPerPixel * i < endTimeSamples;i += 1){
|
andrew@0
|
64 int sampleIndex = (int) (startTimeSample + samplesPerPixel * i);
|
andrew@0
|
65 ofLine(i-1, screenHeight - (1-audioVector[sampleIndex])*screenHeight/2.0 , i, screenHeight - (1-audioVector[lastSampleIndex])*screenHeight/2.0);
|
andrew@0
|
66 lastSampleIndex = sampleIndex;
|
andrew@0
|
67
|
andrew@0
|
68 }
|
andrew@0
|
69 */
|
andrew@1
|
70 double firstXpos = halfHeight;
|
andrew@0
|
71 double firstYpos = getPosition(startTimeSample);//screenHeight - ((1-audioVector[startTimeSample])*screenHeight/2.0);
|
andrew@0
|
72
|
andrew@0
|
73 int stepSize = 1;//(int) samplesPerPixel); optimize !! XXX
|
andrew@0
|
74 for (int sampleIndex = startTimeSample+1;sampleIndex < min(endTimeSample, (double) length);sampleIndex+= stepSize){
|
andrew@0
|
75
|
andrew@0
|
76 double secondXpos = (sampleIndex - startTimeSample) * screenWidth/numberOfSamples;
|
andrew@0
|
77 double secondYpos = getPosition(sampleIndex);//screenHeight - ((1-audioVector[sampleIndex])*screenHeight/2.0);
|
andrew@0
|
78 ofLine(firstXpos, firstYpos, secondXpos, secondYpos);
|
andrew@0
|
79
|
andrew@0
|
80 if (numberOfSamples < 100)
|
andrew@0
|
81 ofCircle(secondXpos, secondYpos, 2);
|
andrew@0
|
82
|
andrew@0
|
83 firstXpos = secondXpos;
|
andrew@0
|
84 firstYpos = secondYpos;
|
andrew@0
|
85
|
andrew@0
|
86
|
andrew@0
|
87 }
|
andrew@0
|
88
|
andrew@0
|
89 string samplesString = "samples: sps " + ofToString(samplesPerPixel, 2);
|
andrew@0
|
90 samplesString += ", number of smaplers " + ofToString(numberOfSamples, 2);
|
andrew@0
|
91 samplesString += " , \n";
|
andrew@0
|
92
|
andrew@0
|
93
|
andrew@0
|
94 //info string
|
andrew@0
|
95 string textString;
|
andrew@0
|
96 textString = ofToString(playPosition, 1);
|
andrew@0
|
97 ofDrawBitmapString(textString, 20, 20);
|
andrew@0
|
98 ofDrawBitmapString(samplesString, 20, 60);
|
andrew@0
|
99
|
andrew@0
|
100
|
andrew@0
|
101
|
andrew@0
|
102 ofSetColor(0,0,255);
|
andrew@0
|
103 ofLine(0, halfHeight, screenWidth, halfHeight);
|
andrew@0
|
104
|
andrew@0
|
105 }
|
andrew@0
|
106 /*
|
andrew@0
|
107 double testApp::getXposition(int index, int startTimeSampleIndex){
|
andrew@0
|
108 if (index >= 0 && index < audioVector.size())
|
andrew@0
|
109 return (index - startTimeSampleIndex) * screenWidth/numberOfSamples;
|
andrew@0
|
110 }
|
andrew@0
|
111 */
|
andrew@0
|
112 double AudioFile::getPosition(int index){
|
andrew@0
|
113 if (index >= 0 && index < audioVector.size())
|
andrew@0
|
114 return screenHeight - ((1-audioVector[index])*screenHeight/2.0);
|
andrew@0
|
115 else
|
andrew@0
|
116 return 0;
|
andrew@0
|
117 }
|
andrew@0
|
118
|
andrew@0
|
119
|
andrew@0
|
120 /*
|
andrew@0
|
121 void AudioFile::drawAudioVectorSamples(double startTimeSample, double endTimeSample){
|
andrew@0
|
122
|
andrew@0
|
123 double screenHeight = ofGetHeight() ;
|
andrew@0
|
124 double screenWidth = ofGetWidth();
|
andrew@0
|
125
|
andrew@0
|
126 ofSetColor(255,0,0);
|
andrew@0
|
127 double numberOfSamples = endTimeSample - startTimeSample;
|
andrew@0
|
128 double samplesPerPixel = numberOfSamples / screenWidth;
|
andrew@0
|
129
|
andrew@0
|
130 double halfHeight = screenHeight/2;
|
andrew@0
|
131
|
andrew@0
|
132 string samplesString = "samples: sps " + ofToString(samplesPerPixel, 2);
|
andrew@0
|
133 samplesString += ", number of smaplers " + ofToString(numberOfSamples, 2);
|
andrew@0
|
134 samplesString += " , \n";
|
andrew@0
|
135
|
andrew@0
|
136 int lastSampleIndex = (int) startTimeSample;
|
andrew@0
|
137
|
andrew@0
|
138 for (int i = 1;i < screenWidth;i++){// && startTimeSamples + samplesPerPixel * i < endTimeSamples;i += 1){
|
andrew@0
|
139 int sampleIndex = (int) (startTimeSample + samplesPerPixel * i);
|
andrew@0
|
140 ofLine(i-1, screenHeight - (1-audioVector[sampleIndex])*screenHeight/2.0 , i, screenHeight - (1-audioVector[lastSampleIndex])*screenHeight/2.0);
|
andrew@0
|
141 lastSampleIndex = sampleIndex;
|
andrew@0
|
142
|
andrew@0
|
143 }
|
andrew@0
|
144 //info string
|
andrew@0
|
145 string textString;
|
andrew@0
|
146 textString = ofToString(playPosition, 1);
|
andrew@0
|
147 ofDrawBitmapString(textString, 20, 20);
|
andrew@0
|
148 ofDrawBitmapString(samplesString, 20, 60);
|
andrew@0
|
149
|
andrew@0
|
150
|
andrew@0
|
151
|
andrew@0
|
152 ofSetColor(0,0,255);
|
andrew@0
|
153 ofLine(0, halfHeight, screenWidth, halfHeight);
|
andrew@0
|
154
|
andrew@0
|
155 }
|
andrew@0
|
156 */
|
andrew@0
|
157
|