+
+ // Calibrate on the first ~15k pulses (skip a few, just to be sure).
+ float calibration_factor = 1.0f;
+ if (pulse_lengths.size() < 20000) {
+ fprintf(stderr, "Too few pulses, not calibrating!\n");
+ } else {
+ double sum = 0.0;
+ for (int i = 1000; i < 16000; ++i) {
+ sum += pulse_lengths[i];
+ }
+ double mean_length = C64_FREQUENCY * sum / 15000.0f;
+ calibration_factor = 380.0 / mean_length;
+ fprintf(stderr, "Cycle length: %.2f -> 380.0 (change %+.2f%%)\n",
+ mean_length, 100.0 * (calibration_factor - 1.0));
+ }
+
+ for (int i = 0; i < pulse_lengths.size(); ++i) {
+ int len = lrintf(pulse_lengths[i] * calibration_factor * C64_FREQUENCY / TAP_RESOLUTION);
+ //fprintf(stderr, "length: %f (0x%x)\n", t - last_upflank, len);
+ printf("0x%x\n", len);
+ }