- printf("%f\n", sample);
-// short s = lrintf((sample - 0.5f) * 16384.0f);
-// fwrite(&s, 2, 1, stdout);
+ samples.push_back(sample);
+ }
+
+ // filter forwards, then backwards (perfect phase filtering)
+ vector<float> filtered_samples, refiltered_samples;
+ filtered_samples.resize(len_samples);
+ refiltered_samples.resize(len_samples);
+
+ filter_init(M_PI * HPFILTER_FREQ / WAVE_FREQ);
+ for (int i = 0; i < len_samples; ++i) {
+ filtered_samples[i] = filter_update(samples[i]);
+ }
+ filter_init(M_PI * HPFILTER_FREQ / WAVE_FREQ);
+ for (int i = len_samples; i --> 0; ) {
+ refiltered_samples[i] = filter_update(filtered_samples[i]);
+ }
+ for (int i = 0; i < len_samples; ++i) {
+ //printf("%f %f\n", samples[i], refiltered_samples[i]);
+ short s = lrintf(refiltered_samples[i] * 16384.0f);
+ fwrite(&s, 2, 1, stdout);