Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void
- run(LV2_Handle instance,
- uint32_t n_samples)
- {
- Denoiser* denoiser = (Denoiser*)instance;
- const float* const input_left = denoiser->input_left;
- const float* const input_right = denoiser->input_right;
- float* const output_left = denoiser->output_left;
- float* const output_right = denoiser->output_right;
- const float sample_rate = denoiser->sample_rate;
- float bw = *(denoiser->bandwidth);
- float freq = *(denoiser->center_freq);
- float k; // intermediate variable for calculating coefficients
- float r; // ^
- float a0,a1,a2,b1,b2; // IIR filter coefficients
- float o_lb1,o_lb2, o_rb1, o_rb2; // previous left and right outputs
- float i_lb1, i_lb2, i_rb1, i_rb2; // previous left and right inputs
- r = 1 - (3*(bw/sample_rate));
- k = ( 1 - (2*r*cos(2*PI*(freq/sample_rate))) + (r*r) ) / ( 2 - (2*PI*(freq/sample_rate)) );
- a0 = k;
- a1 = -2*k*cos(2*PI*(freq/sample_rate));
- a2 = k;
- b1 = 2*r*cos(2*PI*(freq/sample_rate));
- b2 = -1*(r*r);
- o_lb1 = denoiser->o_lb1;
- o_lb2 = denoiser->o_lb2;
- o_rb1 = denoiser->o_rb1;
- o_rb2 = denoiser->o_rb2;
- i_lb1 = denoiser->i_lb1;
- i_lb2 = denoiser->i_lb2;
- i_rb1 = denoiser->i_rb1;
- i_rb2 = denoiser->i_rb2;
- for(int i = 0; i < n_samples ; i ++){
- output_left[i] = (a0*input_left[i]) + (a1*i_lb1) + (a2*i_lb2) + (b1*o_lb1) + (b2*o_lb2);
- denoiser->i_lb2 = i_lb1;
- denoiser->i_lb1 = input_left[i];
- denoiser->o_lb2 = o_lb1;
- denoiser->o_lb1 = output_left[i];
- output_right[i] = (a0*input_right[i]) + (a1*i_rb1) + (a2*i_rb2) + (b1*o_rb1) + (b2*o_rb2);
- denoiser->i_rb2 = i_rb1;
- denoiser->i_rb1 = input_right[i];
- denoiser->o_rb2 = o_rb1;
- denoiser->o_rb1 = output_right[i];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement