21 AudioClock::timecode_tester ()
24 #define Timecode_SAMPLE_TEST_1
25 #define Timecode_SAMPLE_TEST_2
26 #define Timecode_SAMPLE_TEST_3
27 #define Timecode_SAMPLE_TEST_4
28 #define Timecode_SAMPLE_TEST_5
29 #define Timecode_SAMPLE_TEST_6
30 #define Timecode_SAMPLE_TEST_7
33 Timecode::Time timecode1;
36 Timecode::Time timecode2;
41 #ifdef Timecode_SAMPLE_TEST_1
43 cout <<
"use_offset = false, use_subframes = false" << endl;
44 for (
int i = 0; i < 108003; i++) {
48 if ((i > 0) && ( ((sample1 - oldsample) != sample_increment) && ((sample1 - oldsample) != (sample_increment + 1)) && ((sample1 - oldsample) != (sample_increment - 1)))) {
49 cout <<
"ERROR: sample increment not right: " << (sample1 - oldsample) <<
" != " << sample_increment << endl;
50 cout <<
"timecode1: " << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
51 cout <<
"sample: " << sample1 << endl;
52 cout <<
"sample: " << sample1 <<
" -> ";
53 cout <<
"timecode2: " << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
57 if (timecode2.hours != timecode1.hours || timecode2.minutes != timecode1.minutes || timecode2.seconds != timecode2.seconds || timecode2.frames != timecode1.frames) {
58 cout <<
"ERROR: timecode2 not equal timecode1" << endl;
59 cout <<
"timecode1: " << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
60 cout <<
"sample: " << sample1 << endl;
61 cout <<
"sample: " << sample1 <<
" -> ";
62 cout <<
"timecode2: " << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
66 _session->timecode_increment( timecode1 );
69 cout <<
"sample_increment: " << sample_increment << endl;
70 cout <<
"sample: " << sample1 <<
" -> ";
71 cout <<
"timecode: " << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
74 #ifdef Timecode_SAMPLE_TEST_2
76 cout <<
"use_offset = true, use_subframes = false" << endl;
79 timecode1.minutes = 0;
80 timecode1.seconds = 0;
82 timecode1.subframes = 0;
83 sample1 = oldsample = 0;
86 cout <<
"Starting at sample: " << sample1 <<
" -> ";
87 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes << endl;
89 for (
int i = 0; i < 108003; i++) {
98 if ((i > 0) && ( ((sample1 - oldsample) != sample_increment) && ((sample1 - oldsample) != (sample_increment + 1)) && ((sample1 - oldsample) != (sample_increment - 1)))) {
99 cout <<
"ERROR: sample increment not right: " << (sample1 - oldsample) <<
" != " << sample_increment << endl;
100 cout <<
"timecode1: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
101 cout <<
"sample: " << sample1 << endl;
102 cout <<
"sample: " << sample1 <<
" -> ";
103 cout <<
"timecode2: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
107 if (timecode2.hours != timecode1.hours || timecode2.minutes != timecode1.minutes || timecode2.seconds != timecode2.seconds || timecode2.frames != timecode1.frames) {
108 cout <<
"ERROR: timecode2 not equal timecode1" << endl;
109 cout <<
"timecode1: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
110 cout <<
"sample: " << sample1 << endl;
111 cout <<
"sample: " << sample1 <<
" -> ";
112 cout <<
"timecode2: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
116 _session->timecode_increment( timecode1 );
119 cout <<
"sample_increment: " << sample_increment << endl;
120 cout <<
"sample: " << sample1 <<
" -> ";
121 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
124 #ifdef Timecode_SAMPLE_TEST_3
126 cout <<
"use_offset = true, use_subframes = false, decrement" << endl;
129 cout <<
"Starting at sample: " << sample1 <<
" -> ";
130 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes << endl;
132 for (
int i = 0; i < 108003; i++) {
141 if ((i > 0) && ( ((oldsample - sample1) != sample_increment) && ((oldsample - sample1) != (sample_increment + 1)) && ((oldsample - sample1) != (sample_increment - 1)))) {
142 cout <<
"ERROR: sample increment not right: " << (oldsample - sample1) <<
" != " << sample_increment << endl;
143 cout <<
"timecode1: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
144 cout <<
"sample: " << sample1 << endl;
145 cout <<
"sample: " << sample1 <<
" -> ";
146 cout <<
"timecode2: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
150 if (timecode2.hours != timecode1.hours || timecode2.minutes != timecode1.minutes || timecode2.seconds != timecode2.seconds || timecode2.frames != timecode1.frames) {
151 cout <<
"ERROR: timecode2 not equal timecode1" << endl;
152 cout <<
"timecode1: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
153 cout <<
"sample: " << sample1 << endl;
154 cout <<
"sample: " << sample1 <<
" -> ";
155 cout <<
"timecode2: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
159 _session->timecode_decrement( timecode1 );
162 cout <<
"sample_decrement: " << sample_increment << endl;
163 cout <<
"sample: " << sample1 <<
" -> ";
164 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
168 #ifdef Timecode_SAMPLE_TEST_4
170 cout <<
"use_offset = true, use_subframes = true" << endl;
172 for (
long sub = 5; sub < 80; sub += 5) {
174 timecode1.minutes = 0;
175 timecode1.seconds = 0;
176 timecode1.frames = 0;
177 timecode1.subframes = 0;
178 sample1 = oldsample = (sample_increment * sub) / 80;
182 cout <<
"starting at sample: " << sample1 <<
" -> ";
183 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes << endl;
185 for (
int i = 0; i < 108003; i++) {
189 if ((i > 0) && ( ((sample1 - oldsample) != sample_increment) && ((sample1 - oldsample) != (sample_increment + 1)) && ((sample1 - oldsample) != (sample_increment - 1)))) {
190 cout <<
"ERROR: sample increment not right: " << (sample1 - oldsample) <<
" != " << sample_increment << endl;
191 cout <<
"timecode1: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
192 cout <<
"sample: " << sample1 << endl;
193 cout <<
"sample: " << sample1 <<
" -> ";
194 cout <<
"timecode2: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
198 if (timecode2.hours != timecode1.hours || timecode2.minutes != timecode1.minutes || timecode2.seconds != timecode2.seconds || timecode2.frames != timecode1.frames || timecode2.subframes != timecode1.subframes) {
199 cout <<
"ERROR: timecode2 not equal timecode1" << endl;
200 cout <<
"timecode1: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
201 cout <<
"sample: " << sample1 << endl;
202 cout <<
"sample: " << sample1 <<
" -> ";
203 cout <<
"timecode2: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
207 _session->timecode_increment( timecode1 );
210 cout <<
"sample_increment: " << sample_increment << endl;
211 cout <<
"sample: " << sample1 <<
" -> ";
212 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
214 for (
int i = 0; i < 108003; i++) {
218 if ((i > 0) && ( ((oldsample - sample1) != sample_increment) && ((oldsample - sample1) != (sample_increment + 1)) && ((oldsample - sample1) != (sample_increment - 1)))) {
219 cout <<
"ERROR: sample increment not right: " << (oldsample - sample1) <<
" != " << sample_increment << endl;
220 cout <<
"timecode1: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
221 cout <<
"sample: " << sample1 << endl;
222 cout <<
"sample: " << sample1 <<
" -> ";
223 cout <<
"timecode2: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
227 if (timecode2.hours != timecode1.hours || timecode2.minutes != timecode1.minutes || timecode2.seconds != timecode2.seconds || timecode2.frames != timecode1.frames || timecode2.subframes != timecode1.subframes) {
228 cout <<
"ERROR: timecode2 not equal timecode1" << endl;
229 cout <<
"timecode1: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
230 cout <<
"sample: " << sample1 << endl;
231 cout <<
"sample: " << sample1 <<
" -> ";
232 cout <<
"timecode2: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
236 _session->timecode_decrement( timecode1 );
239 cout <<
"sample_decrement: " << sample_increment << endl;
240 cout <<
"sample: " << sample1 <<
" -> ";
241 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
246 #ifdef Timecode_SAMPLE_TEST_5
248 cout <<
"use_offset = true, use_subframes = false, increment seconds" << endl;
251 timecode1.minutes = 0;
252 timecode1.seconds = 0;
253 timecode1.frames = 0;
254 timecode1.subframes = 0;
255 sample1 = oldsample = 0;
259 cout <<
"Starting at sample: " << sample1 <<
" -> ";
260 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes << endl;
262 for (
int i = 0; i < 3600; i++) {
277 if (timecode2.hours != timecode1.hours || timecode2.minutes != timecode1.minutes || timecode2.seconds != timecode2.seconds || timecode2.frames != timecode1.frames) {
278 cout <<
"ERROR: timecode2 not equal timecode1" << endl;
279 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
280 cout <<
"sample: " << sample1 << endl;
281 cout <<
"sample: " << sample1 <<
" -> ";
282 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
286 _session->timecode_increment_seconds( timecode1 );
289 cout <<
"sample_increment: " << sample_increment << endl;
290 cout <<
"sample: " << sample1 <<
" -> ";
291 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
295 #ifdef Timecode_SAMPLE_TEST_6
297 cout <<
"use_offset = true, use_subframes = false, increment minutes" << endl;
300 timecode1.minutes = 0;
301 timecode1.seconds = 0;
302 timecode1.frames = 0;
303 timecode1.subframes = 0;
304 sample1 = oldsample = 0;
308 cout <<
"Starting at sample: " << sample1 <<
" -> ";
309 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes << endl;
311 for (
int i = 0; i < 60; i++) {
326 if (timecode2.hours != timecode1.hours || timecode2.minutes != timecode1.minutes || timecode2.seconds != timecode2.seconds || timecode2.frames != timecode1.frames) {
327 cout <<
"ERROR: timecode2 not equal timecode1" << endl;
328 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
329 cout <<
"sample: " << sample1 << endl;
330 cout <<
"sample: " << sample1 <<
" -> ";
331 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
335 _session->timecode_increment_minutes( timecode1 );
338 cout <<
"sample_increment: " << sample_increment << endl;
339 cout <<
"sample: " << sample1 <<
" -> ";
340 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
343 #ifdef Timecode_SAMPLE_TEST_7
345 cout <<
"use_offset = true, use_subframes = false, increment hours" << endl;
348 timecode1.minutes = 0;
349 timecode1.seconds = 0;
350 timecode1.frames = 0;
351 timecode1.subframes = 0;
352 sample1 = oldsample = 0;
356 cout <<
"Starting at sample: " << sample1 <<
" -> ";
357 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes << endl;
359 for (
int i = 0; i < 10; i++) {
374 if (timecode2.hours != timecode1.hours || timecode2.minutes != timecode1.minutes || timecode2.seconds != timecode2.seconds || timecode2.frames != timecode1.frames) {
375 cout <<
"ERROR: timecode2 not equal timecode1" << endl;
376 cout <<
"timecode: " << (timecode1.negative ?
"-" :
"") << timecode1.hours <<
":" << timecode1.minutes <<
":" << timecode1.seconds <<
":" << timecode1.frames <<
"::" << timecode1.subframes <<
" -> ";
377 cout <<
"sample: " << sample1 << endl;
378 cout <<
"sample: " << sample1 <<
" -> ";
379 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
383 _session->timecode_increment_hours( timecode1 );
386 cout <<
"sample_increment: " << sample_increment << endl;
387 cout <<
"sample: " << sample1 <<
" -> ";
388 cout <<
"timecode: " << (timecode2.negative ?
"-" :
"") << timecode2.hours <<
":" << timecode2.minutes <<
":" << timecode2.seconds <<
":" << timecode2.frames <<
"::" << timecode2.subframes << endl;
double timecode_frames_per_second() const
framecnt_t frame_rate() const
void sample_to_timecode(framepos_t sample, Timecode::Time &timecode, bool use_offset, bool use_subframes) const
void timecode_to_sample(Timecode::Time &timecode, framepos_t &sample, bool use_offset, bool use_subframes) const
ARDOUR::Session * _session