Mercurial > mplayer.hg
comparison mp3lib/equalizer.c @ 30990:0ad2da052b2e
the great MPlayer tab removal: part I
author | diego |
---|---|
date | Mon, 12 Apr 2010 10:56:17 +0000 |
parents | 9fc9d1e788aa |
children |
comparison
equal
deleted
inserted
replaced
30989:686241d65b86 | 30990:0ad2da052b2e |
---|---|
1 #include "mpg123.h" | 1 #include "mpg123.h" |
2 | 2 |
3 void init_spline(float *x, float *y, int n, float *y2) | 3 void init_spline(float *x, float *y, int n, float *y2) |
4 { | 4 { |
5 int i, k; | |
6 float p, qn, sig, un, *u; | |
7 u = malloc(n * sizeof (float)); | |
5 | 8 |
6 int i, k; | 9 y2[0] = u[0] = 0.0; |
7 float p, qn, sig, un, *u; | |
8 u = malloc(n * sizeof (float)); | |
9 | 10 |
10 y2[0] = u[0] = 0.0; | 11 for (i = 1; i < n - 1; i++) |
12 { | |
13 sig = ((float) x[i] - x[i - 1]) / ((float) x[i + 1] - x[i - 1]); | |
14 p = sig * y2[i - 1] + 2.0; | |
15 y2[i] = (sig - 1.0) / p; | |
16 u[i] = (((float) y[i + 1] - y[i]) / (x[i + 1] - x[i])) - | |
17 (((float) y[i] - y[i - 1]) / (x[i] - x[i - 1])); | |
18 u[i] = (6.0 * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p; | |
19 } | |
20 qn = un = 0.0; | |
11 | 21 |
12 for (i = 1; i < n - 1; i++) | 22 y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0); |
13 { | 23 for (k = n - 2; k >= 0; k--) |
14 sig = ((float) x[i] - x[i - 1]) / ((float) x[i + 1] - x[i - 1]); | 24 y2[k] = y2[k] * y2[k + 1] + u[k]; |
15 p = sig * y2[i - 1] + 2.0; | 25 free(u); |
16 y2[i] = (sig - 1.0) / p; | |
17 u[i] = (((float) y[i + 1] - y[i]) / (x[i + 1] - x[i])) - | |
18 (((float) y[i] - y[i - 1]) / (x[i] - x[i - 1])); | |
19 u[i] = (6.0 * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p; | |
20 } | |
21 qn = un = 0.0; | |
22 | |
23 y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0); | |
24 for (k = n - 2; k >= 0; k--) | |
25 y2[k] = y2[k] * y2[k + 1] + u[k]; | |
26 free(u); | |
27 } | 26 } |
28 | 27 |
29 float eval_spline(float xa[], float ya[], float y2a[], int n, float x) | 28 float eval_spline(float xa[], float ya[], float y2a[], int n, float x) |
30 { | 29 { |
31 int klo, khi, k; | 30 int klo, khi, k; |
32 float h, b, a; | 31 float h, b, a; |
33 | 32 |
34 klo = 0; | 33 klo = 0; |
35 khi = n - 1; | 34 khi = n - 1; |
36 while (khi - klo > 1) | 35 while (khi - klo > 1) |
37 { | 36 { |
38 k = (khi + klo) >> 1; | 37 k = (khi + klo) >> 1; |
39 if (xa[k] > x) | 38 if (xa[k] > x) |
40 khi = k; | 39 khi = k; |
41 else | 40 else |
42 klo = k; | 41 klo = k; |
43 } | 42 } |
44 h = xa[khi] - xa[klo]; | 43 h = xa[khi] - xa[klo]; |
45 a = (xa[khi] - x) / h; | 44 a = (xa[khi] - x) / h; |
46 b = (x - xa[klo]) / h; | 45 b = (x - xa[klo]) / h; |
47 return (a * ya[klo] + b * ya[khi] + ((a * a * a - a) * y2a[klo] + (b * b * b - b) * y2a[khi]) | 46 return (a * ya[klo] + b * ya[khi] + ((a * a * a - a) * y2a[klo] + (b * b * b - b) * y2a[khi]) |
48 * (h * h) / 6.0); | 47 * (h * h) / 6.0); |
49 } | 48 } |
50 | 49 |
51 void mpg123_set_eq(int on, float preamp, float *b) | 50 void mpg123_set_eq(int on, float preamp, float *b) |
52 { | 51 { |
53 float x[] = | 52 float x[] = |
54 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, yf[10], val, band[10]; | 53 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, yf[10], val, band[10]; |
55 int bands[] = | 54 int bands[] = |
56 {0, 4, 8, 16, 26, 78, 157, 313, 366, 418}; | 55 {0, 4, 8, 16, 26, 78, 157, 313, 366, 418}; |
57 int i, j; | 56 int i, j; |
58 | 57 |
59 mpg123_info->eq_active = on; | 58 mpg123_info->eq_active = on; |
60 if (mpg123_info->eq_active) | 59 if (mpg123_info->eq_active) |
61 { | 60 { |
62 for (i = 0; i < 10; i++) | 61 for (i = 0; i < 10; i++) |
63 { | 62 { |
64 band[i] = b[i] + preamp; | 63 band[i] = b[i] + preamp; |
65 } | 64 } |
66 | 65 |
67 init_spline(x, band, 10, yf); | 66 init_spline(x, band, 10, yf); |
68 for (i = 0; i < 9; i++) | 67 for (i = 0; i < 9; i++) |
69 { | 68 { |
70 for (j = bands[i]; j < bands[i + 1]; j++) | 69 for (j = bands[i]; j < bands[i + 1]; j++) |
71 { | 70 { |
72 val = eval_spline(x, band, yf, 10, i + ((float) (j - bands[i]) * (1.0 / (bands[i + 1] - bands[i])))); | 71 val = eval_spline(x, band, yf, 10, i + ((float) (j - bands[i]) * (1.0 / (bands[i + 1] - bands[i])))); |
73 mpg123_info->eq_mul[j] = pow(2, val / 10.0); | 72 mpg123_info->eq_mul[j] = pow(2, val / 10.0); |
74 } | 73 } |
75 } | 74 } |
76 for (i = bands[9]; i < 576; i++) | 75 for (i = bands[9]; i < 576; i++) |
77 mpg123_info->eq_mul[i] = mpg123_info->eq_mul[bands[9] - 1]; | 76 mpg123_info->eq_mul[i] = mpg123_info->eq_mul[bands[9] - 1]; |
78 } | 77 } |
79 } | 78 } |