Mercurial > SDL_sound_CoreAudio
comparison filter_templates.h @ 371:1b463ef9bcc2
More work from Frank.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Tue, 25 Jun 2002 17:15:03 +0000 |
parents | eda146d666d1 |
children | 24a610dfbbfd |
comparison
equal
deleted
inserted
replaced
370:12023d47b716 | 371:1b463ef9bcc2 |
---|---|
96 out+= 936 * sum_h( inp, 13); | 96 out+= 936 * sum_h( inp, 13); |
97 out-= 1295 * sum_h( inp, 11); | 97 out-= 1295 * sum_h( inp, 11); |
98 out+= 1800 * sum_h( inp, 9); | 98 out+= 1800 * sum_h( inp, 9); |
99 out-= 2560 * sum_h( inp, 7); | 99 out-= 2560 * sum_h( inp, 7); |
100 out+= 3863 * sum_h( inp, 5); | 100 out+= 3863 * sum_h( inp, 5); |
101 out-= 6764 * sum_h( inp, 3); | |
101 out+= 20798 * sum_h( inp, 1); | 102 out+= 20798 * sum_h( inp, 1); |
102 out+= 32770 * (int)inp[0]; | 103 out+= 32770 * (int)inp[0]; |
103 | 104 |
104 outp[0] = out >> 16; | 105 outp[0] = out >> 16; |
105 | 106 |
109 return outp; | 110 return outp; |
110 } | 111 } |
111 | 112 |
112 /*-------------------------------------------------------------------------*/ | 113 /*-------------------------------------------------------------------------*/ |
113 static Sint16* Suffix(increaseRate)( Sint16 *outp, Sint16 *inp, int length, | 114 static Sint16* Suffix(increaseRate)( Sint16 *outp, Sint16 *inp, int length, |
114 VarFilter* filt, int* cpos ) | 115 VarFilter* filter, int* cpos ) |
115 { | 116 { |
116 const static int fsize = CH(2*_fsize); | 117 const static int fsize = CH(2*_fsize); |
117 Sint16 *filter; | 118 Sint16 *f; |
118 int out; | 119 int out; |
119 int i, pos; | 120 int i, pos; |
120 Sint16* to; | 121 Sint16* to; |
121 | 122 |
122 inp -= fsize; | 123 inp -= fsize; |
123 to = inp - length; | 124 to = inp - length; |
125 pos = *cpos; | |
124 | 126 |
125 while( inp > to ) | 127 while( inp > to ) |
126 { | 128 { |
127 pos = *cpos; | |
128 out = 0; | 129 out = 0; |
129 filter = filt->c[pos]; | 130 f = filter->c[pos]; |
130 for( i = 0; i < 4*_fsize; i++ ) | 131 for( i = _fsize + 1; --i; inp+=CH(4), f+=4 ) |
131 out+= filter[i] * (int)inp[CH(i)]; | 132 { |
133 out+= f[0] * (int)inp[CH(0)]; | |
134 out+= f[1] * (int)inp[CH(1)]; | |
135 out+= f[2] * (int)inp[CH(2)]; | |
136 out+= f[3] * (int)inp[CH(3)]; | |
137 } | |
132 outp[0] = out >> 16; | 138 outp[0] = out >> 16; |
133 | 139 |
134 inp -= CH(filt->incr[pos]); | 140 pos = ( pos + filter->denominator - 1 ) % filter->denominator; |
141 inp -= CH( 4 * _fsize ); | |
142 inp -= CH( filter->incr[pos] ); | |
135 outp -= CH(1); | 143 outp -= CH(1); |
136 *cpos = ( pos + 1 ) % filt->denominator; | |
137 } | 144 } |
145 | |
146 *cpos = pos; | |
138 return outp; | 147 return outp; |
139 } | 148 } |
140 | 149 |
141 /*-------------------------------------------------------------------------*/ | 150 /*-------------------------------------------------------------------------*/ |
142 static Sint16* Suffix(decreaseRate)( Sint16 *outp, Sint16 *inp, int length, | 151 static Sint16* Suffix(decreaseRate)( Sint16 *outp, Sint16 *inp, int length, |
143 VarFilter* filt, int* cpos ) | 152 VarFilter* filter, int* cpos ) |
144 { | 153 { |
145 const static int fsize = CH(2*_fsize); | 154 const static int fsize = CH(2*_fsize); |
146 Sint16 *filter; | 155 Sint16 *f; |
147 int out; | 156 int out; |
148 int i, pos; | 157 int i, pos; |
149 Sint16 *to; | 158 Sint16 *to; |
150 | 159 |
151 inp -= fsize; | 160 inp -= fsize; |
152 to = inp + length; | 161 to = inp + length; |
162 pos = *cpos; | |
153 | 163 |
154 while( inp < to ) | 164 while( inp < to ) |
155 { | 165 { |
156 pos = *cpos; | |
157 out = 0; | 166 out = 0; |
158 filter = filt->c[pos]; | 167 f = filter->c[pos]; |
159 for( i = 0; i < 4*_fsize; i++ ) | 168 for( i = _fsize + 1; --i; inp+=CH(4), f+=4 ) |
160 out+= filter[i] * inp[CH(i)]; | 169 { |
170 out+= f[0] * (int)inp[CH(0)]; | |
171 out+= f[1] * (int)inp[CH(1)]; | |
172 out+= f[2] * (int)inp[CH(2)]; | |
173 out+= f[3] * (int)inp[CH(3)]; | |
174 } | |
161 outp[0] = out >> 16; | 175 outp[0] = out >> 16; |
162 | 176 |
163 inp += CH(filt->incr[pos]); | 177 inp -= CH( 4 * _fsize ); |
178 inp += CH( filter->incr[pos] ); | |
164 outp += CH(1); | 179 outp += CH(1); |
165 *cpos = ( pos + 1 ) % filt->denominator; | 180 pos = ( pos + 1 ) % filter->denominator; |
166 } | 181 } |
182 | |
183 *cpos = pos; | |
167 return outp; | 184 return outp; |
168 } | 185 } |
169 | 186 |
170 /*-------------------------------------------------------------------------*/ | 187 /*-------------------------------------------------------------------------*/ |
171 #undef sum_d | 188 #undef sum_d |