wma.c
Go to the documentation of this file.
1 /*
2  * WMA compatible codec
3  * Copyright (c) 2002-2007 The FFmpeg Project
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include "avcodec.h"
23 #include "sinewin.h"
24 #include "wma.h"
25 #include "wma_common.h"
26 #include "wmadata.h"
27 
28 #undef NDEBUG
29 #include <assert.h>
30 
31 /* XXX: use same run/length optimization as mpeg decoders */
32 //FIXME maybe split decode / encode or pass flag
33 static void init_coef_vlc(VLC *vlc, uint16_t **prun_table,
34  float **plevel_table, uint16_t **pint_table,
35  const CoefVLCTable *vlc_table)
36 {
37  int n = vlc_table->n;
38  const uint8_t *table_bits = vlc_table->huffbits;
39  const uint32_t *table_codes = vlc_table->huffcodes;
40  const uint16_t *levels_table = vlc_table->levels;
41  uint16_t *run_table, *level_table, *int_table;
42  float *flevel_table;
43  int i, l, j, k, level;
44 
45  init_vlc(vlc, VLCBITS, n, table_bits, 1, 1, table_codes, 4, 4, 0);
46 
47  run_table = av_malloc(n * sizeof(uint16_t));
48  level_table = av_malloc(n * sizeof(uint16_t));
49  flevel_table= av_malloc(n * sizeof(*flevel_table));
50  int_table = av_malloc(n * sizeof(uint16_t));
51  i = 2;
52  level = 1;
53  k = 0;
54  while (i < n) {
55  int_table[k] = i;
56  l = levels_table[k++];
57  for (j = 0; j < l; j++) {
58  run_table[i] = j;
59  level_table[i] = level;
60  flevel_table[i]= level;
61  i++;
62  }
63  level++;
64  }
65  *prun_table = run_table;
66  *plevel_table = flevel_table;
67  *pint_table = int_table;
68  av_free(level_table);
69 }
70 
71 int ff_wma_init(AVCodecContext *avctx, int flags2)
72 {
73  WMACodecContext *s = avctx->priv_data;
74  int i;
75  float bps1, high_freq;
76  volatile float bps;
77  int sample_rate1;
78  int coef_vlc_table;
79 
80  if ( avctx->sample_rate <= 0 || avctx->sample_rate > 50000
81  || avctx->channels <= 0 || avctx->channels > 2
82  || avctx->bit_rate <= 0)
83  return -1;
84 
85  ff_fmt_convert_init(&s->fmt_conv, avctx);
87 
88  if (avctx->codec->id == AV_CODEC_ID_WMAV1) {
89  s->version = 1;
90  } else {
91  s->version = 2;
92  }
93 
94  /* compute MDCT block size */
96  s->version, 0);
100 
101  s->frame_len = 1 << s->frame_len_bits;
102  if (s->use_variable_block_len) {
103  int nb_max, nb;
104  nb = ((flags2 >> 3) & 3) + 1;
105  if ((avctx->bit_rate / avctx->channels) >= 32000)
106  nb += 2;
107  nb_max = s->frame_len_bits - BLOCK_MIN_BITS;
108  if (nb > nb_max)
109  nb = nb_max;
110  s->nb_block_sizes = nb + 1;
111  } else {
112  s->nb_block_sizes = 1;
113  }
114 
115  /* init rate dependent parameters */
116  s->use_noise_coding = 1;
117  high_freq = avctx->sample_rate * 0.5;
118 
119  /* if version 2, then the rates are normalized */
120  sample_rate1 = avctx->sample_rate;
121  if (s->version == 2) {
122  if (sample_rate1 >= 44100) {
123  sample_rate1 = 44100;
124  } else if (sample_rate1 >= 22050) {
125  sample_rate1 = 22050;
126  } else if (sample_rate1 >= 16000) {
127  sample_rate1 = 16000;
128  } else if (sample_rate1 >= 11025) {
129  sample_rate1 = 11025;
130  } else if (sample_rate1 >= 8000) {
131  sample_rate1 = 8000;
132  }
133  }
134 
135  bps = (float)avctx->bit_rate / (float)(avctx->channels * avctx->sample_rate);
136  s->byte_offset_bits = av_log2((int)(bps * s->frame_len / 8.0 + 0.5)) + 2;
137  if (s->byte_offset_bits + 3 > MIN_CACHE_BITS) {
138  av_log(avctx, AV_LOG_ERROR, "byte_offset_bits %d is too large\n", s->byte_offset_bits);
139  return AVERROR_PATCHWELCOME;
140  }
141 
142  /* compute high frequency value and choose if noise coding should
143  be activated */
144  bps1 = bps;
145  if (avctx->channels == 2)
146  bps1 = bps * 1.6;
147  if (sample_rate1 == 44100) {
148  if (bps1 >= 0.61) {
149  s->use_noise_coding = 0;
150  } else {
151  high_freq = high_freq * 0.4;
152  }
153  } else if (sample_rate1 == 22050) {
154  if (bps1 >= 1.16) {
155  s->use_noise_coding = 0;
156  } else if (bps1 >= 0.72) {
157  high_freq = high_freq * 0.7;
158  } else {
159  high_freq = high_freq * 0.6;
160  }
161  } else if (sample_rate1 == 16000) {
162  if (bps > 0.5) {
163  high_freq = high_freq * 0.5;
164  } else {
165  high_freq = high_freq * 0.3;
166  }
167  } else if (sample_rate1 == 11025) {
168  high_freq = high_freq * 0.7;
169  } else if (sample_rate1 == 8000) {
170  if (bps <= 0.625) {
171  high_freq = high_freq * 0.5;
172  } else if (bps > 0.75) {
173  s->use_noise_coding = 0;
174  } else {
175  high_freq = high_freq * 0.65;
176  }
177  } else {
178  if (bps >= 0.8) {
179  high_freq = high_freq * 0.75;
180  } else if (bps >= 0.6) {
181  high_freq = high_freq * 0.6;
182  } else {
183  high_freq = high_freq * 0.5;
184  }
185  }
186  av_dlog(s->avctx, "flags2=0x%x\n", flags2);
187  av_dlog(s->avctx, "version=%d channels=%d sample_rate=%d bitrate=%d block_align=%d\n",
188  s->version, avctx->channels, avctx->sample_rate, avctx->bit_rate,
189  avctx->block_align);
190  av_dlog(s->avctx, "bps=%f bps1=%f high_freq=%f bitoffset=%d\n",
191  bps, bps1, high_freq, s->byte_offset_bits);
192  av_dlog(s->avctx, "use_noise_coding=%d use_exp_vlc=%d nb_block_sizes=%d\n",
194 
195  /* compute the scale factor band sizes for each MDCT block size */
196  {
197  int a, b, pos, lpos, k, block_len, i, j, n;
198  const uint8_t *table;
199 
200  if (s->version == 1) {
201  s->coefs_start = 3;
202  } else {
203  s->coefs_start = 0;
204  }
205  for (k = 0; k < s->nb_block_sizes; k++) {
206  block_len = s->frame_len >> k;
207 
208  if (s->version == 1) {
209  lpos = 0;
210  for (i = 0; i < 25; i++) {
212  b = avctx->sample_rate;
213  pos = ((block_len * 2 * a) + (b >> 1)) / b;
214  if (pos > block_len)
215  pos = block_len;
216  s->exponent_bands[0][i] = pos - lpos;
217  if (pos >= block_len) {
218  i++;
219  break;
220  }
221  lpos = pos;
222  }
223  s->exponent_sizes[0] = i;
224  } else {
225  /* hardcoded tables */
226  table = NULL;
227  a = s->frame_len_bits - BLOCK_MIN_BITS - k;
228  if (a < 3) {
229  if (avctx->sample_rate >= 44100) {
230  table = exponent_band_44100[a];
231  } else if (avctx->sample_rate >= 32000) {
232  table = exponent_band_32000[a];
233  } else if (avctx->sample_rate >= 22050) {
234  table = exponent_band_22050[a];
235  }
236  }
237  if (table) {
238  n = *table++;
239  for (i = 0; i < n; i++)
240  s->exponent_bands[k][i] = table[i];
241  s->exponent_sizes[k] = n;
242  } else {
243  j = 0;
244  lpos = 0;
245  for (i = 0; i < 25; i++) {
247  b = avctx->sample_rate;
248  pos = ((block_len * 2 * a) + (b << 1)) / (4 * b);
249  pos <<= 2;
250  if (pos > block_len)
251  pos = block_len;
252  if (pos > lpos)
253  s->exponent_bands[k][j++] = pos - lpos;
254  if (pos >= block_len)
255  break;
256  lpos = pos;
257  }
258  s->exponent_sizes[k] = j;
259  }
260  }
261 
262  /* max number of coefs */
263  s->coefs_end[k] = (s->frame_len - ((s->frame_len * 9) / 100)) >> k;
264  /* high freq computation */
265  s->high_band_start[k] = (int)((block_len * 2 * high_freq) /
266  avctx->sample_rate + 0.5);
267  n = s->exponent_sizes[k];
268  j = 0;
269  pos = 0;
270  for (i = 0; i < n; i++) {
271  int start, end;
272  start = pos;
273  pos += s->exponent_bands[k][i];
274  end = pos;
275  if (start < s->high_band_start[k])
276  start = s->high_band_start[k];
277  if (end > s->coefs_end[k])
278  end = s->coefs_end[k];
279  if (end > start)
280  s->exponent_high_bands[k][j++] = end - start;
281  }
282  s->exponent_high_sizes[k] = j;
283 #if 0
284  tprintf(s->avctx, "%5d: coefs_end=%d high_band_start=%d nb_high_bands=%d: ",
285  s->frame_len >> k,
286  s->coefs_end[k],
287  s->high_band_start[k],
288  s->exponent_high_sizes[k]);
289  for (j = 0; j < s->exponent_high_sizes[k]; j++)
290  tprintf(s->avctx, " %d", s->exponent_high_bands[k][j]);
291  tprintf(s->avctx, "\n");
292 #endif
293  }
294  }
295 
296 #ifdef TRACE
297  {
298  int i, j;
299  for (i = 0; i < s->nb_block_sizes; i++) {
300  tprintf(s->avctx, "%5d: n=%2d:",
301  s->frame_len >> i,
302  s->exponent_sizes[i]);
303  for (j = 0; j < s->exponent_sizes[i]; j++)
304  tprintf(s->avctx, " %d", s->exponent_bands[i][j]);
305  tprintf(s->avctx, "\n");
306  }
307  }
308 #endif
309 
310  /* init MDCT windows : simple sinus window */
311  for (i = 0; i < s->nb_block_sizes; i++) {
314  }
315 
316  s->reset_block_lengths = 1;
317 
318  if (s->use_noise_coding) {
319 
320  /* init the noise generator */
321  if (s->use_exp_vlc) {
322  s->noise_mult = 0.02;
323  } else {
324  s->noise_mult = 0.04;
325  }
326 
327 #ifdef TRACE
328  for (i = 0; i < NOISE_TAB_SIZE; i++)
329  s->noise_table[i] = 1.0 * s->noise_mult;
330 #else
331  {
332  unsigned int seed;
333  float norm;
334  seed = 1;
335  norm = (1.0 / (float)(1LL << 31)) * sqrt(3) * s->noise_mult;
336  for (i = 0; i < NOISE_TAB_SIZE; i++) {
337  seed = seed * 314159 + 1;
338  s->noise_table[i] = (float)((int)seed) * norm;
339  }
340  }
341 #endif
342  }
343 
344  /* choose the VLC tables for the coefficients */
345  coef_vlc_table = 2;
346  if (avctx->sample_rate >= 32000) {
347  if (bps1 < 0.72) {
348  coef_vlc_table = 0;
349  } else if (bps1 < 1.16) {
350  coef_vlc_table = 1;
351  }
352  }
353  s->coef_vlcs[0]= &coef_vlcs[coef_vlc_table * 2 ];
354  s->coef_vlcs[1]= &coef_vlcs[coef_vlc_table * 2 + 1];
355  init_coef_vlc(&s->coef_vlc[0], &s->run_table[0], &s->level_table[0], &s->int_table[0],
356  s->coef_vlcs[0]);
357  init_coef_vlc(&s->coef_vlc[1], &s->run_table[1], &s->level_table[1], &s->int_table[1],
358  s->coef_vlcs[1]);
359 
360  return 0;
361 }
362 
363 int ff_wma_total_gain_to_bits(int total_gain)
364 {
365  if (total_gain < 15) return 13;
366  else if (total_gain < 32) return 12;
367  else if (total_gain < 40) return 11;
368  else if (total_gain < 45) return 10;
369  else return 9;
370 }
371 
373 {
374  WMACodecContext *s = avctx->priv_data;
375  int i;
376 
377  for (i = 0; i < s->nb_block_sizes; i++)
378  ff_mdct_end(&s->mdct_ctx[i]);
379 
380  if (s->use_exp_vlc) {
381  ff_free_vlc(&s->exp_vlc);
382  }
383  if (s->use_noise_coding) {
384  ff_free_vlc(&s->hgain_vlc);
385  }
386  for (i = 0; i < 2; i++) {
387  ff_free_vlc(&s->coef_vlc[i]);
388  av_free(s->run_table[i]);
389  av_free(s->level_table[i]);
390  av_free(s->int_table[i]);
391  }
392 
393  return 0;
394 }
395 
396 /**
397  * Decode an uncompressed coefficient.
398  * @param gb GetBitContext
399  * @return the decoded coefficient
400  */
402 {
403  /** consumes up to 34 bits */
404  int n_bits = 8;
405  /** decode length */
406  if (get_bits1(gb)) {
407  n_bits += 8;
408  if (get_bits1(gb)) {
409  n_bits += 8;
410  if (get_bits1(gb)) {
411  n_bits += 7;
412  }
413  }
414  }
415  return get_bits_long(gb, n_bits);
416 }
417 
418 /**
419  * Decode run level compressed coefficients.
420  * @param avctx codec context
421  * @param gb bitstream reader context
422  * @param vlc vlc table for get_vlc2
423  * @param level_table level codes
424  * @param run_table run codes
425  * @param version 0 for wma1,2 1 for wmapro
426  * @param ptr output buffer
427  * @param offset offset in the output buffer
428  * @param num_coefs number of input coefficents
429  * @param block_len input buffer length (2^n)
430  * @param frame_len_bits number of bits for escaped run codes
431  * @param coef_nb_bits number of bits for escaped level codes
432  * @return 0 on success, -1 otherwise
433  */
435  VLC *vlc,
436  const float *level_table, const uint16_t *run_table,
437  int version, WMACoef *ptr, int offset,
438  int num_coefs, int block_len, int frame_len_bits,
439  int coef_nb_bits)
440 {
441  int code, level, sign;
442  const uint32_t *ilvl = (const uint32_t*)level_table;
443  uint32_t *iptr = (uint32_t*)ptr;
444  const unsigned int coef_mask = block_len - 1;
445  for (; offset < num_coefs; offset++) {
446  code = get_vlc2(gb, vlc->table, VLCBITS, VLCMAX);
447  if (code > 1) {
448  /** normal code */
449  offset += run_table[code];
450  sign = get_bits1(gb) - 1;
451  iptr[offset & coef_mask] = ilvl[code] ^ sign<<31;
452  } else if (code == 1) {
453  /** EOB */
454  break;
455  } else {
456  /** escape */
457  if (!version) {
458  level = get_bits(gb, coef_nb_bits);
459  /** NOTE: this is rather suboptimal. reading
460  block_len_bits would be better */
461  offset += get_bits(gb, frame_len_bits);
462  } else {
463  level = ff_wma_get_large_val(gb);
464  /** escape decode */
465  if (get_bits1(gb)) {
466  if (get_bits1(gb)) {
467  if (get_bits1(gb)) {
468  av_log(avctx,AV_LOG_ERROR,
469  "broken escape sequence\n");
470  return -1;
471  } else
472  offset += get_bits(gb, frame_len_bits) + 4;
473  } else
474  offset += get_bits(gb, 2) + 1;
475  }
476  }
477  sign = get_bits1(gb) - 1;
478  ptr[offset & coef_mask] = (level^sign) - sign;
479  }
480  }
481  /** NOTE: EOB can be omitted */
482  if (offset > num_coefs) {
483  av_log(avctx, AV_LOG_ERROR, "overflow in spectral RLE, ignoring\n");
484  return -1;
485  }
486 
487  return 0;
488 }
const struct AVCodec * codec
const char * s
Definition: avisynth_c.h:668
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
int next_block_len_bits
log2 of next block length
Definition: wma.h:104
int ff_wma_run_level_decode(AVCodecContext *avctx, GetBitContext *gb, VLC *vlc, const float *level_table, const uint16_t *run_table, int version, WMACoef *ptr, int offset, int num_coefs, int block_len, int frame_len_bits, int coef_nb_bits)
Decode run level compressed coefficients.
Definition: wma.c:434
#define BLOCK_MIN_BITS
Definition: wma.h:32
const uint8_t * huffbits
VLC bit size.
Definition: wma.h:62
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
int version
Definition: avisynth_c.h:666
static void init_coef_vlc(VLC *vlc, uint16_t **prun_table, float **plevel_table, uint16_t **pint_table, const CoefVLCTable *vlc_table)
Definition: wma.c:33
int n
total number of codes
Definition: wma.h:59
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs...
#define NOISE_TAB_SIZE
Definition: wma.h:48
int high_band_start[BLOCK_NB_SIZES]
index of first coef in high band
Definition: wma.h:79
int exponent_sizes[BLOCK_NB_SIZES]
Definition: wma.h:77
uint8_t
float WMACoef
type for decoded coefficients, int16_t would be enough for wma 1/2
Definition: wma.h:56
#define b
Definition: input.c:42
end end
Various WMA tables.
const uint32_t * huffcodes
VLC bit values.
Definition: wma.h:61
integer sqrt
Definition: avutil.txt:2
#define CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
int reset_block_lengths
Definition: wma.h:102
int nb_block_sizes
number of block sizes
Definition: wma.h:100
int ff_wma_total_gain_to_bits(int total_gain)
Definition: wma.c:363
uint16_t * int_table[2]
Definition: wma.h:95
enum AVCodecID id
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
Definition: mem.c:183
static const struct endianess table[]
uint16_t exponent_bands[BLOCK_NB_SIZES][25]
Definition: wma.h:78
int flags
CODEC_FLAG_*.
AVFloatDSPContext fdsp
Definition: wma.h:134
#define VLCBITS
Definition: wma.h:53
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
static const uint8_t offset[127][2]
Definition: vf_spp.c:70
external API header
Definition: get_bits.h:63
int exponent_high_bands[BLOCK_NB_SIZES][HIGH_BAND_MAX_SIZE]
Definition: wma.h:83
int ff_wma_end(AVCodecContext *avctx)
Definition: wma.c:372
int bit_rate
the average bitrate
float * windows[BLOCK_NB_SIZES]
Definition: wma.h:118
static const uint8_t exponent_band_44100[3][25]
Definition: wmadata.h:53
uint16_t * run_table[2]
Definition: wma.h:93
int version
1 = 0x160 (WMAV1), 2 = 0x161 (WMAV2)
Definition: wma.h:70
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:524
int frame_len
frame length in samples
Definition: wma.h:98
FIXME Range Coding of cr are level
Definition: snow.txt:367
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
for k
NULL
Definition: eval.c:55
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
int frame_len_bits
frame_len = 1 << frame_len_bits
Definition: wma.h:99
int sample_rate
samples per second
int use_exp_vlc
exponent coding: 0 = lsp, 1 = vlc + delta
Definition: wma.h:73
VLC coef_vlc[2]
Definition: wma.h:92
main external API structure.
#define VLCMAX
Definition: wma.h:54
static unsigned int seed
Definition: videogen.c:78
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
Definition: get_bits.h:426
AVCodecContext * avctx
Definition: wma.h:67
int exponent_high_sizes[BLOCK_NB_SIZES]
Definition: wma.h:82
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:73
synthesis window for stochastic i
int use_noise_coding
true if perceptual noise is added
Definition: wma.h:74
SINETABLE_CONST float *const ff_sine_windows[14]
float * level_table[2]
Definition: wma.h:94
int use_variable_block_len
Definition: wma.h:72
VLC exp_vlc
Definition: wma.h:76
FFTContext mdct_ctx[BLOCK_NB_SIZES]
Definition: wma.h:117
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:306
#define MIN_CACHE_BITS
Definition: get_bits.h:122
av_cold int ff_wma_get_frame_len_bits(int sample_rate, int version, unsigned int decode_flags)
Get the samples per frame for this stream.
Definition: wma_common.c:31
int prev_block_len_bits
log2 of prev block length
Definition: wma.h:105
int coefs_end[BLOCK_NB_SIZES]
max number of coded coefficients
Definition: wma.h:81
const uint16_t ff_wma_critical_freqs[25]
Definition: wmadata.h:33
#define tprintf(p,...)
Definition: get_bits.h:628
#define ff_mdct_end
Definition: fft.h:148
unsigned bps
Definition: movenc.c:895
FmtConvertContext fmt_conv
Definition: wma.h:133
av_cold void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx)
Definition: fmtconvert.c:79
int channels
number of audio channels
#define av_log2
Definition: intmath.h:89
VLC_TYPE(* table)[2]
code, bits
Definition: get_bits.h:65
unsigned int ff_wma_get_large_val(GetBitContext *gb)
Decode an uncompressed coefficient.
Definition: wma.c:401
static const CoefVLCTable coef_vlcs[6]
Definition: wmadata.h:1382
VLC hgain_vlc
Definition: wma.h:84
int coefs_start
first coded coef
Definition: wma.h:80
void INT64 start
Definition: avisynth_c.h:594
int block_len_bits
log2 of current block length
Definition: wma.h:103
void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
Initialize a float DSP context.
Definition: float_dsp.c:118
int byte_offset_bits
Definition: wma.h:75
static const uint8_t exponent_band_22050[3][25]
Definition: wmadata.h:41
static const uint8_t exponent_band_32000[3][25]
Definition: wmadata.h:47
void ff_free_vlc(VLC *vlc)
Definition: bitstream.c:344
int ff_wma_init(AVCodecContext *avctx, int flags2)
Definition: wma.c:71
void ff_init_ff_sine_windows(int index)
initialize the specified entry of ff_sine_windows
float noise_table[NOISE_TAB_SIZE]
Definition: wma.h:125
const uint16_t * levels
table to build run/level tables
Definition: wma.h:63
float noise_mult
Definition: wma.h:127