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