Continued preecho tuning/fixes. Gone to average dB with even/odd
[platform/upstream/libvorbis.git] / lib / modes / psych_44.h
1 /********************************************************************
2  *                                                                  *
3  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
4  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
5  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
7  *                                                                  *
8  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
9  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
10  *                                                                  *
11  ********************************************************************
12
13  function: key psychoacoustic settings for 44.1/48kHz
14  last mod: $Id: psych_44.h,v 1.10 2002/03/24 21:04:03 xiphmont Exp $
15
16  ********************************************************************/
17
18
19 /* preecho trigger settings *****************************************/
20
21 static vorbis_info_psy_global _psy_global_44[4]={
22
23   {8,   /* lines per eighth octave */
24    /*{990.f,990.f,990.f,990.f}, {-990.f,-990.f,-990.f,-990.f}, -90.f,
25    {0.f,0.f,0.f,0.f}, {-0.f,-0.f,-0.f,-0.f}, -90.f,*/
26    {16.f,14.f,12.f,12.f}, {-990.f,-990.f,-990.f,-990.f}, -80.f,
27    -6.f, 0,
28   },
29   {8,   /* lines per eighth octave */
30    /*{990.f,990.f,990.f,990.f}, {-990.f,-990.f,-990.f,-990.f}, -90.f,*/
31    {14.f,12.f,11.f,11.f}, {-990.f,-990.f,-990.f,-990.f}, -85.f,
32    -6.f, 0,
33   },
34   {8,   /* lines per eighth octave */
35    {14.f,12.f,10.f,10.f}, {-90.f,-90.f,-90.f,-90.f}, -85.f,
36    -6.f, 0,
37   },
38   {8,   /* lines per eighth octave */
39    {12.f,10.f,8.f,8.f}, {-40.f,-40.f,-40.f,-40.f}, -90.f,
40    -6.f, 0,
41   },
42   {8,   /* lines per eighth octave */
43    {12.f,10.f,8.f,8.f}, {-14.f,-14.f,-12.f,-12.f}, -90.f,
44    -6.f, 0,
45   },
46 };
47
48 /* noise compander lookups * low, mid, high quality ****************/
49
50 static float _psy_compand_44_short[3][NOISE_COMPAND_LEVELS]={
51   /* sub-mode Z */
52   {
53     0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f,  7.f,     /* 7dB */
54     8.f, 9.f,10.f,11.f,12.f,13.f,14.f, 15.f,     /* 15dB */
55     16.f,17.f,18.f,19.f,20.f,21.f,22.f, 23.f,     /* 23dB */
56     24.f,25.f,26.f,27.f,28.f,29.f,30.f, 31.f,     /* 31dB */
57     32.f,33.f,34.f,35.f,36.f,37.f,38.f, 39.f,     /* 39dB */
58   },
59   /* mode_Z nominal */
60   {
61      0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f,  6.f,     /* 7dB */
62      7.f, 7.f, 7.f, 7.f, 6.f, 6.f, 6.f,  7.f,     /* 15dB */
63      7.f, 8.f, 9.f,10.f,11.f,12.f,13.f, 14.f,     /* 23dB */
64     15.f,16.f,17.f,17.f,17.f,18.f,18.f, 19.f,     /* 31dB */
65     19.f,19.f,20.f,21.f,22.f,23.f,24.f, 25.f,     /* 39dB */
66   },
67   /* mode A */
68   {
69     0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 5.f,  5.f,     /* 7dB */
70     6.f, 6.f, 6.f, 5.f, 4.f, 4.f, 4.f,  4.f,     /* 15dB */
71     4.f, 4.f, 5.f, 5.f, 5.f, 6.f, 6.f,  6.f,     /* 23dB */
72     7.f, 7.f, 7.f, 8.f, 8.f, 8.f, 9.f, 10.f,     /* 31dB */
73     11.f,12.f,13.f,14.f,15.f,16.f,17.f, 18.f,     /* 39dB */
74   }
75 };
76
77 static float _psy_compand_44[3][NOISE_COMPAND_LEVELS]={
78   /* sub-mode Z */
79   {
80      0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f,  7.f,     /* 7dB */
81      8.f, 9.f,10.f,11.f,12.f,13.f,14.f, 15.f,     /* 15dB */
82     16.f,17.f,18.f,19.f,20.f,21.f,22.f, 23.f,     /* 23dB */
83     24.f,25.f,26.f,27.f,28.f,29.f,30.f, 31.f,     /* 31dB */
84     32.f,33.f,34.f,35.f,36.f,37.f,38.f, 39.f,     /* 39dB */
85   },
86   /* mode_Z nominal */
87   {
88     0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f,  7.f,     /* 7dB */
89     8.f, 9.f,10.f,11.f,12.f,12.f,13.f, 13.f,     /* 15dB */
90     13.f,14.f,14.f,14.f,15.f,15.f,15.f, 15.f,     /* 23dB */
91     16.f,16.f,17.f,17.f,17.f,18.f,18.f, 19.f,     /* 31dB */
92     19.f,19.f,20.f,21.f,22.f,23.f,24.f, 25.f,     /* 39dB */
93   },
94   /* mode A */
95   {
96     0.f, 1.f, 2.f, 3.f, 4.f, 5.f, 6.f,  7.f,     /* 7dB */
97     8.f, 8.f, 7.f, 6.f, 5.f, 4.f, 4.f,  4.f,     /* 15dB */
98     4.f, 4.f, 5.f, 5.f, 5.f, 6.f, 6.f,  6.f,     /* 23dB */
99     7.f, 7.f, 7.f, 8.f, 8.f, 8.f, 9.f, 10.f,     /* 31dB */
100     11.f,12.f,13.f,14.f,15.f,16.f,17.f, 18.f,     /* 39dB */
101   }
102 };
103
104 /* tonal masking curve level adjustments *************************/
105 static vp_adjblock _vp_tonemask_adj_longblock[6]={
106   /* adjust for mode zero */
107   {{
108     { 10, 10,  5,                               }, /*63*/
109     { 10, 10,  5,                               }, 
110     { 10, 10,  5,                               }, /* 125 */
111     { 10, 10,  5,                               }, 
112     { 10, 10,  5,                               }, /* 250 */
113     { 10, 10,  5,                               }, 
114     { 10, 10,  5,                               }, /* 500 */
115     { 10, 10,  5,                               }, 
116     { 10, 10,  5,                               }, /* 1000 */
117     { 10, 10,  5,                               }, 
118
119     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, /* 2000 */
120     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
121     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, /* 4000 */
122     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
123     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, /* 8000 */
124     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, 
125     { 16, 16, 14, 12, 12, 15, 15, 15, 15, 15, 10}, /* 16000 */
126   }},
127
128   /* adjust for mode two */
129   {{
130     { 10, 10,  5,                               }, /*63*/
131     { 10, 10,  5,                               }, 
132     { 10, 10,  5,                               }, /* 125 */
133     { 10, 10,  5,                               }, 
134     { 10, 10,  5,                               }, /* 250 */
135     { 10, 10,  5,                               }, 
136     { 10, 10,  5,                               }, /* 500 */
137     { 10, 10,  5,                               }, 
138     { 10, 10,  5,                               }, /* 1000 */
139     { 10, 10,  5,                               }, 
140
141     {  0,                                       }, /* 2000 */
142     {  0,                                       },
143     { 10,  5,  5,                               }, /* 4000 */
144     { 10, 10,  5,                               },
145     { 10, 10,  7,  5,                           }, /* 8000 */
146     { 10, 10,  7,  7,  5,  5, 10, 10, 10,  5,   }, 
147     { 16, 16, 14,  8,  8,  8, 10, 10, 10,  5,   }, /* 16000 */
148   }},
149
150   /* adjust for mode four */
151   {{
152     { 10,  5,  5,                               }, /*63*/
153     { 10,  5,  5,                               }, 
154     { 10,  5,  5,                               }, /* 125 */
155     { 10,  5,  5,                               }, 
156     { 10,  5,  5,                               }, /* 250 */
157     { 10,  5,  5,                               }, 
158     { 10,  5,  5,                               }, /* 500 */
159     { 10,  5,  5,                               }, 
160     { 10,  5,  5,                               }, /* 1000 */
161     { 10,  5,  5,                               }, 
162
163     {  0,                                       }, /* 2000 */
164     {  0,                                       },
165     {  0,                                       }, /* 4000 */
166     { 10,  5,  5,                               },
167     { 10, 10,  7,  5,                           }, /* 8000 */
168     { 10, 10,  7,  5,  5,  5, 10, 10, 10,  5,   }, 
169     { 16, 16, 14,  8,  8,  8, 10, 10, 10,  5,   }, /* 16000 */
170   }},
171
172   /* adjust for mode six */
173   {{
174     { 10,  5,  5,                               }, /*63*/
175     { 10,  5,  5,                               }, 
176     { 10,  5,  5,                               }, /* 125 */
177     { 10,  5,  5,                               }, 
178     { 10,  5,  5,                               }, /* 250 */
179     { 10,  5,  5,                               }, 
180     { 10,  5,  5,                               }, /* 500 */
181     { 10,  5,  5,                               }, 
182     { 10,  5,  5,                               }, /* 1000 */
183     { 10,  5,  5,                               }, 
184
185     {  0,                                       }, /* 2000 */
186     {  0,                                       },
187     {  0,                                       }, /* 4000 */
188     { 10,  5,  5,                               },
189     { 10, 10,  7,  5,                           }, /* 8000 */
190     { 10, 10,  7,  5,  5,  5,  5,  5,  5,       }, 
191     { 12, 10, 10,  5,  5,  5,  5,  5,  5,       }, /* 16000 */
192   }},
193
194   /* adjust for mode eight */
195   {{
196     {  0,                                       }, /*63*/
197     {  0,                                       }, 
198     {  0,                                       }, /* 125 */
199     {  0,                                       }, 
200     {  0,                                       }, /* 250 */
201     {  0,                                       }, 
202     {  0,                                       }, /* 500 */
203     {  0,                                       }, 
204     {  0,                                       }, /* 1000 */
205     {  0,                                       }, 
206
207     {  0,                                       }, /* 2000 */
208     {  0,                                       },
209     {  0,                                       }, /* 4000 */
210     {  0,                                       },
211     {  0,                                       }, /* 8000 */
212     {  0,                                       }, 
213     {  5,  5,  5,  5,  5,  5,  5,               }, /* 16000 */
214   }},
215
216   /* adjust for mode ten */
217   {{
218     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*63*/
219     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
220     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*125*/
221     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
222     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*250*/
223     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15},
224     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*500*/
225     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
226     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*1000*/
227     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
228     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*2000*/
229     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
230     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*4000*/
231     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
232     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*8000*/
233     {  0,  0,  0, -5,-10,-10,-10,-15,-15,-15,-15}, 
234     {  0,  0,  0,  0,  0, -5, -5,-10,-15,-15,-15}, /*16000*/
235   }},
236 };
237
238 static vp_adjblock _vp_tonemask_adj_otherblock[6]={
239   /* adjust for mode zero */
240   {{
241     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, /*63*/
242     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, 
243     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, /*125*/
244     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, 
245     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, /*250*/
246     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, 
247     {  5,  5,  5,  0, -5, -5, -5, -5, -5, -5, -5}, /*500*/
248     {  5,  5,  5,  0, -5, -5, -5, -5, -5, -5, -5},
249
250     {  5,  5,  5,                               }, /*1000*/
251     {  5,  5,  5,                               }, 
252
253     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, /*2000*/
254     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, 
255     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, /*4000*/
256     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, 
257     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, /*8000*/
258     { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, 
259     { 16, 16, 14, 12, 12, 15, 15, 15, 15, 15, 10}, /*16000*/
260   }},
261
262   /* adjust for mode two */
263   {{
264     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, /*63*/
265     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, 
266     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, /*125*/
267     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, 
268     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, /*250*/
269     {  0,  0,  0,  0,-10,-10,-10,-10,-10,-10,-10}, 
270     {  5,  5,  5,  0, -5, -5, -5, -5, -5, -5, -5}, /*500*/
271     {  5,  5,  5,  0, -5, -5, -5, -5, -5, -5, -5},
272
273     { 10, 10,  5,                               }, /* 1000 */
274     { 10, 10,  5,                               }, 
275
276     {  0,                                       }, /* 2000 */
277     {  0,                                       },
278     {  0,                                       }, /* 4000 */
279     { 10,  5,  5,                               },
280     { 10, 10,  7,  5,                           }, /* 8000 */
281     { 10, 10,  7,  7,  5,  5, 10, 10, 10,  5,   }, 
282     { 16, 16, 14,  8,  8,  8, 10, 10, 10,  5,   }, /* 16000 */
283   }},
284
285   /* adjust for mode four */
286   {{
287     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*63*/
288     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
289     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*125*/
290     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
291     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*250*/
292     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
293     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*500*/
294     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
295
296     {  5,  5,  5,                               }, /* 1000 */
297     {  5,  5,  5,                               }, 
298
299     {  0,                                       }, /* 2000 */
300     {  0,                                       },
301     {  0,                                       }, /* 4000 */
302     { 10,  5,  5,                               },
303     { 10, 10,  7,  5,                           }, /* 8000 */
304     { 10, 10,  7,  5,  5,  5, 10, 10, 10,  5,   }, 
305     { 16, 16, 14,  8,  8,  8, 10, 10, 10,  5,   }, /* 16000 */
306   }},
307
308   /* adjust for mode six */
309   {{
310     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*63*/
311     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
312     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*125*/
313     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
314     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*250*/
315     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
316     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*500*/
317     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
318
319     {  5,  5,  5,                               }, /* 1000 */
320     {  5,  5,  5,                               }, 
321
322     {  0,                                       }, /* 2000 */
323     {  0,                                       },
324     {  0,                                       }, /* 4000 */
325     { 10,  5,  5,                               },
326     { 10, 10,  7,  5,                           }, /* 8000 */
327     { 10, 10,  7,  5,  5,  5,  5,  5,  5,       }, 
328     { 12, 10, 10,  5,  5,  5,  5,  5,  5,       }, /* 16000 */
329   }},
330
331   /* adjust for mode eight */
332   {{
333     {-10,-10,-10,-15,-15,-15,-15,-20,-20,-20,-20}, /*63*/
334     {-10,-10,-10,-15,-15,-15,-15,-20,-20,-20,-20}, 
335     {-10,-10,-10,-15,-15,-15,-15,-20,-20,-20,-20}, /*125*/
336     {-10,-10,-10,-15,-15,-15,-15,-20,-20,-20,-20}, 
337     {-10,-10,-10,-15,-15,-15,-15,-20,-20,-20,-20}, /*250*/
338     {-10,-10,-10,-15,-15,-15,-15,-20,-20,-20,-20}, 
339     {-10,-10,-10,-15,-15,-15,-15,-20,-20,-20,-20}, /*500*/
340     {-10,-10,-10,-15,-15,-15,-15,-20,-20,-20,-20}, 
341
342     {  0,-10,-10,-15,-15,-15,-15,-15,-15,-15,-15}, 
343     {  0,-10,-10,-15,-15,-15,-15,-15,-15,-15,-15}, 
344
345     {  0,                                       }, /* 2000 */
346     {  0,                                       },
347     {  0,                                       }, /* 4000 */
348     {  0,                                       },
349     {  0,                                       }, /* 8000 */
350     {  0,                                       }, 
351     {  5,  5,  5,  5,  5,  5,  5,               }, /* 16000 */
352   }},
353
354   /* adjust for mode ten */
355   {{
356     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, /*63*/
357     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, 
358     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, /*125*/
359     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, 
360     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, /*250*/
361     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20},
362     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, /*500*/
363     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, 
364     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, /*1000*/
365     {  0,  0,  0, -5,-15,-20,-20,-20,-20,-20,-20}, 
366     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*2000*/
367     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
368     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*4000*/
369     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, 
370     {  0,  0,  0, -5,-15,-15,-15,-15,-15,-15,-15}, /*8000*/
371     {  0,  0,  0, -5,-10,-10,-10,-15,-15,-15,-15}, 
372     {  0,  0,  0,  0,  0, -5, -5,-10,-15,-15,-15}, /*16000*/
373   }},
374 };
375
376 static vp_adjblock _vp_peakguard[6]={
377   /* zero */
378   {{
379     {-14,-16,-18,-19,-24,-24,-24,-24,-24,-24,-24},/*63*/
380     {-14,-16,-18,-19,-24,-24,-24,-24,-24,-24,-24},
381     {-14,-16,-18,-19,-24,-24,-24,-24,-24,-24,-24},/*125*/
382     {-14,-16,-18,-19,-24,-24,-24,-24,-24,-24,-24},
383     {-14,-16,-18,-19,-24,-24,-24,-24,-24,-24,-24},/*250*/
384     {-14,-16,-18,-19,-24,-24,-24,-24,-24,-24,-24},
385     {-10,-10,-10,-10,-16,-16,-18,-20,-22,-24,-24},/*500*/
386     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-24,-24},
387     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-24,-24},/*1000*/
388     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-24,-24},
389     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-24,-24},/*2000*/
390     {-10,-10,-10,-12,-16,-16,-16,-20,-22,-24,-24},
391     {-10,-10,-10,-12,-16,-16,-16,-20,-22,-24,-24},/*4000*/
392     {-10,-10,-10,-12,-12,-14,-16,-18,-22,-24,-24},
393     {-10,-10,-10,-10,-10,-14,-16,-18,-22,-24,-24},/*8000*/
394     {-10,-10,-10,-10,-10,-14,-16,-18,-22,-24,-24},
395     {-10,-10,-10,-10,-10,-12,-16,-18,-22,-24,-24},/*16000*/
396   }},
397   /* two */
398   {{
399     {-14,-20,-20,-20,-26,-30,-30,-30,-30,-30,-30},/*63*/
400     {-14,-20,-20,-20,-26,-30,-30,-30,-30,-30,-30},
401     {-14,-20,-20,-20,-26,-30,-30,-30,-30,-30,-30},/*125*/
402     {-14,-20,-20,-20,-26,-30,-30,-30,-30,-30,-30},
403     {-14,-20,-20,-20,-26,-30,-30,-30,-30,-30,-30},/*250*/
404     {-14,-20,-20,-20,-26,-30,-30,-30,-30,-30,-30},
405     {-14,-20,-20,-20,-26,-30,-30,-30,-30,-30,-30},/*500*/
406     {-10,-10,-10,-10,-14,-14,-14,-20,-26,-30,-30},
407     {-10,-10,-10,-10,-14,-14,-14,-20,-22,-30,-30},/*1000*/
408     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-30,-30},
409     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-30,-30},/*2000*/
410     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-30,-30},
411     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-30,-30},/*4000*/
412     {-10,-10,-10,-10,-10,-11,-12,-13,-22,-30,-30},
413     {-10,-10,-10,-10,-10,-11,-12,-13,-22,-30,-30},/*8000*/
414     {-10,-10,-10,-10,-10,-10,-10,-11,-22,-30,-30},
415     {-10,-10,-10,-10,-10,-10,-10,-10,-20,-30,-30},/*16000*/
416   }},
417   /* four */
418   {{
419     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},/*63*/
420     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},
421     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},/*125*/
422     {-14,-20,-20,-20,-20,-20,-20,-30,-32,-32,-40},
423     {-14,-20,-20,-20,-20,-20,-20,-30,-32,-32,-40},/*250*/
424     {-14,-20,-20,-20,-20,-20,-20,-24,-32,-32,-40},
425     {-14,-20,-20,-20,-20,-20,-20,-24,-32,-32,-40},/*500*/
426     {-10,-10,-10,-10,-14,-16,-20,-24,-26,-32,-40},
427     {-10,-10,-10,-10,-14,-16,-20,-24,-22,-32,-40},/*1000*/
428     {-10,-10,-10,-10,-14,-16,-20,-24,-22,-32,-40},
429     {-10,-10,-10,-10,-14,-16,-20,-24,-22,-32,-40},/*2000*/
430     {-10,-10,-10,-10,-14,-16,-20,-24,-22,-32,-40},
431     {-10,-10,-10,-10,-14,-14,-16,-20,-22,-32,-40},/*4000*/
432     {-10,-10,-10,-10,-10,-11,-12,-13,-22,-32,-40},
433     {-10,-10,-10,-10,-10,-11,-12,-13,-22,-32,-40},/*8000*/
434     {-10,-10,-10,-10,-10,-10,-10,-11,-22,-32,-40},
435     {-10,-10,-10,-10,-10,-10,-10,-10,-20,-32,-40},/*16000*/
436   }},
437   /* six */
438   {{
439     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},/*63*/
440     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},
441     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},/*125*/
442     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},
443     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},/*250*/
444     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},
445     {-14,-20,-20,-20,-26,-32,-32,-32,-32,-32,-40},/*500*/
446     {-14,-14,-14,-16,-20,-22,-24,-24,-28,-32,-40},
447     {-14,-14,-14,-16,-20,-22,-24,-24,-28,-32,-40},/*1000*/
448     {-14,-14,-14,-16,-20,-22,-24,-24,-28,-32,-40},
449     {-14,-14,-16,-20,-24,-26,-26,-28,-30,-32,-40},/*2000*/
450     {-14,-14,-16,-20,-24,-26,-26,-28,-30,-32,-40},
451     {-14,-14,-16,-20,-24,-26,-26,-28,-30,-32,-40},/*4000*/
452     {-14,-14,-14,-20,-22,-22,-24,-24,-26,-32,-40},
453     {-14,-14,-14,-18,-20,-20,-24,-24,-24,-32,-40},/*8000*/
454     {-14,-14,-14,-18,-20,-20,-24,-24,-24,-32,-40},
455     {-14,-14,-14,-18,-20,-20,-22,-24,-24,-32,-40},/*16000*/
456   }},
457   /* eight */
458   {{
459     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*63*/
460     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*88*/
461     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*125*/
462     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*170*/
463     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*250*/
464     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*350*/
465     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*500*/
466     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*700*/
467     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*1000*/
468     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*1400*/
469     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*2000*/
470     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*2800*/
471     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*4000*/
472     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*5600*/
473     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*8000*/
474     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*11500*/
475     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-40,-40},/*16600*/
476   }},
477   /* ten */
478   {{
479     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*63*/
480     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*88*/
481     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*125*/
482     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*170*/
483     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*250*/
484     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*350*/
485     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*500*/
486     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*700*/
487     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*1000*/
488     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*1400*/
489     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*2000*/
490     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*2800*/
491     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*4000*/
492     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*5600*/
493     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*8000*/
494     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*11500*/
495     {-14,-20,-24,-26,-32,-34,-36,-38,-40,-44,-46},/*16600*/
496   }}
497 };
498
499 static int _psy_noisebias_long[11][17]={
500   /*63     125     250     500      1k       2k      4k      8k     16k*/
501   {-20,-20,-18,-18,-18,-16,-14, -8, -6, -2,  0,  2,  3,  3,  4,  4, 10},
502   {-20,-20,-20,-20,-20,-20,-20,-10, -6, -2, -2, -2,  1,  1,  2,  2,  4},
503   {-20,-20,-20,-20,-20,-20,-20,-10, -6, -2, -3, -3, -1, -1,  0,  1,  2},
504   {-20,-20,-20,-20,-20,-20,-20,-10, -6, -2, -3, -3, -1, -1,  0,  1,  2},
505   {-20,-20,-20,-20,-20,-20,-20,-10, -6, -3, -4, -4, -2, -1,  0,  0,  2},
506
507   {-20,-20,-20,-20,-20,-20,-20,-18,-10, -4, -6, -6, -3, -2, -2, -2,  0},
508   {-24,-24,-24,-24,-24,-24,-24,-18,-14, -8, -8, -8, -7, -7, -6, -6, -4},
509   {-24,-24,-24,-24,-24,-24,-24,-18,-14,-14,-16,-16,-14,-12,-10,-10, -8},
510
511   {-24,-24,-24,-24,-24,-24,-24,-20,-20,-20,-20,-20,-16,-16,-14,-14,-10},
512   {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-24,-24,-24,-24},
513   {-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-46},
514 };
515
516 static int _psy_noisebias_impulse[11][17]={
517   /*63     125     250     500      1k       2k      4k      8k     16k*/
518   {-20,-20,-20,-20,-20,-18,-14,-10,-10, -2,  2,  2,  2,  2,  2,  3,  6},
519   {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -4, -4, -2, -2, -2, -2,  2},
520   {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2,  0},
521   {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2, -2},
522   {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2},
523
524   {-30,-30,-30,-30,-30,-30,-24,-20,-10,-12,-14,-14,-10, -9, -8, -6, -4},
525   {-34,-34,-34,-34,-30,-30,-24,-20,-14,-14,-16,-16,-14,-12,-10,-10, -8},
526   {-34,-34,-34,-34,-30,-30,-30,-24,-20,-20,-20,-20,-20,-18,-16,-16,-14},
527
528   {-34,-34,-34,-34,-30,-30,-30,-30,-30,-26,-26,-26,-26,-22,-20,-20,-16},
529   {-40,-40,-40,-40,-40,-40,-40,-40,-40,-36,-36,-36,-36,-36,-36,-30,-30},
530   {-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50},
531 };
532
533 static int _psy_noisebias_other[11][17]={
534   /*63     125     250     500      1k       2k      4k      8k     16k*/
535   {-20,-20,-20,-20,-20,-18,-14,-10, -6, -2,  2,  2,  3,  3,  4,  4, 10},
536   {-26,-26,-26,-26,-26,-22,-20,-14,-10, -2, -2, -2,  1,  1,  2,  2,  4},
537   {-30,-30,-30,-30,-26,-22,-20,-14,-10, -2, -3, -3, -1, -1,  0,  1,  2},
538   {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -1, -1,  0,  1,  2},
539   {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -4, -4, -2, -1,  0,  0,  2},
540
541   {-30,-30,-30,-30,-30,-30,-24,-20,-10, -4, -6, -6, -3, -2, -2, -2,  0},
542   {-34,-34,-34,-34,-30,-30,-24,-20,-14, -8, -8, -8, -7, -7, -6, -6, -4},
543   {-34,-34,-34,-34,-30,-30,-24,-20,-14,-14,-16,-16,-14,-12,-10,-10, -8},
544
545   {-34,-34,-34,-34,-30,-30,-30,-20,-20,-20,-20,-20,-16,-16,-14,-14,-10},
546   {-40,-40,-40,-40,-40,-40,-40,-30,-30,-30,-30,-30,-30,-24,-24,-24,-24},
547   {-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-46},
548 };
549
550 static int _psy_noiseguards_short[33]={
551   2,2,-1,
552   4,4,-1,
553   4,4,15,
554   4,4,15,
555   4,4,15,
556   4,4,15,
557   4,4,15,
558   4,4,15,
559   4,4,15,
560   4,4,15,
561   4,4,15,
562 };
563 static int _psy_noiseguards_long[33]={
564   10,10,100,
565   10,10,100,
566   10,10,100,
567   10,10,100,
568   10,10,100,
569   10,10,100,
570   10,10,100,
571   10,10,100,
572   10,10,100,
573   10,10,100,
574   10,10,100,
575 };
576
577 static double _psy_tone_masteratt[11]={
578   3.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
579 };
580
581 static double _psy_tone_masterguard[11]={
582   -18.,-24.,-24.,-24.,-26.,-40.,-40.,-40.,-45.,-45.,-45.,
583 };
584
585 static double _psy_tone_suppress[11]={
586   -10.,-20.,-20.,-20.,-30.,-30.,-40.,-40.,-45.,-45.,-45.,
587 };
588
589 static double _psy_tone_0dB[11]={
590   95.,95.,95.,95.,95.,105.,105.,105.,105.,105.,105.,
591 };
592
593 static double _psy_noise_suppress[11]={
594    -0.,-24.,-24.,-24.,-24.,-30.,-40.,-40.,-45.,-45.,-45.,
595 };
596
597 static int _psy_ehmer_bandlimit[11]={
598   0,0,0,0,4,4,30,30,30,30,30,
599 };
600
601 static vorbis_info_psy _psy_info_template={
602     {-1},-110.,-140.,
603     /* tonemask att,guard,suppr,curves  peakattp,curvelimitp,peaksettings*/
604     0.f,            -40.f,-40.f, {{{0.}}},         1,          0,        {{{0.}}},
605     
606     /*noisemaskp,supp, low/high window, low/hi guard, minimum */
607     1,          -0.f,         .5f, .5f,         0,0,0,
608     {-1},{-1},105.f,{{-1,-1,{{-1,-1,-1,-1}}}}
609 };
610
611 /* ath ****************/
612
613 static double _psy_ath_floater[11]={
614   -100.,-100.,-100.,-100.,-100.,-100.,-105.,-105.,-105.,-110.,-120.,
615 };
616
617 static double _psy_ath_abs[11]={
618   -110.,-110.,-120.,-140.,-140.,-140.,-140.,-140.,-140.,-140.,-150.,
619 };
620
621 static float ATH_Bark_dB[][27]={
622   {
623      0.f,  15.f,  15.f,   15.f,   11.f,       10.f,   8.f,  7.f,   7.f,  7.f,
624      6.f,   2.f,   0.f,    0.f,   -2.f,       -5.f,  -6.f, -6.f,  -4.f,  4.f,
625     14.f,  20.f,  19.f,   17.f,   30.f,       60.f,  70.f,
626   },
627   {
628     0.f,  15.f,  15.f,   15.f,   11.f,       10.f,   8.f,  7.f,   7.f,  7.f,
629     6.f,   2.f,   0.f,    0.f,   -2.f,       -5.f,  -6.f, -6.f,  -4.f,  0.f,
630     2.f,   6.f,   5.f,    5.f,   15.f,       30.f,  50.f,
631   },
632   {
633     0.f,  15.f,  15.f,   15.f,   11.f,       10.f,   8.f,  7.f,   7.f,  7.f,
634     6.f,   2.f,   0.f,    0.f,   -3.f,       -5.f,  -6.f, -6.f, -4.5f, -4.f,
635     2.f,   6.f,   5.f,    5.f,   15.f,       20.f,  40.f,
636   }
637 };
638
639 /* stereo ****************/
640 static int _psy_stereo_point_dB_44[11]={3,  3,  2,  2,   1,  0,  0,  0,  0,  0,  0};
641 static double _psy_stereo_point_kHz_44[2][11]={
642   {4., 6., 6., 6., 10., 6., 6., 4., 4., 4., 4.},
643   {6., 6., 6., 10., 10., 6., 6., 4., 4., 4., 4.}
644 };
645
646 /* lowpass **************/
647 static double _psy_lowpass_44[11]={
648   15.1,15.8,16.5,17.9,20.5,48.,999.,999.,999.,999.,999.
649 };
650
651 /* management noise offset */
652
653 static double _bm_max_noise_offset[11]={
654   1.,2.,3.,3.,4.,4.,4.,4.,4.,4.,4.
655 };