]> git.wh0rd.org - ICEs.git/blame - 218158/af_volnorm.i.2
add bfin ice
[ICEs.git] / 218158 / af_volnorm.i.2
CommitLineData
45516216 1typedef struct af_data_s {
2 int format;
3} af_data_t;
4typedef struct af_info_s {
5 const char *info;
6 const char *name;
7 const char *author;
8 const char *comment;
9 const int flags;
10 int (*open) (struct af_instance_s * vf);
11} af_info_t;
12typedef struct af_instance_s {
13 af_data_t *(*play) (struct af_instance_s * af, af_data_t * data);
14 void *setup;
15 af_data_t *data;
16} af_instance_t;
17typedef struct af_volume_s {
18 int method;
19 float mul;
20 struct {
21 float avg;
22 int len;
23 } mem[128];
24 float mid_s16;
25} af_volnorm_t;
26static void method2_int16(af_volnorm_t * s, af_data_t * c)
27{
28 register int i = 0;
29 float avg = 0.0;
30 int totallen = 0;
31 for (i = 0; i < 128; i++) {
32 avg += s->mem[i].avg * (float)s->mem[i].len;
33 totallen += s->mem[i].len;
34 }
35 if (totallen > 32000)
36 if (avg >= (32767 * 0.01))
37 s->mul = s->mid_s16 / avg;
38}
39static af_data_t *play(struct af_instance_s *af, af_data_t * data)
40{
41 af_volnorm_t *s = af->setup;
42 if (af->data->format == (((0 << 2) | (0 << 1) | (1 << 3) | (0 << 0))))
43 if (s->method)
44 method2_int16(s, data);
45}
46static int af_open(af_instance_t * af)
47{
48 af->play = play;
49}
50
51af_info_t af_info_volnorm = {
52 "Volume normalizer filter", "volnorm",
53 "Alex Beregszaszi & Pierre Lombard", "", 0x00000001, af_open
54};