Initial branch merge toward rc3
[platform/upstream/libvorbis.git] / lib / masking.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: masking curve data for psychoacoustics
14  last mod: $Id: masking.h,v 1.19 2001/12/12 09:45:25 xiphmont Exp $
15
16  ********************************************************************/
17
18 #ifndef _V_MASKING_H_
19 #define _V_MASKING_H_
20
21 static float ATH_Bark_dB_lspconservative[]={  
22    15,   15,   15,    15,    11,    10,     8,    7,    7,    7,
23     6,    2,    0,     0,    -3,    -5,    -6,   -6, -4.5f, 2.5f,
24    10,   15,   15,    15,    15,    15,   15};
25
26 /* The below masking curves are straight from the R. Ehmer
27    (J. Acoustical Society of America) papers ca 1958-59.  I modified
28    them slightly as Ehmer does not correct for the Absolute Threshold
29    of Hearing, and the low dB portions of the curves are thus highly
30    suspect. */
31
32 /* Let's all do the Trek thing and just call them 'Ehmer curves' ;-)
33    Note these are octaves, not Bark scale. */
34
35 #define EHMER_OFFSET 16
36 #define EHMER_MAX 56
37
38 static float tone_125_40dB_SL[EHMER_MAX]={
39   20,  20,  20,  20,  20,  20,  20,  20,   20, 20, 20, 20, 20, 20, 20, 20,  
40   20,  18,  16,  14,  12,  11,   9,   7,    5,  3,  2,  0, -2, -4, -6, -8,
41  -10, -12, -14, -16, -18, -20, -900, -900,  -900,-900,-900,-900,-900,-900,-900,-900,  
42 -900,-900,-900,-900,-900,-900,-900,-900};
43 static float tone_125_60dB_SL[EHMER_MAX]={
44   40,  40,  40,  40,  40,  40,  40,  40,   40, 40, 40, 40, 40, 40, 40, 40,  
45   40,  38,  36,  34,  32,  31,  29,  27,   25, 23, 22, 20, 18, 16, 14, 12,
46   10,   8,   6,   4,   2,   0,  -3,  -5,   -8,-10,-14,-17,-20,-900,-900,-900,  
47 -900,-900,-900,-900,-900,-900,-900,-900};
48 static float tone_125_80dB_SL[EHMER_MAX]={
49   60,  60,  60,  60,  60,  60,  60,  60,   60, 60, 60, 60, 60, 60, 60, 60,  
50   60,  58,  56,  54,  52,  51,  49,  47,   45, 43, 42, 40, 38, 36, 34, 32,
51   30,  28,  26,  24,  22,  20,  17,  15,   12, 10,  6,  3,  0, -4, -8,-12,  
52 -900,-900,-900,-900,-900,-900,-900,-900};
53 static float tone_125_100dB_SL[EHMER_MAX]={
54   78,  78,  78,  78,  78,  78,  78,  78,   78, 78, 78, 78, 78, 78, 78, 78,  
55   78,  77,  75,  74,  73,  72,  71,  70,   69, 68, 67, 65, 64, 63, 62, 60,
56   58,  57,  55,  54,  52,  50,  48,  46,   44, 42, 40, 38, 36, 34, 31, 29,  
57   27,  24,  22,  20,  18,  15,  13,  11};
58
59 static float tone_250_40dB_SL[EHMER_MAX]={
60 -900,-900,-900,-900,-900,-900,-900,-900,   -19, -13,  -7,  -1,   4,   9,  15,  20,
61   22,  23,  22,  19,  18,  18,  16,  13,     9,   7,   3,   1,  -1,  -3,  -6,  -8,
62  -10, -13, -16, -19,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
63 -900,-900,-900,-900,-900,-900,-900,-900};
64 static float tone_250_60dB_SL[EHMER_MAX]={
65 -900,-900,-900,-900,-900,-900,-900, -10,   -5,  1,  7, 13, 19, 25, 30, 33,  
66   36,  39,  38,  37,  38,  39,  39,  40,   38, 36, 35, 34, 33, 31, 29, 28,
67   28,  28,  25,  20,  14,  10,   5,   0,   -5,-10,-15,-20,-900,-900,-900,-900,  
68 -900,-900,-900,-900,-900,-900,-900,-900};
69 static float tone_250_80dB_SL[EHMER_MAX]={
70 -900,-900,-900,-900,-900,-900,-900, -10,   10, 17, 24, 30, 37, 41, 48, 49,  
71   50,  53,  54,  53,  53,  54,  55,  57,   57, 57, 58, 59, 60, 58, 57, 58,
72   59,  58,  57,  54,  52,  50,  49,  47,   46, 47, 46, 44, 43, 42, 41, 40,  
73   38,  32,  27,  22,  17,  11,   6,   0};
74 /* no data, just interpolated from 80 */
75 static float tone_250_100dB_SL[EHMER_MAX]={
76 -900,-900,-900,-900,-900,-900,-900, -10,   15, 25, 34, 40, 50, 56, 60, 70,  
77   70,  73,  74,  73,  73,  74,  75,  77,   77, 77, 78, 79, 80, 78, 77, 78,
78   79,  78,  77,  74,  72,  70,  69,  67,   66, 67, 66, 64, 63, 62, 61, 60,  
79   58,  52,  47,  42,  37,  31,  26,  20};
80
81 static float tone_500_40dB_SL[EHMER_MAX]={
82 -900,-900,-900,-900,-900,-900,-900,-900,  -900, -20, -14,  -8,  -2,   4,  10,  17,
83   23,  16,  12,   9,   6,   3,   0,  -3,    -7, -10, -13, -16, -20,-900,-900,-900,
84 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
85 -900,-900,-900,-900,-900,-900,-900,-900};
86 static float tone_500_60dB_SL[EHMER_MAX]={
87 -900,-900,-900,-900,-900,-900,-900,-900,   -18, -12,  -6,   0,   6,  13,  20,  30,
88   39,  34,  31,  29,  29,  27,  24,  21,    18,  16,  13,   8,   6,   3,   1,  -1,
89   -5,  -2,  -5,  -8, -12, -15, -18,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
90 -900,-900,-900,-900,-900,-900,-900,-900};
91 static float tone_500_80dB_SL[EHMER_MAX]={
92 -900,-900,-900,-900,-900,-900,-900,-900, -900,-16,-10,  0, 10, 20, 32, 43,  
93   53,  52,  52,  50,  49,  50,  52,  55,   55, 54, 51, 49, 46, 44, 44, 42,
94   38,  34,  32,  29,  29,  28,  25,  23,   20, 16, 10,  7,  4,  2, -1, -4,  
95   -7, -10, -15, -20,-900,-900,-900,-900};
96 static float tone_500_100dB_SL[EHMER_MAX]={
97 -900,-900,-900,-900,-900,-900,-900, -10,   -7,  2, 10, 19, 27, 35, 55, 56,  
98   62,  61,  60,  58,  57,  57,  59,  63,   65, 66, 62, 60, 57, 57, 58, 58,
99   57,  56,  56,  56,  57,  57,  56,  57,   57, 54, 47, 41, 37, 28, 21, 16,  
100   10,   3,  -3,  -8, -13, -18,-900,-900};
101
102 static float tone_1000_40dB_SL[EHMER_MAX]={
103 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900, -20, -10,  0,   9,  20,
104   27,  20,  13,  14,  13,   5,  -1,  -6,   -11, -20,-900,-900,-900,-900,-900,-900,
105 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
106 -900,-900,-900,-900,-900,-900,-900,-900};
107 static float tone_1000_60dB_SL[EHMER_MAX]={
108 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-13,-3,  7,  17,  25,  37,
109   42,  33,  25,  25,  23,  18,  13,   9,     4, -1, -7,-13,-18, -23, -28, -33,
110 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
111 -900,-900,-900,-900,-900,-900,-900,-900};
112 static float tone_1000_80dB_SL[EHMER_MAX]={
113 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-14, -4,  6, 16, 27, 33, 50,  
114   59,  57,  47,  41,  40,  43,  47,  48,    47, 42, 39, 37, 37, 36, 35, 32,
115   30,  27,  21,  15,   5,  -2, -10, -18,  -900,-900,-900,-900,-900,-900,-900,-900,
116 -900,-900,-900,-900,-900,-900,-900,-900};
117 static float tone_1000_100dB_SL[EHMER_MAX]={
118 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-10,  0, 10, 23, 33, 45, 60,  
119   70,  72,  55,  49,  43,  40,  44,  54,    59, 58, 49, 43, 52, 57, 57, 58,
120   58,  54,  49,  47,  42,  39,  33,  28,    20, 15,  5,  0, -5,-15,-900,-900,  
121 -900,-900,-900,-900,-900,-900,-900,-900};
122
123 static float tone_2000_40dB_SL[EHMER_MAX]={
124 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,   5,  12,  20,
125   24,  14,   8,   0,  -5,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
126 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
127 -900,-900,-900,-900,-900,-900,-900,-900};
128 static float tone_2000_60dB_SL[EHMER_MAX]={
129 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,  -2,   8,  19,  31,
130   38,  30,  15,  15,  15,  13,   8,   5,    -2,-900,-900,-900,-900,-900,-900,-900,
131 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
132 -900,-900,-900,-900,-900,-900,-900,-900};
133 static float tone_2000_80dB_SL[EHMER_MAX]={
134 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,   2,  10,  22,  38,
135   52,  51,  40,  30,  28,  30,  33,  37,    37,  35,  31,  26,  20,  15,  10,   5,
136    0,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
137 -900,-900,-900,-900,-900,-900,-900,-900};
138 static float tone_2000_100dB_SL[EHMER_MAX]={  
139 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,   6,  20,  40,  55,
140   66,  60,  53,  40,  35,  31,  34,  42,    58,  48,  43,  45,  52,  57,  50,  42,
141   45,  45,  35,  25,  20,  11,   2,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
142 -900,-900,-900,-900,-900,-900,-900,-900};
143
144 static float tone_4000_40dB_SL[EHMER_MAX]={
145 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,   2,   4,  18,
146   24,  10,   5,   0,  -5,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
147 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
148 -900,-900,-900,-900,-900,-900,-900,-900};
149
150 static float tone_4000_60dB_SL[EHMER_MAX]={
151 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,  -2,   2,   4,  20,
152   38,  30,  22,  15,  10,   5,   0, -10,  -900,-900,-900,-900,-900,-900,-900,-900,
153 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
154 -900,-900,-900,-900,-900,-900,-900,-900};
155
156 static float tone_4000_80dB_SL[EHMER_MAX]={
157 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,   0,   4,  10,  35,
158   51,  49,  35,  35,  36,  36,  36,  31,    25,  20,  10,   0,-900,-900,-900,-900,
159 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
160 -900,-900,-900,-900,-900,-900,-900,-900};
161
162 static float tone_4000_100dB_SL[EHMER_MAX]={
163 -900,  -5,   1,   3,   5,   8,  10,  12,    14,  20,  26,  28,  32,  36,  41,  51,
164   61,  59,  45,  45,  48,  48,  40,  25,    40,  30,  18,   5,  0, -900,-900,-900,
165 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
166 -900,-900,-900,-900,-900,-900,-900,-900};
167
168
169 static float tone_8000_40dB_SL[EHMER_MAX]={
170 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900, -10,   3,  10,  18,
171   26,  21,  14,   5,   0,  0,   5,   10,    20,  35,  55,  45,  70,  70,  70,  70,
172   70,  70,  70,  70,  70, 70,  70,   70,  -900,-900,-900,-900,-900,-900,-900,-900,
173 -900,-900,-900,-900,-900,-900,-900,-900};
174 static float tone_8000_60dB_SL[EHMER_MAX]={
175 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900, -10,  5,   12,  30,
176   43,  40,  36,  35,  36,  38,  41,  43,    45,  60,  70,  70,  70,  70,  70,  70,
177   70,  70,  70,  70,  70,  70,  70,  70,  -900,-900,-900,-900,-900,-900,-900,-900,
178   -900,-900,-900,-900,-900,-900,-900,-900};
179 static float tone_8000_80dB_SL[EHMER_MAX]={
180 -900,-900,-900,-900,-900,-900,-900, -10,    -1,   2,   6,  10,  13,  19,  25,  35,
181   63,  59,  57,  56,  57,  59,  61,  62,    63,  65,  70,  70,  70,  70,  70,  70,
182   70,  70,  70,  70,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
183  -900,-900,-900,-900,-900,-900,-900,-900};
184 static float tone_8000_100dB_SL[EHMER_MAX]={
185  -18, -12,  -7,  -3,   0,   2,   5,   8,    10,  14,  18,  20,  20,  22,  40,  40,
186   70,  50,  30,  30,  30,  30,  30,  30,    30,  40,  70,  70,  70,  70,  70,  70,
187   70,  70,  70,  70,  70,  70,  70,  70,  -900,-900,-900,-900,-900,-900,-900,-900,
188   -900,-900,-900,-900,-900,-900,-900,-900};
189
190 #if 0 /* not used for the time being */
191 static float noise_500_60dB_SL[EHMER_MAX]={
192 -900,-900,-900,-900,-900, -20, -11,  -2,     7,  16,  25,  34,  43,  52,  61,  66,
193   69,  68,  58,  50,  44,  38,  32,  28,    25,  24,  20,  18,  17,  12,  10,   8,
194    5,   0,  -5,  -8, -12, -15, -18, -22,  -900,-900,-900,-900,-900,-900,-900,-900,
195 -900,-900,-900,-900,-900,-900,-900,-900};
196
197 static float noise_500_80dB_SL[EHMER_MAX]={
198 -900,-900,-900, -20, -10,  -1,   8,  17,    26,  35,  44,  53,  62,  70,  79,  83,
199   85,  85,  81,  77,  74,  71,  68,  63,    61,  59,  56,  55,  54,  52,  48,  47,
200   45,  46,  45,  43,  40,  37,  33,  32,    35,  32,  30,  29,  20,  10,   0, -10,
201  -20, -30,-900,-900,-900,-900,-900,-900};
202
203 static float noise_1000_60dB_SL[EHMER_MAX]={
204 -900,-900,-900,-900, -24, -15,  -6,   3,    12,  21,  28,  34,  40,  48,  57,  60,
205   61,  56,  54,  45,  36,  27,  21,  19,    17,  13,  10,   0, -10, -20, -20,-900,
206 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
207 -900,-900,-900,-900,-900,-900,-900,-900};
208
209 static float noise_1000_80dB_SL[EHMER_MAX]={
210 -900, -26, -17,  -8,   1,  10,  19,  28,    37,  41,  46,  51,  58,  68,  74,  81,
211   80,  81,  70,  66,  58,  61,  59,  55,    54,  53,  52,  49,  48,  42,  38,  38,
212   39,  34,  30,  27,  20,  10,   0, -10,   -20, -30,-900,-900,-900,-900,-900,-900,
213 -900,-900,-900,-900,-900,-900,-900,-900};
214
215 static float noise_2000_60dB_SL[EHMER_MAX]={
216 -900,-900,-900, -34, -25, -16,  -7,   2,    11,  18,  23,  30,  35,  42,  51,  58,
217   58,  57,  50,  40,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
218 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
219 -900,-900,-900,-900,-900,-900,-900,-900};
220
221 static float noise_2000_80dB_SL[EHMER_MAX]={
222 -900, -26, -17,  -8,   1,  10,  19,  28,    33,  38,  43,  48,  53,  62,  70,  77,
223   77,  75,  70,  67,  68,  66,  62,  61,    60,  59,  52,  47,  39,  35,  34,  35,
224   35,  33,  30,  27,  20,  10,   0, -10,   -20, -30,-900,-900,-900,-900,-900,-900,
225 -900,-900,-900,-900,-900,-900,-900,-900};
226
227 static float noise_4000_60dB_SL[EHMER_MAX]={
228 -900,-900,-900, -34, -25, -16,  -7,   2,    11,  20,  25,  31,  37,  45,  56,  62,
229   64,  61,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
230 -900,-900,-900,-900,-900,-900,-900,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
231 -900,-900,-900,-900,-900,-900,-900,-900};
232
233 static float noise_4000_80dB_SL[EHMER_MAX]={
234 -900, -26, -17,  -8,   1,  10,  19,  26,    33,  39,  45,  50,  55,  65,  75,  82,
235   84,  81,  78,  72,  70,  69,  66,  61,    50,  48,  46,  40,  35,  30,  25,  20,
236   15,  10,   5,   0, -10, -20, -30,-900,  -900,-900,-900,-900,-900,-900,-900,-900,
237 -900,-900,-900,-900,-900,-900,-900,-900};
238
239 #endif
240 #endif
241
242