adamstark@112
|
1 #include "doctest.h"
|
adamstark@112
|
2 #include <BTrack.h>
|
adamstark@112
|
3
|
adamstark@112
|
4 //======================================================================
|
adamstark@112
|
5 //==================== CHECKING INITIALISATION =========================
|
adamstark@112
|
6 //======================================================================
|
adamstark@112
|
7 TEST_SUITE ("checkingInitialisation")
|
adamstark@112
|
8 {
|
adamstark@112
|
9 //======================================================================
|
adamstark@112
|
10 TEST_CASE ("constructorWithNoArguments")
|
adamstark@112
|
11 {
|
adamstark@112
|
12 BTrack b;
|
adamstark@112
|
13
|
adamstark@112
|
14 CHECK_EQ (b.getHopSize(), 512);
|
adamstark@112
|
15 }
|
adamstark@112
|
16
|
adamstark@112
|
17 //======================================================================
|
adamstark@112
|
18 TEST_CASE("constructorWithHopSize")
|
adamstark@112
|
19 {
|
adamstark@112
|
20 BTrack b(1024);
|
adamstark@112
|
21
|
adamstark@112
|
22 CHECK_EQ (b.getHopSize(), 1024);
|
adamstark@112
|
23 }
|
adamstark@112
|
24
|
adamstark@112
|
25 //======================================================================
|
adamstark@112
|
26 TEST_CASE("constructorWithHopSizeAndFrameSize")
|
adamstark@112
|
27 {
|
adamstark@112
|
28 BTrack b(256,512);
|
adamstark@112
|
29
|
adamstark@112
|
30 CHECK_EQ (b.getHopSize(), 256);
|
adamstark@112
|
31 }
|
adamstark@112
|
32
|
adamstark@112
|
33 }
|
adamstark@112
|
34
|
adamstark@112
|
35 //======================================================================
|
adamstark@112
|
36 //=================== PROCESSING SIMPLE VALUES =========================
|
adamstark@112
|
37 //======================================================================
|
adamstark@112
|
38
|
adamstark@112
|
39 TEST_SUITE("processingSimpleValues")
|
adamstark@112
|
40 {
|
adamstark@112
|
41 //======================================================================
|
adamstark@112
|
42 TEST_CASE ("processZeroValuedOnsetDetectionFunctionSamples")
|
adamstark@112
|
43 {
|
adamstark@112
|
44 BTrack b(512);
|
adamstark@112
|
45
|
adamstark@112
|
46 long numSamples = 20000;
|
adamstark@112
|
47
|
adamstark@112
|
48 std::vector<double> odfSamples;
|
adamstark@112
|
49
|
adamstark@112
|
50 int maxInterval = 0;
|
adamstark@112
|
51 int currentInterval = 0;
|
adamstark@112
|
52 int numBeats = 0;
|
adamstark@112
|
53
|
adamstark@112
|
54 for (int i = 0;i < numSamples;i++)
|
adamstark@112
|
55 {
|
adamstark@112
|
56 b.processOnsetDetectionFunctionSample(0.0);
|
adamstark@112
|
57
|
adamstark@112
|
58 currentInterval++;
|
adamstark@112
|
59
|
adamstark@112
|
60 if (b.beatDueInCurrentFrame())
|
adamstark@112
|
61 {
|
adamstark@112
|
62 numBeats++;
|
adamstark@112
|
63
|
adamstark@112
|
64 if (currentInterval > maxInterval)
|
adamstark@112
|
65 {
|
adamstark@112
|
66 maxInterval = currentInterval;
|
adamstark@112
|
67 }
|
adamstark@112
|
68
|
adamstark@112
|
69 currentInterval = 0;
|
adamstark@112
|
70 }
|
adamstark@112
|
71 }
|
adamstark@112
|
72
|
adamstark@112
|
73 // check that the maximum interval between beats does not
|
adamstark@112
|
74 // exceed 100 onset detection function samples (~ 1.3 seconds)
|
adamstark@112
|
75 CHECK (maxInterval < 100);
|
adamstark@112
|
76
|
adamstark@112
|
77 // check that we have at least a beat for every 100 samples
|
adamstark@112
|
78 CHECK (numBeats > (numSamples/100));
|
adamstark@112
|
79
|
adamstark@112
|
80 }
|
adamstark@112
|
81
|
adamstark@112
|
82 //======================================================================
|
adamstark@112
|
83 TEST_CASE ("processRandomOnsetDetectionFunctionSamples")
|
adamstark@112
|
84 {
|
adamstark@112
|
85 BTrack b(512);
|
adamstark@112
|
86
|
adamstark@112
|
87 long numSamples = 20000;
|
adamstark@112
|
88
|
adamstark@112
|
89 std::vector<double> odfSamples;
|
adamstark@112
|
90
|
adamstark@112
|
91 int maxInterval = 0;
|
adamstark@112
|
92 int currentInterval = 0;
|
adamstark@112
|
93 int numBeats = 0;
|
adamstark@112
|
94
|
adamstark@112
|
95 for (int i = 0;i < numSamples;i++)
|
adamstark@112
|
96 {
|
adamstark@112
|
97 odfSamples.push_back(random() % 1000);
|
adamstark@112
|
98 }
|
adamstark@112
|
99
|
adamstark@112
|
100 for (int i = 0;i < numSamples;i++)
|
adamstark@112
|
101 {
|
adamstark@112
|
102 b.processOnsetDetectionFunctionSample(odfSamples[i]);
|
adamstark@112
|
103
|
adamstark@112
|
104 currentInterval++;
|
adamstark@112
|
105
|
adamstark@112
|
106 if (b.beatDueInCurrentFrame())
|
adamstark@112
|
107 {
|
adamstark@112
|
108 numBeats++;
|
adamstark@112
|
109
|
adamstark@112
|
110 if (currentInterval > maxInterval)
|
adamstark@112
|
111 {
|
adamstark@112
|
112 maxInterval = currentInterval;
|
adamstark@112
|
113 }
|
adamstark@112
|
114
|
adamstark@112
|
115 currentInterval = 0;
|
adamstark@112
|
116 }
|
adamstark@112
|
117 }
|
adamstark@112
|
118
|
adamstark@112
|
119 // check that the maximum interval between beats does not
|
adamstark@112
|
120 // exceed 100 onset detection function samples (~ 1.3 seconds)
|
adamstark@112
|
121 CHECK(maxInterval < 100);
|
adamstark@112
|
122
|
adamstark@112
|
123 // check that we have at least a beat for every 100 samples
|
adamstark@112
|
124 CHECK(numBeats > (numSamples/100));
|
adamstark@112
|
125
|
adamstark@112
|
126 }
|
adamstark@112
|
127
|
adamstark@112
|
128 //======================================================================
|
adamstark@112
|
129 TEST_CASE ("processNegativeOnsetDetectionFunctionSamples")
|
adamstark@112
|
130 {
|
adamstark@112
|
131 BTrack b(512);
|
adamstark@112
|
132
|
adamstark@112
|
133 long numSamples = 20000;
|
adamstark@112
|
134
|
adamstark@112
|
135 std::vector<double> odfSamples;
|
adamstark@112
|
136
|
adamstark@112
|
137 int maxInterval = 0;
|
adamstark@112
|
138 int currentInterval = 0;
|
adamstark@112
|
139 int numBeats = 0;
|
adamstark@112
|
140
|
adamstark@112
|
141 for (int i = 0;i < numSamples;i++)
|
adamstark@112
|
142 {
|
adamstark@112
|
143 odfSamples.push_back(-1.0*(random() % 1000));
|
adamstark@112
|
144 }
|
adamstark@112
|
145
|
adamstark@112
|
146 for (int i = 0;i < numSamples;i++)
|
adamstark@112
|
147 {
|
adamstark@112
|
148 b.processOnsetDetectionFunctionSample(odfSamples[i]);
|
adamstark@112
|
149
|
adamstark@112
|
150 currentInterval++;
|
adamstark@112
|
151
|
adamstark@112
|
152 if (b.beatDueInCurrentFrame())
|
adamstark@112
|
153 {
|
adamstark@112
|
154 numBeats++;
|
adamstark@112
|
155
|
adamstark@112
|
156 if (currentInterval > maxInterval)
|
adamstark@112
|
157 {
|
adamstark@112
|
158 maxInterval = currentInterval;
|
adamstark@112
|
159 }
|
adamstark@112
|
160
|
adamstark@112
|
161 currentInterval = 0;
|
adamstark@112
|
162 }
|
adamstark@112
|
163 }
|
adamstark@112
|
164
|
adamstark@112
|
165 // check that the maximum interval between beats does not
|
adamstark@112
|
166 // exceed 100 onset detection function samples (~ 1.3 seconds)
|
adamstark@112
|
167 CHECK (maxInterval < 100);
|
adamstark@112
|
168
|
adamstark@112
|
169 // check that we have at least a beat for every 100 samples
|
adamstark@112
|
170 CHECK (numBeats > (numSamples/100));
|
adamstark@112
|
171
|
adamstark@112
|
172 }
|
adamstark@112
|
173
|
adamstark@112
|
174 //======================================================================
|
adamstark@112
|
175 TEST_CASE ("processSeriesOfDeltaFunctions")
|
adamstark@112
|
176 {
|
adamstark@112
|
177 BTrack b(512);
|
adamstark@112
|
178
|
adamstark@112
|
179 long numSamples = 20000;
|
adamstark@112
|
180 int beatPeriod = 43;
|
adamstark@112
|
181
|
adamstark@112
|
182 std::vector<double> odfSamples;
|
adamstark@112
|
183
|
adamstark@112
|
184 int maxInterval = 0;
|
adamstark@112
|
185 int currentInterval = 0;
|
adamstark@112
|
186 int numBeats = 0;
|
adamstark@112
|
187 int correct = 0;
|
adamstark@112
|
188
|
adamstark@112
|
189 for (int i = 0;i < numSamples;i++)
|
adamstark@112
|
190 {
|
adamstark@112
|
191 if (i % beatPeriod == 0)
|
adamstark@112
|
192 {
|
adamstark@112
|
193 odfSamples.push_back(1000);
|
adamstark@112
|
194 }
|
adamstark@112
|
195 else
|
adamstark@112
|
196 {
|
adamstark@112
|
197 odfSamples.push_back(0.0);
|
adamstark@112
|
198 }
|
adamstark@112
|
199 }
|
adamstark@112
|
200
|
adamstark@112
|
201 for (int i = 0;i < numSamples;i++)
|
adamstark@112
|
202 {
|
adamstark@112
|
203 b.processOnsetDetectionFunctionSample(odfSamples[i]);
|
adamstark@112
|
204
|
adamstark@112
|
205 currentInterval++;
|
adamstark@112
|
206
|
adamstark@112
|
207 if (b.beatDueInCurrentFrame())
|
adamstark@112
|
208 {
|
adamstark@112
|
209 numBeats++;
|
adamstark@112
|
210
|
adamstark@112
|
211 if (currentInterval > maxInterval)
|
adamstark@112
|
212 {
|
adamstark@112
|
213 maxInterval = currentInterval;
|
adamstark@112
|
214 }
|
adamstark@112
|
215
|
adamstark@112
|
216 if (currentInterval == beatPeriod)
|
adamstark@112
|
217 {
|
adamstark@112
|
218 correct++;
|
adamstark@112
|
219 }
|
adamstark@112
|
220
|
adamstark@112
|
221 currentInterval = 0;
|
adamstark@112
|
222 }
|
adamstark@112
|
223 }
|
adamstark@112
|
224
|
adamstark@112
|
225 // check that the maximum interval between beats does not
|
adamstark@112
|
226 // exceed 100 onset detection function samples (~ 1.3 seconds)
|
adamstark@112
|
227 CHECK (maxInterval < 100);
|
adamstark@112
|
228
|
adamstark@112
|
229 // check that we have at least a beat for every 100 samples
|
adamstark@112
|
230 CHECK (numBeats > (numSamples/100));
|
adamstark@112
|
231
|
adamstark@112
|
232 // check that the number of correct beats is larger than 99%
|
adamstark@112
|
233 // of the total number of beats
|
adamstark@112
|
234 CHECK (((double)correct) > (((double)numBeats)*0.99));
|
adamstark@112
|
235 }
|
adamstark@112
|
236 } |