Home | History | Annotate | Download | only in dsp

Lines Matching refs:drc

14 #include "drc.h"
17 static void set_default_parameters(struct drc *drc);
18 static void init_data_buffer(struct drc *drc);
19 static void init_emphasis_eq(struct drc *drc);
20 static void init_crossover(struct drc *drc);
21 static void init_kernel(struct drc *drc);
22 static void free_data_buffer(struct drc *drc);
23 static void free_emphasis_eq(struct drc *drc);
24 static void free_kernel(struct drc *drc);
26 struct drc *drc_new(float sample_rate)
28 struct drc *drc = (struct drc *)calloc(1, sizeof(struct drc));
29 drc->sample_rate = sample_rate;
30 set_default_parameters(drc);
31 return drc;
34 void drc_init(struct drc *drc)
36 init_data_buffer(drc);
37 init_emphasis_eq(drc);
38 init_crossover(drc);
39 init_kernel(drc);
42 void drc_free(struct drc *drc)
44 free_kernel(drc);
45 free_emphasis_eq(drc);
46 free_data_buffer(drc);
47 free(drc);
51 static void init_data_buffer(struct drc *drc)
57 drc->data1[i] = (float *)calloc(1, size);
58 drc->data2[i] = (float *)calloc(1, size);
63 static void free_data_buffer(struct drc *drc)
68 free(drc->data1[i]);
69 free(drc->data2[i]);
73 void drc_set_param(struct drc *drc, int index, unsigned paramID, float value)
77 drc->parameters[index][paramID] = value;
80 static float drc_get_param(struct drc *drc, int index, unsigned paramID)
83 return drc->parameters[index][paramID];
87 static void set_default_parameters(struct drc *drc)
89 float nyquist = drc->sample_rate / 2;
93 float *param = drc->parameters[i];
113 drc->parameters[0][PARAM_CROSSOVER_LOWER_FREQ] = 0;
114 drc->parameters[1][PARAM_CROSSOVER_LOWER_FREQ] = 200 / nyquist;
115 drc->parameters[2][PARAM_CROSSOVER_LOWER_FREQ] = 2000 / nyquist;
118 drc->parameters[0][PARAM_FILTER_STAGE_GAIN] = 4.4f; /* dB */
119 drc->parameters[0][PARAM_FILTER_STAGE_RATIO] = 2;
120 drc->parameters[0][PARAM_FILTER_ANCHOR] = 15000 / nyquist;
171 static void init_emphasis_eq(struct drc *drc)
177 float stage_gain = drc_get_param(drc, 0, PARAM_FILTER_STAGE_GAIN);
178 float stage_ratio = drc_get_param(drc, 0, PARAM_FILTER_STAGE_RATIO);
179 float anchor_freq = drc_get_param(drc, 0, PARAM_FILTER_ANCHOR);
181 drc->emphasis_eq = eq2_new();
182 drc->deemphasis_eq = eq2_new();
189 eq2_append_biquad_direct(drc->emphasis_eq, j, &e);
190 eq2_append_biquad_direct(drc->deemphasis_eq, j, &d);
197 static void free_emphasis_eq(struct drc *drc)
199 eq2_free(drc->emphasis_eq);
200 eq2_free(drc->deemphasis_eq);
204 static void init_crossover(struct drc *drc)
206 float freq1 = drc->parameters[1][PARAM_CROSSOVER_LOWER_FREQ];
207 float freq2 = drc->parameters[2][PARAM_CROSSOVER_LOWER_FREQ];
209 crossover2_init(&drc->xo2, freq1, freq2);
213 static void init_kernel(struct drc *drc)
218 dk_init(&drc->kernel[i], drc->sample_rate);
220 float db_threshold = drc_get_param(drc, i, PARAM_THRESHOLD);
221 float db_knee = drc_get_param(drc, i, PARAM_KNEE);
222 float ratio = drc_get_param(drc, i, PARAM_RATIO);
223 float attack_time = drc_get_param(drc, i, PARAM_ATTACK);
224 float release_time = drc_get_param(drc, i, PARAM_RELEASE);
225 float pre_delay_time = drc_get_param(drc, i, PARAM_PRE_DELAY);
226 float releaseZone1 = drc_get_param(drc, i, PARAM_RELEASE_ZONE1);
227 float releaseZone2 = drc_get_param(drc, i, PARAM_RELEASE_ZONE2);
228 float releaseZone3 = drc_get_param(drc, i, PARAM_RELEASE_ZONE3);
229 float releaseZone4 = drc_get_param(drc, i, PARAM_RELEASE_ZONE4);
230 float db_post_gain = drc_get_param(drc, i, PARAM_POST_GAIN);
231 int enabled = drc_get_param(drc, i, PARAM_ENABLED);
233 dk_set_parameters(&drc->kernel[i],
247 dk_set_enabled(&drc->kernel[i], enabled);
252 static void free_kernel(struct drc *drc)
256 dk_free(&drc->kernel[i]);
353 void drc_process(struct drc *drc, float **data, int frames)
356 float **data1 = drc->data1;
357 float **data2 = drc->data2;
360 if (!drc->emphasis_disabled)
361 eq2_process(drc->emphasis_eq, data[0], data[1], frames);
364 crossover2_process(&drc->xo2, frames, data[0], data[1],
370 dk_process(&drc->kernel[0], data, frames);
371 dk_process(&drc->kernel[1], data1, frames);
372 dk_process(&drc->kernel[2], data2, frames);
379 if (!drc->emphasis_disabled)
380 eq2_process(drc->deemphasis_eq, data[0], data[1], frames);