annotate libao2/pl_eq.c @ 8763:19e96e60a3d0

Speed optimizations (runs twise as fast) and bugfix (wrong cutoff frequency buffer over run noise and garbeled output when wrong input format)
author anders
date Sat, 04 Jan 2003 06:19:25 +0000
parents 46d21c0f36aa
children 12b1790038b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
1 /*=============================================================================
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
2 //
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
3 // This software has been released under the terms of the GNU Public
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
4 // license. See http://www.gnu.org/copyleft/gpl.html for details.
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
5 //
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
6 // Copyright 2001 Anders Johansson ajh@atri.curtin.edu.au
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
7 //
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
8 //=============================================================================
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
9 */
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
10
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
11 /* Equalizer plugin, implementation of a 10 band time domain graphic
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
12 equalizer using IIR filters. The IIR filters are implemented using a
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
13 Direct Form II approach. But has been modified (b1 == 0 always) to
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
14 save computation.
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
15 */
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
16 #define PLUGIN
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
17
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
18 #include <stdio.h>
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
19 #include <stdlib.h>
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
20 #include <unistd.h>
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
21 #include <inttypes.h>
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
22 #include <math.h>
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
23
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
24 #include "audio_out.h"
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
25 #include "audio_plugin.h"
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
26 #include "audio_plugin_internal.h"
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
27 #include "afmt.h"
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
28 #include "eq.h"
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
29
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
30 static ao_info_t info =
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
31 {
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
32 "Equalizer audio plugin",
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
33 "eq",
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
34 "Anders",
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
35 ""
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
36 };
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
37
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
38 LIBAO_PLUGIN_EXTERN(eq)
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
39
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
40
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
41 #define CH 6 // Max number of channels
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
42 #define L 2 // Storage for filter taps
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
43 #define KM 10 // Max number of octaves
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
44
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
45 #define Q 1.2247 /* Q value for band-pass filters 1.2247=(3/2)^(1/2)
7507
a2173bfdc133 Correction of spelling errors and removal of old code
anders
parents: 6839
diff changeset
46 gives 4dB suppression @ Fc*2 and Fc/2 */
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
47
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
48 // Center frequencies for band-pass filters
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
49 #define CF {31.25,62.5,125,250,500,1000,2000,4000,8000,16000}
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
50
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
51 // local data
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
52 typedef struct pl_eq_s
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
53 {
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
54 int16_t a[KM][L]; // A weights
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
55 int16_t b[KM][L]; // B weights
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
56 int16_t wq[CH][KM][L]; // Circular buffer for W data
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
57 int16_t g[CH][KM]; // Gain factor for each channel and band
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
58 int16_t K; // Number of used eq bands
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
59 int channels; // Number of channels
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
60 } pl_eq_t;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
61
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
62 static pl_eq_t pl_eq;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
63
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
64 // to set/get/query special features/parameters
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
65 static int control(int cmd,int arg){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
66 switch(cmd){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
67 case AOCONTROL_PLUGIN_SET_LEN:
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
68 return CONTROL_OK;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
69 case AOCONTROL_PLUGIN_EQ_SET_GAIN:{
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
70 float gain = ((equalizer_t*)arg)->gain;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
71 int ch =((equalizer_t*)arg)->channel;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
72 int band =((equalizer_t*)arg)->band;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
73 if(ch > CH || ch < 0 || band > KM || band < 0)
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
74 return CONTROL_ERROR;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
75
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
76 pl_eq.g[ch][band]=(int16_t) 4096 * (pow(10.0,gain/20.0)-1.0);
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
77 return CONTROL_OK;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
78 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
79 case AOCONTROL_PLUGIN_EQ_GET_GAIN:{
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
80 int ch =((equalizer_t*)arg)->channel;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
81 int band =((equalizer_t*)arg)->band;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
82 if(ch > CH || ch < 0 || band > KM || band < 0)
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
83 return CONTROL_ERROR;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
84
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
85 ((equalizer_t*)arg)->gain = log10((float)pl_eq.g[ch][band]/4096.0+1) * 20.0;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
86 return CONTROL_OK;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
87 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
88 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
89 return CONTROL_UNKNOWN;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
90 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
91
6439
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
92 // return rounded 16bit int
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
93 static inline int16_t lround16(double n){
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
94 return (int16_t)((n)>=0.0?(n)+0.5:(n)-0.5);
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
95 }
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
96
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
97 // 2nd order Band-pass Filter design
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
98 void bp2(int16_t* a, int16_t* b, float fc, float q){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
99 double th=2*3.141592654*fc;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
100 double C=(1 - tan(th*q/2))/(1 + tan(th*q/2));
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
101
6439
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
102 a[0] = lround16( 16383.0 * (1 + C) * cos(th));
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
103 a[1] = lround16(-16383.0 * C);
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
104
6439
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
105 b[0] = lround16(-16383.0 * (C - 1)/2);
edac9b35835d Fixed lround replacement, hopefully fast enough.
atmos4
parents: 6437
diff changeset
106 b[1] = lround16(-16383.0 * 1.0050);
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
107 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
108
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
109 // empty buffers
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
110 static void reset(){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
111 int k,l,c;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
112 for(c=0;c<pl_eq.channels;c++)
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
113 for(k=0;k<pl_eq.K;k++)
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
114 for(l=0;l<L*2;l++)
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
115 pl_eq.wq[c][k][l]=0;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
116 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
117
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
118 // open & setup audio device
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
119 // return: 1=success 0=fail
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
120 static int init(){
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7507
diff changeset
121 int k = 0;
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
122 float F[KM] = CF;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
123
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
124 // Check input format
8741
46d21c0f36aa (nicer) endianness fix for every plugin except pl_format
colin
parents: 8123
diff changeset
125 if(ao_plugin_data.format != AFMT_S16_NE){
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
126 fprintf(stderr,"[pl_eq] Input audio format not yet supported. \n");
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
127 return 0;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
128 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
129
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
130 // Check number of channels
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
131 if(ao_plugin_data.channels>CH){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
132 fprintf(stderr,"[pl_eq] Too many channels, max is 6.\n");
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
133 return 0;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
134 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
135 pl_eq.channels=ao_plugin_data.channels;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
136
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
137 // Calculate number of active filters
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
138 pl_eq.K=KM;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
139 while(F[pl_eq.K-1] > (float)ao_plugin_data.rate/2)
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
140 pl_eq.K--;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
141
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
142 // Generate filter taps
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
143 for(k=0;k<pl_eq.K;k++)
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
144 bp2(pl_eq.a[k],pl_eq.b[k],F[k]/((float)ao_plugin_data.rate),Q);
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
145
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
146 // Reset buffers
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
147 reset();
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
148
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
149 // Tell ao_plugin how much this plugin adds to the overall time delay
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
150 ao_plugin_data.delay_fix-=2/((float)pl_eq.channels*(float)ao_plugin_data.rate);
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
151 // Print some cool remark of what the plugin does
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
152 printf("[pl_eq] Equalizer in use.\n");
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
153 return 1;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
154 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
155
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
156 // close plugin
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
157 static void uninit(){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
158 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
159
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
160 // processes 'ao_plugin_data.len' bytes of 'data'
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
161 // called for every block of data
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
162 static int play(){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
163 uint16_t ci = pl_eq.channels; // Index for channels
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
164 uint16_t nch = pl_eq.channels; // Number of channels
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
165
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
166 while(ci--){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
167 int16_t* g = pl_eq.g[ci]; // Gain factor
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
168 int16_t* in = ((int16_t*)ao_plugin_data.data)+ci;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
169 int16_t* out = ((int16_t*)ao_plugin_data.data)+ci;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
170 int16_t* end = in+ao_plugin_data.len/2; // Block loop end
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
171
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
172 while(in < end){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
173 register int16_t k = 0; // Frequency band index
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
174 register int32_t yt = 0; // Total output from filters
7507
a2173bfdc133 Correction of spelling errors and removal of old code
anders
parents: 6839
diff changeset
175 register int16_t x = *in; // Current input sample
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
176 in+=nch;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
177
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
178 // Run the filters
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
179 for(;k<pl_eq.K;k++){
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
180 // Pointer to circular buffer wq
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
181 register int16_t* wq = pl_eq.wq[ci][k];
6839
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
182 #if 0
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
183 // Calculate output from AR part of current filter
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
184 register int32_t xt = (x*pl_eq.b[k][0]) >> 4;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
185 register int32_t w = xt + wq[0]*pl_eq.a[k][0] + wq[1]*pl_eq.a[k][1];
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
186 // Calculate output form MA part of current filter
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
187 yt+=(((w + wq[1]*pl_eq.b[k][1]) >> 10)*g[k]) >> 12;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
188 // Update circular buffer
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
189 wq[1] = wq[0]; wq[0] = w >> 14;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
190 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
191
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
192 // Calculate output
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
193 *out=(int16_t)(yt+x);
6839
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
194 #else
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
195 // Calculate output from AR part of current filter
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
196 register int32_t xt = (x*pl_eq.b[k][0]) / 48;
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
197 register int32_t w = xt + wq[0]*pl_eq.a[k][0] + wq[1]*pl_eq.a[k][1];
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
198 // Calculate output form MA part of current filter
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
199 yt+=(((w + wq[1]*pl_eq.b[k][1]) >> 10)*g[k]) >> 12;
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
200 // Update circular buffer
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
201 wq[1] = wq[0]; wq[0] = w / 24576;
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
202 }
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
203
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
204 // Calculate output
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
205 *out=(int16_t)(yt * 0.25 + x * 0.5);
a94cde7ef947 fix (?) equalizer distortion problem
pontscho
parents: 6439
diff changeset
206 #endif
6430
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
207 out+=nch;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
208 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
209 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
210 return 1;
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
211 }
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
212
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
213
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
214
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
215
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
216
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
217
97857ca97a8f Adding equalizer plugin
anders
parents:
diff changeset
218