sample_t simple_mean_filter (parampointer_t parampointer) { longsample_t sum; sample_t sample; long i; advance_current_pos (¶mpointer->buffer, parampointer->filterno); sum.left = 0; sum.right = 0; for (i = 0; i <= parampointer->postlength1 + parampointer->prelength1; i++) { sample = get_from_buffer (¶mpointer->buffer, i - parampointer->postlength1); sum.left += sample.left; sum.right += sample.right; } sample.left = sum.left / (parampointer->postlength1 + parampointer->prelength1 + 1); sample.right = sum.right / (parampointer->postlength1 + parampointer->prelength1 + 1); return sample; }
sample_t monoize_filter (parampointer_t parampointer) { sample_t sample; longsample_t sum; advance_current_pos (¶mpointer->buffer, parampointer->filterno); sample = get_from_buffer (¶mpointer->buffer, 0); sum.left = (sample.left + sample.right) / 2; sample.left = sum.left; sample.right = sum.left; return sample; }
sample_t experiment_filter (parampointer_t parampointer) { sample_t sample; longsample_t longsample; /* doublesample_t doublesample; */ advance_current_pos (¶mpointer->buffer, parampointer->filterno); /* Example: a smoothing filter (lowpass, that is): y[t] = { x[t-2] + 5*x[t-1] + 13*x[t] + 5*x[t+1] + x[t+2] } / 25 */ /* zero totals */ longsample.left = 0; longsample.right = 0; /* compute the weighted sum */ sample = get_from_buffer (¶mpointer->buffer, -2); longsample.left += sample.left; longsample.right += sample.right; sample = get_from_buffer (¶mpointer->buffer, -1); longsample.left += 5 * sample.left; longsample.right += 5 * sample.right; sample = get_from_buffer (¶mpointer->buffer, 0); longsample.left += 13 * sample.left; longsample.right += 13 * sample.right; sample = get_from_buffer (¶mpointer->buffer, 1); longsample.left += 5 * sample.left; longsample.right += 5 * sample.right; sample = get_from_buffer (¶mpointer->buffer, 2); longsample.left += sample.left; longsample.right += sample.right; /* devide by the total weight */ sample.left = longsample.left / 25; sample.right = longsample.right / 25; /* return the computed sample */ return sample; }