1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
//
// Equalizer macros.
//
/*
*
* This file is part of Open Sound System.
*
* Copyright (C) 4Front Technologies 1996-2008.
*
* This this source file is released under GPL v2 license (no other versions).
* See the COPYING file included in the main directory of this source
* distribution for the license terms and conditions.
*
*/
#if 0
// Constant 50% (128) gain tables
#define INCLUDE_EQPARMS \
.const EQb1_CST_0 0x10000000;\
.const EQb1_CST_1 0xE042DE20;\
.const EQb1_CST_2 0x1FBD21E0;\
.const EQb1_CST_3 0x0FBD8640;\
.const EQb1_CST_4 0xF04279C0;\
.const EQb2_CST_0 0x10000000;\
.const EQb2_CST_1 0xE2E5DDC0;\
.const EQb2_CST_2 0x1D1A2240;\
.const EQb2_CST_3 0x0D48B550;\
.const EQb2_CST_4 0xF2B74AB0;\
.const EQb3_CST_0 0x10000000;\
.const EQb3_CST_1 0xEC7021C0;\
.const EQb3_CST_2 0x138FDE40;\
.const EQb3_CST_3 0x069696A0;\
.const EQb3_CST_4 0xF9696960;\
.const EQb4_CST_0 0x10000000;\
.const EQb4_CST_1 0x094B0F90;\
.const EQb4_CST_2 0xF6B4F070;\
.const EQb4_CST_3 0x02961F24;\
.const EQb4_CST_4 0xFD69E0DC;\
.parm BYPASS 0 onoff ;
#else
#define INCLUDE_EQPARMS \
.parm EQ_GAIN 100 mono PRESCALE;\
.parm EQb1 128 eq1 LO;\
.parm EQb2 128 eq2 MID;\
.parm EQb3 128 eq3 HI;\
.parm EQb4 128 eq4 XHI;\
.parm BYPASS 0 onoff ;
#endif
#define INCLUDE_EQVARS \
.gpr eq_save;\
.gpr eq_value;\
.const 0x1000 0x1000;\
.const 44 I44;\
.const EQ_ADJUST I8;\
.const EQ_AFTERSCALE I32;\
.const EQ_PRESCALE 0.03125 /* 1/32 */
#define INCLUDE_DELAYS(PREFIX) \
.gpr PREFIX##b1_x0;\
.gpr PREFIX##b1_x1;\
.gpr PREFIX##b1_x2;\
.gpr PREFIX##b1_y0;\
.gpr PREFIX##b1_y1;\
.gpr PREFIX##b1_y2;\
.gpr PREFIX##b2_x0;\
.gpr PREFIX##b2_x1;\
.gpr PREFIX##b2_x2;\
.gpr PREFIX##b2_y0;\
.gpr PREFIX##b2_y1;\
.gpr PREFIX##b2_y2;\
.gpr PREFIX##b3_x0;\
.gpr PREFIX##b3_x1;\
.gpr PREFIX##b3_x2;\
.gpr PREFIX##b3_y0;\
.gpr PREFIX##b3_y1;\
.gpr PREFIX##b3_y2;\
.gpr PREFIX##b4_x0;\
.gpr PREFIX##b4_x1;\
.gpr PREFIX##b4_x2;\
.gpr PREFIX##b4_y0;\
.gpr PREFIX##b4_y1;\
.gpr PREFIX##b4_y2
#define MOVE(a,b) ACC3(b, a, 0, 0)
#define PASS_BAND(N, BAND)\
\
MOVE(N##_x1,N##_x2);\
MOVE(N##_x0,N##_x1);\
MOVE(eq_value, N##_x0);\
\
MOVE(N##_y1,N##_y2);\
MOVE(N##_y0,N##_y1);\
MOVE(0,N##_y0);\
\
MACS(N##_y0, 0, N##_x0,EQ##BAND##_CST_0);\
MACS(N##_y0, N##_y0, N##_x1,EQ##BAND##_CST_1);\
MACS(N##_y0, N##_y0, N##_y1,EQ##BAND##_CST_2);\
MACS(N##_y0, N##_y0, N##_x2,EQ##BAND##_CST_3);\
MACS(N##_y0, N##_y0, N##_y2,EQ##BAND##_CST_4);\
\
MACINTS(N##_y0, 0, N##_y0, EQ_ADJUST);\
ACC3(eq_value, N##_y0, 0, 0)
#define EQUALIZER(SUFFIX, PREFIX, INOUT) \
ACC3(eq_value, INOUT, 0, 0); \
ACC3(eq_save, INOUT, 0, 0); \
MACS(eq_value, 0, eq_value, EQ_GAIN);\
MACS(eq_value, 0, eq_value, EQ_PRESCALE);\
PASS_BAND(PREFIX##b4, b4); \
PASS_BAND(PREFIX##b3, b3); \
PASS_BAND(PREFIX##b2, b2); \
PASS_BAND(PREFIX##b1, b1); \
MACINTS(eq_value, 44, eq_value, EQ_AFTERSCALE);\
MACINTS(INOUT, 0, eq_value, BYPASS_OFF);\
MACINTS(INOUT, INOUT, eq_save, BYPASS_ON)
|