X-Git-Url: https://git.sesse.net/?p=c64tapwav;a=blobdiff_plain;f=decode.cpp;h=0e88f9d85d73d55d5e5a55262c5f68f1b99acfcf;hp=1a5ee74856c5c635e37ea434213307114964be6c;hb=8bcb1606276bfbb87751e2c263a849b7c89bccb5;hpb=eb5c6ac462d461ce3929e9a82fdd5f33aa537923;ds=sidebyside diff --git a/decode.cpp b/decode.cpp index 1a5ee74..0e88f9d 100644 --- a/decode.cpp +++ b/decode.cpp @@ -1,8 +1,8 @@ #include #include #include -#include #include +#include #include #include @@ -41,7 +41,7 @@ double find_zerocrossing(const std::vector &pcm, int x) double upper = x; double lower = x + 1; - while (upper - lower > 1e-6) { + while (lower - upper > 1e-3) { double mid = 0.5f * (upper + lower); if (lanczos_interpolate(pcm, mid) > 0) { upper = mid; @@ -60,6 +60,7 @@ struct pulse { int main(int argc, char **argv) { + make_lanczos_weight_table(); std::vector pcm; while (!feof(stdin)) { @@ -189,4 +190,20 @@ int main(int argc, char **argv) fwrite(&hdr, sizeof(hdr), 1, stdout); fwrite(tap_data.data(), tap_data.size(), 1, stdout); + + // Output a debug raw file with pulse detection points. + fp = fopen("debug.raw", "wb"); + short one = 32767; + short zero = 0; + unsigned pulsenum = 0; + for (unsigned i = 0; i < pcm.size(); ++i) { + unsigned next_pulse = (pulsenum >= pulses.size()) ? INT_MAX : int(pulses[pulsenum].time * SAMPLE_RATE); + if (i >= next_pulse) { + fwrite(&one, sizeof(one), 1, fp); + ++pulsenum; + } else { + fwrite(&zero, sizeof(zero), 1, fp); + } + } + fclose(fp); }