[xiph-cvs] cvs commit: speex/libspeex lbr_48k_tables.c Makefile.am denoise.c ltp.c ltp.h modes.c modes.h nb_celp.c nb_celp.h quant_lsp.c quant_lsp.h speex.h

Jean-Marc Valin jm at xiph.org
Tue May 13 13:57:32 PDT 2003



jm          03/05/13 16:57:32

  Modified:    libspeex Makefile.am denoise.c ltp.c ltp.h modes.c modes.h
                        nb_celp.c nb_celp.h quant_lsp.c quant_lsp.h speex.h
  Added:       libspeex lbr_48k_tables.c
  Log:
  Merged an experimental (and non-standard) 4.8 kbps mode. Note that this
  mode is completely independent from the other modes and cannot be used
  in multi-rate operation.

Revision  Changes    Path
1.51      +4 -3      speex/libspeex/Makefile.am

Index: Makefile.am
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/Makefile.am,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -r1.50 -r1.51
--- Makefile.am	8 May 2003 04:04:49 -0000	1.50
+++ Makefile.am	13 May 2003 20:57:31 -0000	1.51
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in. -*-Makefile-*-
 
-# $Id: Makefile.am,v 1.50 2003/05/08 04:04:49 jm Exp $
+# $Id: Makefile.am,v 1.51 2003/05/13 20:57:31 jm Exp $
 
 # Disable automatic dependency tracking if using other tools than gcc and gmake
 #AUTOMAKE_OPTIONS = no-dependencies
@@ -38,7 +38,8 @@
         math_approx.c \
         stereo.c \
         denoise.c \
-	smallft.c
+	smallft.c \
+	lbr_48k_tables.c
 
 
 include_HEADERS =  speex.h \
@@ -46,7 +47,7 @@
         speex_header.h \
         speex_callbacks.h \
         speex_stereo.h \
-	denoise.h
+	speex_denoise.h
 
 noinst_HEADERS = lsp.h \
         nb_celp.h \

<p><p>1.5       +0 -1      speex/libspeex/denoise.c

Index: denoise.c
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/denoise.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- denoise.c	12 May 2003 01:23:51 -0000	1.4
+++ denoise.c	13 May 2003 20:57:31 -0000	1.5
@@ -419,7 +419,6 @@
          loudness += scale*st->ps[i] * st->gain2[i] * st->gain2[i] * st->loudness_weight[i];
       }
       loudness=sqrt(loudness);
-      //if (st->consec_noise==0)
       fprintf (stderr, "%f\n", loudness);
    }
 

<p><p>1.76      +19 -10    speex/libspeex/ltp.c

Index: ltp.c
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/ltp.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -r1.75 -r1.76
--- ltp.c	6 May 2003 01:19:55 -0000	1.75
+++ ltp.c	13 May 2003 20:57:31 -0000	1.76
@@ -140,7 +140,7 @@
 
 
 /** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
-float pitch_gain_search_3tap(
+static float pitch_gain_search_3tap(
 float target[],                 /* Target vector */
 float ak[],                     /* LPCs for this subframe */
 float awk1[],                   /* Weighted LPCs #1 for this subframe */
@@ -154,7 +154,8 @@
 char *stack,
 float *exc2,
 float *r,
-int  *cdbk_index
+int  *cdbk_index,
+int cdbk_offset
 )
 {
    int i,j;
@@ -170,8 +171,8 @@
 
    ltp_params *params;
    params = (ltp_params*) par;
-   gain_cdbk=params->gain_cdbk;
-   gain_cdbk_size=1<<params->gain_bits;
+   gain_cdbk_size = 1<<params->gain_bits;
+   gain_cdbk = params->gain_cdbk + 3*gain_cdbk_size*cdbk_offset;
    tmp = PUSH(stack, 3*nsf, float);
    tmp2 = PUSH(stack, 3*nsf, float);
 
@@ -305,7 +306,8 @@
 char *stack,
 float *exc2,
 float *r,
-int complexity
+int complexity,
+int cdbk_offset
 )
 {
    int i,j;
@@ -346,7 +348,7 @@
       for (j=0;j<nsf;j++)
          exc[j]=0;
       err=pitch_gain_search_3tap(target, ak, awk1, awk2, exc, par, pitch, p, nsf,
-                                 bits, stack, exc2, r, &cdbk_index);
+                                 bits, stack, exc2, r, &cdbk_index, cdbk_offset);
       if (err<best_err || best_err<0)
       {
          for (j=0;j<nsf;j++)
@@ -380,16 +382,20 @@
 char *stack,
 int count_lost,
 int subframe_offset,
-float last_pitch_gain)
+float last_pitch_gain,
+int cdbk_offset
+)
 {
    int i;
    int pitch;
    int gain_index;
    float gain[3];
    signed char *gain_cdbk;
+   int gain_cdbk_size;
    ltp_params *params;
    params = (ltp_params*) par;
-   gain_cdbk=params->gain_cdbk;
+   gain_cdbk_size = 1<<params->gain_bits;
+   gain_cdbk = params->gain_cdbk + 3*gain_cdbk_size*cdbk_offset;
 
    pitch = speex_bits_unpack_unsigned(bits, params->pitch_bits);
    pitch += start;
@@ -505,7 +511,8 @@
 char *stack,
 float *exc2,
 float *r,
-int complexity
+int complexity,
+int cdbk_offset
 )
 {
    int i;
@@ -532,7 +539,9 @@
 char *stack,
 int count_lost,
 int subframe_offset,
-float last_pitch_gain)
+float last_pitch_gain,
+int cdbk_offset
+)
 {
    int i;
    /*pitch_coef=.9;*/

<p><p>1.34      +8 -22     speex/libspeex/ltp.h

Index: ltp.h
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/ltp.h,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- ltp.h	28 Jan 2003 06:52:40 -0000	1.33
+++ ltp.h	13 May 2003 20:57:31 -0000	1.34
@@ -61,7 +61,8 @@
 char *stack,
 float *exc2,
 float *r,
-int   complexity
+int   complexity,
+int   cdbk_offset
 );
 
 /*Unquantize adaptive codebook and update pitch contribution*/
@@ -78,27 +79,10 @@
 char *stack,
 int lost,
 int subframe_offset,
-float last_pitch_gain
+float last_pitch_gain,
+int cdbk_offset
 );
 
-float pitch_gain_search_3tap(
-float target[],                 /* Target vector */
-float ak[],                     /* LPCs for this subframe */
-float awk1[],                   /* Weighted LPCs #1 for this subframe */
-float awk2[],                   /* Weighted LPCs #2 for this subframe */
-float exc[],                    /* Excitation */
-void *par,
-int   pitch,                    /* Pitch value */
-int   p,                        /* Number of LPC coeffs */
-int   nsf,                      /* Number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-float *exc2,
-float *r,
-int  *cdbk_index
-);
-
-
 /** Forced pitch delay and gain */
 int forced_pitch_quant(
 float target[],                 /* Target vector */
@@ -117,7 +101,8 @@
 char *stack,
 float *exc2,
 float *r,
-int complexity
+int complexity,
+int cdbk_offset
 );
 
 /** Unquantize forced pitch delay and gain */
@@ -134,5 +119,6 @@
 char *stack,
 int lost,
 int subframe_offset,
-float last_pitch_gain
+float last_pitch_gain,
+int cdbk_offset
 );

<p><p>1.104     +89 -0     speex/libspeex/modes.c

Index: modes.c
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/modes.c,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -r1.103 -r1.104
--- modes.c	3 Mar 2003 03:36:56 -0000	1.103
+++ modes.c	13 May 2003 20:57:31 -0000	1.104
@@ -353,6 +353,9 @@
    .01,   /*lag_factor*/
    1.0001, /*lpc_floor*/
    0.0,    /*preemph*/
+#ifdef EPIC_48K
+   0,
+#endif
    {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, &nb_submode6, &nb_submode7,
    &nb_submode8, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
    5,
@@ -549,6 +552,92 @@
    &sb_decoder_ctl,
 };
 
+
+
+
+#ifdef EPIC_48K
+
+extern signed char gain_cdbk_ulbr[];
+extern signed char exc_12_32_table[];
+
+/* Parameters for Long-Term Prediction (LTP)*/
+static ltp_params ltp_params_48k = {
+   gain_cdbk_ulbr,
+   3,
+   0
+};
+
+static split_cb_params split_cb_nb_48k = {
+   12,               /*subvect_size*/
+   4,               /*nb_subvect*/
+   exc_12_32_table, /*shape_cb*/
+   5,               /*shape_bits*/
+   0,
+};
+
+
+/* 4.8 kbps very low bit-rate mode */
+static SpeexSubmode nb_48k_submode = {
+   0,
+   0,
+   0,
+   0,
+   /*LSP quantization*/
+   lsp_quant_48k,
+   lsp_unquant_48k,
+   /*No pitch quantization*/
+   pitch_search_3tap,
+   pitch_unquant_3tap,
+   &ltp_params_48k,
+   /*Innovation quantization*/
+   split_cb_search_shape_sign,
+   split_cb_shape_sign_unquant,
+   &split_cb_nb_48k,
+
+   0.8, 0.6, .7,
+   144
+};
+
+
+/* Special, non-standard 4.8 kbps mode */
+static SpeexNBMode nb_48k_mode = {
+   240,    /*frameSize*/
+   48,     /*subframeSize*/
+   10,     /*lpcSize*/
+   640,    /*bufSize*/
+   17,     /*pitchStart*/
+   144,    /*pitchEnd*/
+   0.9,    /*gamma1*/
+   0.6,    /*gamma2*/
+   .01,   /*lag_factor*/
+   1.0003, /*lpc_floor*/
+   0.0,    /*preemph*/
+   1,
+   {NULL, NULL, &nb_48k_submode, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
+   2,
+   {2,2,2,2,2,2,2,2,2,2,2}
+};
+
+
+/* Default mode for narrowband */
+SpeexMode speex_nb_48k_mode = {
+   &nb_48k_mode,
+   nb_mode_query,
+   "narrowband 4.8 kbps",
+   1000,
+   4,
+   &nb_encoder_init,
+   &nb_encoder_destroy,
+   &nb_encode,
+   &nb_decoder_init,
+   &nb_decoder_destroy,
+   &nb_decode,
+   &nb_encoder_ctl,
+   &nb_decoder_ctl,
+};
+
+
+#endif
 
 
 

<p><p>1.43      +6 -2      speex/libspeex/modes.h

Index: modes.h
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/modes.h,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- modes.h	10 Jan 2003 07:27:54 -0000	1.42
+++ modes.h	13 May 2003 20:57:31 -0000	1.43
@@ -57,11 +57,11 @@
 /** Long-term predictor quantization */
 typedef int (*ltp_quant_func)(float *, float *, float *, float *, 
                               float *, float *, void *, int, int, float, 
-                              int, int, SpeexBits*, char *, float *, float *, int);
+                              int, int, SpeexBits*, char *, float *, float *, int, int);
 
 /** Long-term un-quantize */
 typedef void (*ltp_unquant_func)(float *, int, int, float, void *, int, int *,
-                                 float *, SpeexBits*, char*, int, int, float);
+                                 float *, SpeexBits*, char*, int, int, float, int);
 
 
 /** Innovation quantization function */
@@ -113,6 +113,10 @@
    float   lag_factor;     /**< Lag-windowing parameter */
    float   lpc_floor;      /**< Noise floor for LPC analysis */
    float   preemph;        /**< Pre-emphasis */
+
+#ifdef EPIC_48K
+   int     lbr48k;         /**< 1 for the special 4.8 kbps mode */
+#endif
 
    SpeexSubmode *submodes[NB_SUBMODES]; /**< Sub-mode data for the mode */
    int     defaultSubmode; /**< Default sub-mode to use when encoding */

<p><p>1.116     +174 -7    speex/libspeex/nb_celp.c

Index: nb_celp.c
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/nb_celp.c,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -r1.115 -r1.116
--- nb_celp.c	9 May 2003 05:28:59 -0000	1.115
+++ nb_celp.c	13 May 2003 20:57:31 -0000	1.116
@@ -100,6 +100,10 @@
    st->pre_mem2=0;
    st->bounded_pitch = 1;
 
+#ifdef EPIC_48K
+   st->lbr_48k=mode->lbr48k;
+#endif
+
    /* Allocating input buffer */
    st->inBuf = PUSH(st->stack, st->bufSize, float);
    st->frame = st->inBuf + st->bufSize - st->windowSize;
@@ -117,8 +121,8 @@
    /* Asymmetric "pseudo-Hamming" window */
    {
       int part1, part2;
-      part1 = st->subframeSize*7/2;
-      part2 = st->subframeSize*5/2;
+      part1=st->frameSize - (st->subframeSize>>1);
+      part2=(st->frameSize>>1) + (st->subframeSize>>1);
       st->window = PUSH(st->stack, st->windowSize, float);
       for (i=0;i<part1;i++)
          st->window[i]=.54-.46*cos(M_PI*i/part1);
@@ -201,6 +205,10 @@
    float *syn_resp;
    float lsp_dist=0;
    float *orig;
+#ifdef EPIC_48K
+   int pitch_half[2];
+   int ol_pitch_id=0;
+#endif
 
    st=(EncState *)state;
    stack=st->stack;
@@ -314,6 +322,21 @@
          /*if (ol_pitch>50)
            ol_pitch/=2;*/
          /*ol_pitch_coef = sqrt(ol_pitch_coef);*/
+
+#ifdef EPIC_48K
+         if (st->lbr_48k)
+         {
+            if (ol_pitch < st->min_pitch+2)
+               ol_pitch = st->min_pitch+2;
+            if (ol_pitch > st->max_pitch-2)
+               ol_pitch = st->max_pitch-2;
+            open_loop_nbest_pitch(st->sw, ol_pitch-2, ol_pitch+2, st->frameSize>>1, 
+                                  &pitch_half[0], nol_pitch_coef, 1, stack);
+            open_loop_nbest_pitch(st->sw+(st->frameSize>>1), pitch_half[0]-1, pitch_half[0]+2, st->frameSize>>1, 
+                                  &pitch_half[1], nol_pitch_coef, 1, stack);
+         }
+#endif
+
       } else {
          ol_pitch=0;
          ol_pitch_coef=0;
@@ -322,11 +345,32 @@
       fir_mem2(st->frame, st->interp_lpc, st->exc, st->frameSize, st->lpcSize, st->mem_exc);
 
       /* Compute open-loop excitation gain */
+#ifdef EPIC_48K
+      if (st->lbr_48k)
+      {
+         float ol1=0,ol2=0;
+         for (i=0;i<st->frameSize>>1;i++)
+            ol1 += st->exc[i]*st->exc[i];
+         for (i=st->frameSize>>1;i<st->frameSize;i++)
+            ol2 += st->exc[i]*st->exc[i];
+
+         ol_gain=ol1;
+         if (ol2>ol1)
+            ol_gain=ol2;
+         ol_gain = sqrt(2*ol_gain*(ol1+ol2))*1.3*(1-.5*ol_pitch_coef*ol_pitch_coef);
+      
+      ol_gain=sqrt(1+ol_gain/st->frameSize);
+
+      } else {
+#endif
       ol_gain=0;
       for (i=0;i<st->frameSize;i++)
          ol_gain += st->exc[i]*st->exc[i];
       
       ol_gain=sqrt(1+ol_gain/st->frameSize);
+#ifdef EPIC_48K
+      }
+#endif
    }
 
    /*VBR stuff*/
@@ -428,12 +472,19 @@
       st->relative_quality = -1;
    }
 
+#ifdef EPIC_48K
+   if (!st->lbr_48k) {
+#endif
+
    /* First, transmit a zero for narrowband */
    speex_bits_pack(bits, 0, 1);
 
    /* Transmit the sub-mode we use for this frame */
    speex_bits_pack(bits, st->submodeID, NB_SUBMODE_BITS);
 
+#ifdef EPIC_48K
+   }
+#endif
 
    /* If null mode (no transmission), just set a couple things to zero*/
    if (st->submodes[st->submodeID] == NULL)
@@ -474,12 +525,41 @@
      st->qlsp[i]=st->lsp[i];
 #endif
 
+#ifdef EPIC_48K
+   if (st->lbr_48k) {
+      speex_bits_pack(bits, pitch_half[0]-st->min_pitch, 7);
+      speex_bits_pack(bits, pitch_half[1]-pitch_half[0]+1, 2);
+      
+      {
+         int quant = (int)floor(.5+7.4*ol_pitch_coef);
+         if (quant>7)
+            quant=7;
+         if (quant<0)
+            quant=0;
+         ol_pitch_id=quant;
+         speex_bits_pack(bits, quant, 3);
+         ol_pitch_coef=0.13514*quant;
+         
+      }
+      {
+         int qe = (int)(floor(.5+2.1*log(ol_gain)))-2;
+         if (qe<0)
+            qe=0;
+         if (qe>15)
+            qe=15;
+         ol_gain = exp((qe+2)/2.1);
+         speex_bits_pack(bits, qe, 4);
+      }
+
+   } else {
+#endif
+
    /*If we use low bit-rate pitch mode, transmit open-loop pitch*/
    if (SUBMODE(lbr_pitch)!=-1)
    {
       speex_bits_pack(bits, ol_pitch-st->min_pitch, 7);
    } 
-   
+
    if (SUBMODE(forced_pitch_gain))
    {
       int quant;
@@ -504,6 +584,11 @@
       speex_bits_pack(bits, qe, 5);
    }
 
+#ifdef EPIC_48K
+   }
+#endif
+
+
    /* Special case for first frame */
    if (st->first)
    {
@@ -529,6 +614,16 @@
       float *sp, *sw, *exc, *exc2;
       int pitch;
 
+#ifdef EPIC_48K
+      if (st->lbr_48k)
+      {
+         if (sub*2 < st->nbSubframes)
+            ol_pitch = pitch_half[0];
+         else
+            ol_pitch = pitch_half[1];
+      }
+#endif
+
       /* Offset relative to start of frame */
       offset = st->subframeSize*sub;
       /* Original signal */
@@ -645,11 +740,24 @@
          if (st->bounded_pitch && pit_max>offset)
             pit_max=offset;
 
+#ifdef EPIC_48K
+         if (st->lbr_48k)
+         {
+            pitch = SUBMODE(ltp_quant)(target, sw, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2,
+                                       exc, SUBMODE(ltp_params), pit_min, pit_max, ol_pitch_coef,
+                                       st->lpcSize, st->subframeSize, bits, stack, 
+                                       exc2, syn_resp, st->complexity, ol_pitch_id);
+         } else {
+#endif
+
          /* Perform pitch search */
          pitch = SUBMODE(ltp_quant)(target, sw, st->interp_qlpc, st->bw_lpc1, st->bw_lpc2,
                                     exc, SUBMODE(ltp_params), pit_min, pit_max, ol_pitch_coef,
                                     st->lpcSize, st->subframeSize, bits, stack, 
-                                    exc2, syn_resp, st->complexity);
+                                    exc2, syn_resp, st->complexity, 0);
+#ifdef EPIC_48K
+         }
+#endif
 
          st->pitch[sub]=pitch;
       } else {
@@ -821,6 +929,10 @@
 
    st->stack = ((char*)st) + sizeof(DecState);
 
+#ifdef EPIC_48K
+   st->lbr_48k=mode->lbr48k;
+#endif
+
    st->first=1;
    /* Codec parameters, should eventually have several "modes"*/
    st->frameSize = mode->frameSize;
@@ -1019,10 +1131,18 @@
    char *stack;
    float *awk1, *awk2, *awk3;
    float pitch_average=0;
+#ifdef EPIC_48K
+   int pitch_half[2];
+   int ol_pitch_id=0;
+#endif
 
    st=(DecState*)state;
    stack=st->stack;
 
+#ifdef EPIC_48K
+   if (!st->lbr_48k) {
+#endif
+
    /* Check if we're in DTX mode*/
    if (!bits && st->dtx_enabled)
    {
@@ -1101,6 +1221,9 @@
       st->submodeID = m;
 
    }
+#ifdef EPIC_48K
+   }
+#endif
 
    /* Shift all buffers by one frame */
    speex_move(st->inBuf, st->inBuf+st->frameSize, (st->bufSize-st->frameSize)*sizeof(float));
@@ -1163,6 +1286,23 @@
          st->old_qlsp[i] = st->qlsp[i];
    }
 
+#ifdef EPIC_48K
+   if (st->lbr_48k) {
+      pitch_half[0] = st->min_pitch+speex_bits_unpack_unsigned(bits, 7);
+      pitch_half[1] = pitch_half[0]+speex_bits_unpack_unsigned(bits, 2)-1;
+
+      ol_pitch_id = speex_bits_unpack_unsigned(bits, 3);
+      ol_pitch_coef=0.13514*ol_pitch_id;
+
+      {
+         int qe;
+         qe = speex_bits_unpack_unsigned(bits, 4);
+         ol_gain = exp((qe+2)/2.1);
+      }
+
+   } else {
+#endif
+
    /* Get open-loop pitch estimation for low bit-rate pitch coding */
    if (SUBMODE(lbr_pitch)!=-1)
    {
@@ -1182,6 +1322,9 @@
       qe = speex_bits_unpack_unsigned(bits, 5);
       ol_gain = exp(qe/3.5);
    }
+#ifdef EPIC_48K
+   }
+#endif
 
    awk1=PUSH(stack, st->lpcSize+1, float);
    awk2=PUSH(stack, st->lpcSize+1, float);
@@ -1206,6 +1349,16 @@
       int offset;
       float *sp, *exc, tmp;
 
+#ifdef EPIC_48K
+      if (st->lbr_48k)
+      {
+         if (sub*2 < st->nbSubframes)
+            ol_pitch = pitch_half[0];
+         else
+            ol_pitch = pitch_half[1];
+      }
+#endif
+
       /* Offset relative to start of frame */
       offset = st->subframeSize*sub;
       /* Original signal */
@@ -1294,9 +1447,23 @@
             pit_max = st->max_pitch;
          }
 
-         /* Pitch synthesis */
-         SUBMODE(ltp_unquant)(exc, pit_min, pit_max, ol_pitch_coef, SUBMODE(ltp_params), 
-                              st->subframeSize, &pitch, &pitch_gain[0], bits, stack, st->count_lost, offset, st->last_pitch_gain);
+
+#ifdef EPIC_48K
+         if (st->lbr_48k)
+         {
+             SUBMODE(ltp_unquant)(exc, pit_min, pit_max, ol_pitch_coef, SUBMODE(ltp_params), 
+                                  st->subframeSize, &pitch, &pitch_gain[0], bits, stack, 
+                                  st->count_lost, offset, st->last_pitch_gain, ol_pitch_id);
+         } else {
+#endif
+
+             SUBMODE(ltp_unquant)(exc, pit_min, pit_max, ol_pitch_coef, SUBMODE(ltp_params), 
+                                  st->subframeSize, &pitch, &pitch_gain[0], bits, stack, 
+                                  st->count_lost, offset, st->last_pitch_gain, 0);
+#ifdef EPIC_48K
+         }
+#endif
+
          
          /* If we had lost frames, check energy of last received frame */
          if (st->count_lost && ol_gain < st->last_ol_gain)

<p><p>1.49      +10 -1     speex/libspeex/nb_celp.h

Index: nb_celp.h
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/nb_celp.h,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -r1.48 -r1.49
--- nb_celp.h	23 Jan 2003 07:29:39 -0000	1.48
+++ nb_celp.h	13 May 2003 20:57:31 -0000	1.49
@@ -60,6 +60,11 @@
    int    ol_pitch;       /**< Open-loop pitch */
    int    ol_voiced;      /**< Open-loop voiced/non-voiced decision */
    int   *pitch;
+
+#ifdef EPIC_48K
+   int    lbr_48k;
+#endif
+
    float  gamma1;         /**< Perceptual filter: A(z/gamma1) */
    float  gamma2;         /**< Perceptual filter: A(z/gamma2) */
    float  lag_factor;     /**< Lag windowing Gaussian width */
@@ -132,8 +137,12 @@
    int    min_pitch;      /**< Minimum pitch value allowed */
    int    max_pitch;      /**< Maximum pitch value allowed */
    int    sampling_rate;
-   float  last_ol_gain;   /**< Open-loop gain for previous frame */
 
+#ifdef EPIC_48K
+   int    lbr_48k;
+#endif
+
+   float  last_ol_gain;   /**< Open-loop gain for previous frame */
 
    float  gamma1;         /**< Perceptual filter: A(z/gamma1) */
    float  gamma2;         /**< Perceptual filter: A(z/gamma2) */

<p><p>1.23      +69 -0     speex/libspeex/quant_lsp.c

Index: quant_lsp.c
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/quant_lsp.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- quant_lsp.c	28 Jan 2003 05:22:02 -0000	1.22
+++ quant_lsp.c	13 May 2003 20:57:31 -0000	1.23
@@ -309,3 +309,72 @@
    for (i=0;i<order;i++)
       lsp[i] += 0.0019531*high_lsp_cdbk2[id*order+i];
 }
+
+
+#ifdef EPIC_48K
+
+extern signed char cdbk_lsp_vlbr[5120];
+extern signed char cdbk_lsp2_vlbr[160];
+
+void lsp_quant_48k(float *lsp, float *qlsp, int order, SpeexBits *bits)
+{
+   int i;
+   float tmp1, tmp2;
+   int id;
+
+   for (i=0;i<order;i++)
+      qlsp[i]=lsp[i];
+
+   quant_weight[0] = 1/(qlsp[1]-qlsp[0]);
+   quant_weight[order-1] = 1/(qlsp[order-1]-qlsp[order-2]);
+   for (i=1;i<order-1;i++)
+   {
+#if 1
+      tmp1 = 1/((.15+qlsp[i]-qlsp[i-1])*(.15+qlsp[i]-qlsp[i-1]));
+      tmp2 = 1/((.15+qlsp[i+1]-qlsp[i])*(.15+qlsp[i+1]-qlsp[i]));
+#else
+      tmp1 = 1/(qlsp[i]-qlsp[i-1]);
+      tmp2 = 1/(qlsp[i+1]-qlsp[i]);
+#endif
+      quant_weight[i] = tmp1 > tmp2 ? tmp1 : tmp2;
+   }
+
+   for (i=0;i<order;i++)
+      qlsp[i]-=(.25*i+.3125);
+   for (i=0;i<order;i++)
+      qlsp[i]*=256;
+   
+   id = lsp_quant(qlsp, cdbk_lsp_vlbr, 512, order);
+   speex_bits_pack(bits, id, 9);
+
+   for (i=0;i<order;i++)
+      qlsp[i]*=4;
+   
+   id = lsp_weight_quant(qlsp, quant_weight, cdbk_lsp2_vlbr, 16, 10);
+   speex_bits_pack(bits, id, 4);
+
+   for (i=0;i<order;i++)
+      qlsp[i]*=0.00097655;
+
+   for (i=0;i<order;i++)
+      qlsp[i]=lsp[i]-qlsp[i];
+}
+
+void lsp_unquant_48k(float *lsp, int order, SpeexBits *bits)
+{
+   int i, id;
+   for (i=0;i<order;i++)
+      lsp[i]=.25*i+.3125;
+
+
+   id=speex_bits_unpack_unsigned(bits, 9);
+   for (i=0;i<10;i++)
+      lsp[i] += 0.0039062*cdbk_lsp_vlbr[id*10+i];
+
+   id=speex_bits_unpack_unsigned(bits, 4);
+   for (i=0;i<10;i++)
+      lsp[i] += 0.00097655*cdbk_lsp2_vlbr[id*10+i];
+   
+}
+
+#endif

<p><p>1.16      +9 -0      speex/libspeex/quant_lsp.h

Index: quant_lsp.h
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/quant_lsp.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- quant_lsp.h	28 Jan 2003 00:50:22 -0000	1.15
+++ quant_lsp.h	13 May 2003 20:57:31 -0000	1.16
@@ -68,4 +68,13 @@
 /* Decodes high-band LSPs */
 void lsp_unquant_high(float *lsp, int order, SpeexBits *bits);
 
+#ifdef EPIC_48K
+/* Quantizes narrowband LSPs with 14 bits */
+void lsp_quant_48k(float *lsp, float *qlsp, int order, SpeexBits *bits);
+
+/* Decodes quantized narrowband LSPs (14 bits) */
+void lsp_unquant_48k(float *lsp, int order, SpeexBits *bits);
+#endif
+
+
 #endif

<p><p>1.76      +5 -0      speex/libspeex/speex.h

Index: speex.h
===================================================================
RCS file: /usr/local/cvsroot/speex/libspeex/speex.h,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -r1.75 -r1.76
--- speex.h	23 Jan 2003 07:29:39 -0000	1.75
+++ speex.h	13 May 2003 20:57:31 -0000	1.76
@@ -320,6 +320,11 @@
 /** Default "ultra-wideband" mode */
 extern SpeexMode speex_uwb_mode;
 
+#ifdef EPIC_48K
+/** 4.8 kbps narrowband mode */
+extern SpeexMode speex_nb_48k_mode;
+#endif
+
 /** List of all modes available */
 extern SpeexMode *speex_mode_list[SPEEX_NB_MODES];
 

<p><p>1.1                  speex/libspeex/lbr_48k_tables.c

Index: lbr_48k_tables.c
===================================================================
/* Copyright (C) 2002 Jean-Marc Valin 
   File: lbr_48k_tables.c

   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   are met:
   
   - Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
   
   - Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
   
   - Neither the name of the Xiph.org Foundation nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.
   
   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

<p>#ifdef EPIC_48K

igned char gain_cdbk_ulbr[192] = {
-31, -48, -30, 
-19, -10, -18, 
-33, -22, -45, 
-5, -56, -43, 
-30, -56, -3, 
-59, -17, -52, 
-41, -60, -58, 
-64, -47, -22, 
-30, -31, -31, 
-29, -14, -31, 
-22, -37, -58, 
-31, -44, 13, 
-37, 0, 1, 
-46, -55, -35, 
-56, -14, -53, 
-8, 1, -36, 
-29, -15, -27, 
-29, -39, -28, 
-43, -5, 3, 
-51, -27, -54, 
10, -46, -36, 
3, -3, -42, 
-27, 16, -22, 
-34, -52, 13, 
-31, -21, -28, 
-34, -45, -40, 
-20, -48, 4, 
-40, -27, 16, 
-6, 11, -44, 
-35, 12, -5, 
19, -33, -37, 
-29, 18, -32, 
-29, -23, -19, 
16, -47, -28, 
-34, -30, 17, 
-20, 2, -26, 
-38, -40, -36, 
15, -14, -40, 
-39, 14, -9, 
-15, 25, -39, 
-26, 19, -32, 
-39, 17, -14, 
10, -36, -26, 
14, -13, -40, 
-29, -21, -12, 
-8, 19, -39, 
-36, -18, 15, 
-32, -38, -38, 
-19, 4, -23, 
-38, -7, 11, 
9, -10, -39, 
-37, 24, -19, 
-34, -5, -8, 
-20, 23, -41, 
-4, 17, -31, 
-17, -26, -26, 
-24, 28, -36, 
-7, 15, -39, 
-42, 16, -11, 
-29, 14, -6, 
-36, 28, -27, 
-21, 5, -26, 
11, -9, -39, 
-38, -7, 13, 
};

<p>signed char exc_12_32_table[384] = {
34, 55, 9, 55, 4, 44, -2, 25, 4, -6, 13, -22, 
20, 26, -13, -56, -37, 18, 5, 28, 4, 10, 6, -7, 
37, -24, -31, 22, 12, -6, -4, -7, 2, 0, -3, -2, 
-16, -13, -1, 9, -2, 4, 6, 5, -3, 3, 8, -1, 
-1, -6, -2, -1, 8, 24, 19, 33, -73, -53, 6, -18, 
14, 7, 11, 8, -33, -94, -5, 7, 0, 44, 1, 19, 
-9, -7, -34, -16, 8, 2, 5, 0, 3, 1, -2, 3, 
-22, 6, -2, 12, 16, 30, 39, 25, 25, 2, 10, -2, 
-1, -40, -6, -51, -5, -48, -9, -33, -14, -1, -24, 15, 
104, 39, 12, -9, -20, -12, -30, -10, -31, -7, -30, -8, 
-71, -53, -4, -11, 9, -10, 7, -10, 10, -1, 11, 8, 
24, 14, 6, -3, 10, 8, 8, 11, -6, 11, 0, -2, 
-6, -2, 1, -1, -3, 8, -41, 27, 57, -7, 11, -16, 
-61, 50, 10, -10, 4, -13, 14, -7, 1, 5, -4, 4, 
0, 2, -1, -2, -1, 1, 1, 0, -1, -1, -2, -3, 
-3, -15, 69, 60, 10, -10, -10, -29, -21, -7, -16, 2, 
24, -32, 24, -18, -14, -2, -11, 11, -6, 10, 1, 3, 
24, -10, 14, 18, -13, 17, -16, 4, -3, -21, -3, -11, 
-19, 12, -14, 26, 20, -9, 24, -15, 18, 1, -32, -2, 
-1, 8, -3, 4, 11, -47, 7, 46, -4, -10, -10, -2, 
-24, 29, -33, 6, -20, -3, 0, -12, 5, -30, 8, -13, 
28, 9, 5, -11, 0, -14, -13, -22, -12, -8, -4, 1, 
-6, 28, 45, -18, -31, -5, 1, 2, 1, 5, 0, -3, 
-19, -10, 10, 27, 8, -16, -28, -9, 2, -5, 8, -1, 
100, -49, 4, -43, 25, -7, 1, 9, -13, 13, -18, 13, 
-1, -1, 0, 2, -2, -8, 9, -46, -7, 70, 23, 7, 
-103, 20, 8, 42, -5, 21, -4, 4, 1, -8, 16, -8, 
3, 3, 8, 4, 7, -3, -3, -4, 9, 6, 2, 13, 
6, 3, -15, 11, -43, 31, 40, -13, 12, -21, -2, -3, 
-10, -9, 16, -35, 31, -3, -12, 8, -34, 7, 12, 22, 
-3, -4, -7, -12, 24, 53, -19, -43, 4, -3, -4, 6, 
-18, -30, -58, -17, -11, 17, 23, 34, 30, 28, 28, 15, 
};

<p>signed char cdbk_lsp_vlbr[5120]={
23, 34, 108, 100, 102, 82, 69, 48, 52, 25,
0, -37, -55, -78, -111, -79, 58, 57, 45, 32,
27, -9, -12, -14, -41, -29, -17, -41, 44, 35,
-24, -68, -72, 61, 100, 73, 100, 80, 70, 37,
12, -5, 22, 11, -10, -40, -33, -17, 19, 12,
-20, -57, -94, -92, 56, 71, 48, 31, 22, -5,
41, 28, 6, -6, -12, -39, -18, -16, -30, -23,
65, 54, 41, 28, 23, 9, 26, 18, 22, 6,
17, -16, -33, -54, -87, -79, 8, -8, 44, 35,
-20, -62, -78, 22, 78, 47, 44, 33, 26, 14,
8, 1, 45, 47, 72, 68, 55, 31, 36, 17,
-27, -68, -86, -65, -10, 23, 8, -22, -31, 25,
-4, -38, -55, -68, -96, -118, -39, 30, 28, 31,
-21, -66, -47, 99, 91, 68, 78, 56, 64, 36,
33, 22, 13, -13, -36, -22, 44, 37, 54, 33,
-31, -76, -106, -100, -5, 21, 7, -17, 13, 48,
-26, -65, -84, -84, -46, 67, 97, 66, 58, 31,
-20, -52, -32, -20, 3, 16, 27, 40, 54, 29,
-6, -35, -56, -64, -8, -31, -36, 21, 26, -3,
32, 23, 1, -23, -19, -44, -45, -7, 10, -10,
-24, -55, 2, 67, 72, 85, 90, 74, 77, 45,
-21, -58, -45, -49, 16, 34, 13, -15, -16, 16,
8, -31, -34, -61, -83, 10, 24, 8, 56, 25,
-8, -49, -74, -95, -123, -77, 6, 40, 46, 42,
-21, -60, -59, -34, -12, 27, 8, -19, -48, -17,
-25, -66, -78, -73, -81, -16, 14, 0, -2, 33,
78, 79, 69, 49, 44, 32, 50, 44, 46, 22,
24, 9, -4, -18, -37, -56, 22, 34, 22, 11,
-19, -59, -85, -41, 46, 72, 60, 33, 29, -3,
-21, -66, -70, 65, 92, 57, 61, 41, 40, 23,
-4, -41, -60, -72, -102, -106, 4, 56, 57, 31,
-5, -48, -62, -91, -109, 1, 76, 54, 72, 39,
-21, -61, -86, -46, -34, -39, 42, 25, 15, 12,
5, -16, -36, -56, 5, 18, 11, 13, 52, 23,
12, -6, 30, 40, 59, 40, 27, 8, 19, 6,
25, 8, -9, -19, -25, -53, -40, -38, -46, -4,
-17, -59, -83, 2, 58, 29, 18, -2, -17, -5,
-35, -80, -111, -117, -41, -9, 14, 23, 36, 56,
48, 67, 93, 71, 77, 91, 110, 95, 83, 47,
-25, -62, -97, -93, 76, 96, 73, 52, 61, 28,
-9, -55, -46, 49, 33, 8, 1, -25, 28, 23,
-10, -47, -60, -45, -62, -58, 56, 57, 48, 28,
34, 12, -9, 0, 34, 4, 6, 11, 3, -18,
21, -9, -16, -13, -39, -41, 14, -8, 33, 28,
-7, -49, -61, 15, 34, 3, 2, -13, -28, -17,
-14, -50, -46, -65, -76, -13, -10, -29, -30, 22,
-28, -68, -97, -98, -8, 38, 36, 26, 25, 15,
6, -33, -9, 1, -28, -11, -19, -24, 61, 36,
-15, -60, -19, 81, 58, 52, 42, 28, 66, 36,
-15, -52, -71, -15, 11, -13, 38, 28, 11, -4,
34, 1, -9, -27, -57, -19, 36, 6, 14, 0,
-1, -43, -14, 16, -12, -5, -14, -29, -33, -32,
-13, -57, -75, -100, -111, 1, 2, 13, 48, 33,
12, 16, 100, 85, 69, 49, 40, 29, 46, 23,
-4, -26, -41, -44, -7, -26, -39, -27, 18, 0,
-4, -47, -51, 17, 7, -19, 13, -10, -16, 9,
-24, -63, -93, -53, 25, 14, 73, 51, 35, 8,
-34, -77, -106, -83, -51, -47, 2, 12, 41, 53,
-13, -47, -67, -44, 42, 20, 24, 33, 21, -3,
11, -15, -29, -51, -79, -88, 22, 56, 43, 20,
11, -22, -37, -1, 61, 40, 28, 24, 22, -6,
-3, -33, -50, -66, -93, -100, -16, -16, 3, 41,
-18, -58, -82, -5, 95, 78, 56, 39, 30, 1,
-6, -47, -28, -26, -36, 49, 55, 51, 71, 35,
-6, -50, -42, -4, -32, -1, -1, -18, 67, 40,
-23, -63, -56, -48, -32, 0, -14, -43, -46, 25,
-17, -61, -63, 13, -1, 28, 23, 10, 67, 36,
45, 92, 124, 111, 108, 86, 77, 56, 57, 28,
50, 35, 13, 3, -2, -32, 3, 14, 6, -8,
12, -17, -24, -42, -67, -23, 67, 49, 64, 38,
-21, -60, -90, -45, 32, 6, 7, -3, -15, 9,
-16, -62, -73, 50, 46, 18, 7, -13, 63, 39,
19, -16, -19, 20, 5, -15, 16, -9, 5, 8,
-11, -46, -42, -39, -55, -68, -62, -27, -18, 23,
-23, -61, -67, -71, -29, 44, 32, 10, -15, -12,
-6, -45, -43, -40, -67, -22, 42, 19, 61, 38,
9, -13, -38, -37, 40, 30, 15, 9, 11, -16,
0, -18, -29, -34, -17, -44, -50, -3, 47, 15,
-3, -46, -26, 20, -10, 16, 20, -2, 43, 18,
-23, -46, 46, 91, 99, 100, 99, 79, 72, 42,
-1, -44, -33, -36, -56, 22, 17, 4, 71, 37,
0, -38, -49, 0, -1, -30, -21, -35, -44, -6,
-32, -74, -101, -98, -14, -21, -23, 7, 26, 45,
8, -28, -44, -63, -96, -84, 34, 21, 13, 23,
10, -24, -38, -17, -29, -53, -16, -41, -14, 23,
-19, -61, -76, -12, 97, 99, 79, 60, 59, 25,
5, -11, -26, -54, -26, -8, -13, 3, 25, 4,
17, 16, 4, -24, -1, 42, 60, 63, 70, 37,
10, -27, -22, -43, -62, -7, -16, 10, 75, 40,
-26, -64, -96, -106, -3, 73, 73, 46, 55, 29,
-2, -45, -43, 45, 46, 17, 37, 10, 30, 32,
21, -2, -18, -28, -47, -63, -38, -56, -3, 27,
-17, -48, -9, 9, 3, 28, 50, 58, 73, 44,
8, -14, -32, -56, -81, -106, -35, 41, 53, 26,
1, -38, -51, -66, -100, -61, 32, 17, 66, 42,
17, 5, -6, -21, -26, -52, -36, 23, 56, 22,
6, -20, -31, -22, -19, -48, 16, 38, 22, -2,
-25, -67, -93, -51, 82, 62, 71, 69, 63, 35,
-12, -51, -71, -60, -76, -91, -14, 41, 35, 20,
-16, -31, 22, 32, 55, 80, 98, 91, 85, 49,
-21, -63, -92, -6, 57, 27, 36, 11, 60, 39,
-7, -45, -67, -81, -114, -110, 0, 24, 23, 45,
-18, -55, -61, -56, -60, -64, -32, -2, 58, 36,
-3, -33, -51, -24, 19, -10, -19, 4, 14, -15,
-19, -59, -81, -12, 7, -12, 36, 16, 48, 36,
17, -13, -32, -49, -78, -95, -1, -3, -10, 25,
15, 5, 41, 59, 108, 101, 103, 81, 70, 35,
-14, -52, -37, 15, 93, 83, 66, 50, 47, 15,
-3, -31, -49, -52, -9, -31, -10, 37, 62, 27,
-15, -56, -82, -17, 75, 56, 36, 22, 7, -16,
-24, -63, -93, -84, 25, 94, 98, 65, 60, 31,
-2, -45, -39, -61, -61, 48, 35, 32, 54, 18,
-19, -51, -45, -57, -28, -8, 10, 14, 38, 26,
-2, -46, -38, 45, 26, 22, 48, 21, 63, 40,
-22, -61, -73, -75, -67, -31, 13, 18, 51, 34,
-12, -2, -1, -17, -3, -27, -3, 6, -1, -15,
-16, -59, -78, 10, 36, 9, 4, -18, 33, 22,
-25, -62, -97, -107, 39, 87, 69, 46, 42, 12,
11, -7, -30, -36, 19, 2, -10, -7, -4, -24,
11, -8, 25, 28, 28, 5, -4, -10, 5, -2,
-10, -48, -37, -17, -38, -9, -2, -19, -30, -22,
-23, -61, -79, -81, -2, 15, -4, 17, 20, 2,
25, -14, -3, -10, -38, 1, 14, -14, -9, -27,
2, -18, -38, -36, -11, -39, -36, -28, -36, -11,
32, 59, 127, 124, 127, 108, 91, 68, 64, 34,
3, -32, -37, -10, -25, -46, 12, 1, -17, -24,
-29, -69, -102, -100, 2, -7, 11, 14, 1, 31,
30, -6, -4, -16, -44, -5, 3, -9, 66, 40,
-9, -45, -52, -5, 37, 19, 26, 6, 51, 32,
-31, -73, -96, -45, -25, -37, -15, -16, 32, 39,
3, -15, 18, 21, 28, 33, 58, 58, 69, 42,
-31, -73, -99, -99, -48, 14, 21, 5, 2, 39,
7, -35, -20, 29, 2, -8, -8, -28, 38, 26,
-5, -39, -64, -36, 15, -15, -11, -21, -23, 5,
-8, -51, -56, 15, -1, -14, -8, -31, 36, 22,
-8, -53, -68, -98, -101, 42, 49, 38, 41, 12,
10, -27, -22, 4, -23, -21, 30, -1, 22, 26,
-13, -56, -42, 31, 9, -1, -10, -2, 22, -4,
15, 8, 56, 57, 45, 55, 57, 46, 72, 44,
-7, -53, -26, 53, 21, 17, 0, 0, 74, 41,
3, -18, -2, 0, 19, 17, 42, 36, 47, 26,
24, -7, -23, -34, -62, -60, 6, -22, 18, 25,
-11, -42, -46, -61, -83, -99, -67, -11, 28, 39,
30, -3, -10, -1, -24, -30, -1, -28, 15, 18,
19, -15, -10, -6, -35, -26, 33, 10, 56, 39,
-13, -53, -82, -42, 53, 37, 18, 10, -3, -21,
-21, -60, -89, -46, 89, 94, 71, 46, 42, 9,
-2, -34, -44, -46, -64, -84, -1, 37, 16, 0,
-17, -51, -65, -64, -7, -17, -29, -11, 52, 27,
22, -15, -16, -39, -55, 26, 36, 21, 62, 28,
-2, -26, -38, -49, -55, -80, -75, 8, 20, 9,
-6, -47, -61, -82, -103, -17, -15, -25, 53, 40,
-8, -47, -66, -18, 56, 43, 25, 29, 39, 3,
-27, -66, -86, -69, -50, -59, -34, -1, 19, 42,
3, -20, 2, 21, 72, 57, 52, 36, 31, 7,
-12, -49, -61, -13, -1, -33, 5, 37, 26, 2,
-27, -69, -92, -62, 2, 43, 88, 67, 64, 36,
0, -40, -4, -6, -20, 43, 33, 25, 50, 20,
14, -20, -30, -44, -73, -37, -24, -47, 26, 20,
31, 53, 111, 118, 127, 126, 121, 99, 85, 46,
-14, -45, -51, -39, 24, 5, -6, 17, 46, 14,
-4, -43, -45, -70, -63, 8, 14, 58, 78, 39,
-8, -47, -66, -84, -114, -55, 10, -8, 32, 40,
28, 22, 42, 26, 8, -21, -16, -6, 22, 10,
24, 10, 34, 31, 35, 31, 46, 39, 59, 36,
-4, -43, -62, -10, 20, -14, 2, 14, -6, -19,
-21, -62, -89, -22, 62, 33, 30, 16, 15, 15,
0, -22, -31, -45, -58, -80, -66, 13, 68, 34,
-16, -45, -6, 7, -6, -17, -14, -15, 2, 2,
10, -5, -22, -38, -40, -70, -60, -15, -23, 0,
22, -11, -22, -39, -67, -25, 30, 5, 58, 37,
-21, -47, 6, 43, 37, 45, 65, 66, 73, 43,
2, -25, -40, -53, -72, -94, -35, 24, 9, 8,
-3, 0, -3, -9, 4, -23, -10, 20, 43, 14,
-2, -41, -60, -9, 57, 32, 17, 16, 6, -19,
1, -31, -36, -36, -54, -68, -77, -75, 21, 37,
-19, -32, 79, 90, 92, 81, 67, 47, 52, 28,
-6, -36, -57, -62, 27, 40, 21, 11, 9, -19,
-10, -47, -49, -59, -74, -18, -14, -30, 25, 18,
-23, -69, -82, 60, 66, 40, 75, 54, 65, 38,
-19, -57, -92, -68, 66, 58, 34, 18, 1, -16,
-29, -68, -99, -88, -37, -38, 13, 8, 5, 40,
-22, -63, -75, 14, 15, 7, 75, 58, 59, 34,
-23, -62, -82, -39, -31, -53, -27, 5, -3, 20,
13, -26, -20, 22, 2, -3, 35, 13, 54, 39,
32, 5, -13, -22, -45, -58, -1, -20, -19, 7,
30, 46, 70, 55, 89, 88, 91, 67, 56, 28,
-13, -50, -63, -25, -28, -50, -23, -32, -34, 19,
-13, -54, -65, -9, -20, -37, 29, 6, 11, 25,
0, -40, -55, -78, -107, -25, 47, 20, 34, 16,
-20, -58, -96, -103, 38, 43, 27, 30, 15, -1,
-16, -49, -52, -66, -80, -57, -44, -39, 6, 38,
0, -38, 5, 13, -8, 23, 24, 1, 7, -9,
-18, -56, -64, -7, 38, 13, 11, 32, 28, 0,
14, -3, -20, -17, 4, -26, -34, -8, 19, -9,
-23, -60, -83, -38, -8, -32, 11, 19, -1, -5,
-5, -47, -12, 56, 38, 22, 18, -8, -5, -8,
18, -4, -24, -16, 27, 2, -6, 5, 25, -5,
13, 0, -19, -35, -23, -45, -59, -30, 19, 3,
19, -12, -23, 1, -7, -35, -14, -32, -23, 4,
-23, -64, -67, -22, -27, -5, -5, -20, 20, 5,
20, 11, 83, 92, 85, 89, 69, 53, 80, 48,
15, -2, -21, -29, -18, -48, -52, -12, -11, -21,
-6, -38, -55, -68, -9, 33, 22, 19, 25, -1,
-8, -46, -49, -67, -64, 16, 8, -6, 32, 15,
3, -25, -46, -46, 39, 50, 34, 21, 46, 14,
8, -33, -37, -68, -82, 31, 34, 13, 19, -6,
33, 0, 5, -7, -32, 2, 22, -3, 35, 17,
-23, -62, -91, -64, 6, 3, 36, 26, 7, -3,
-12, -54, -60, 26, 46, 16, 30, 22, 8, -4,
-23, -61, -40, 31, 58, 73, 88, 77, 74, 41,
-2, -42, -49, 13, 5, -15, 22, -4, 26, 27,
-13, -54, -39, 18, 2, -8, -12, 34, 56, 23,
-20, -31, 27, 23, 24, 28, 39, 33, 47, 27,
36, 17, -4, -20, -30, -61, -8, 20, 0, -15,
-10, -51, -72, -82, -111, -73, 34, 25, 19, 38,
-10, -45, -63, -55, -46, -75, -45, 34, 34, 12,
6, -18, 29, 26, 7, -9, 0, 5, 38, 22,
-7, -52, -16, 69, 43, 26, 23, 2, 51, 34,
-12, -51, -59, -78, -88, 15, 20, 0, -14, 12,
-3, -36, -59, -45, 60, 49, 28, 20, 16, -13,
-28, -70, -90, 9, 67, 48, 90, 77, 70, 38,
-10, -39, -58, -54, 15, -12, 3, 35, 27, -3,
12, -1, 28, 29, 55, 53, 80, 65, 51, 23,
-17, -61, -39, 74, 56, 43, 75, 51, 58, 36,
-30, -71, -93, -43, -29, -26, 4, -19, -14, 37,
3, -13, -31, -38, 11, -5, -22, -11, 43, 14,
-25, -65, -80, -79, -71, 3, 37, 32, 20, 9,
-20, -60, -77, -26, 18, 43, 44, 24, 22, -3,
-4, -42, -22, -19, -45, -32, -35, -39, -46, 1,
-25, -59, -27, -10, -7, -4, 7, 13, 25, 12,
8, -25, -32, -47, -74, -32, 27, 6, 25, 7,
41, 40, 62, 64, 64, 50, 54, 42, 49, 25,
-21, -63, -88, -21, 16, -3, -4, -26, 57, 38,
8, -25, -34, 2, -8, -28, 2, -22, 12, 23,
-19, -49, 10, 71, 84, 71, 66, 48, 42, 22,
-20, -58, -89, -57, 62, 44, 33, 36, 25, -1,
-22, -55, -27, 1, 43, 37, 46, 50, 51, 26,
1, -38, -46, 22, 34, 4, 20, -2, 3, 9,
-4, -42, -49, -75, -89, -24, -25, 19, 71, 39,
5, -28, -45, -43, -63, -75, -17, -38, 14, 30,
-4, -36, -62, -59, -29, -43, -4, -16, 11, 23,
-19, -57, -82, -39, 26, 2, -2, 20, 11, -10,
-28, -68, -92, -70, 9, -1, -15, -30, 11, 31,
1, -22, -41, -49, -30, -58, -48, 8, 4, -9,
38, 41, 108, 115, 96, 98, 103, 84, 86, 51,
15, 1, 58, 46, 26, 6, 16, 18, 41, 24,
4, -34, -14, -27, -42, 20, 18, 2, 23, 1,
-22, -59, -83, -70, -22, -42, -26, 29, 29, 15,
-14, -34, 11, -1, -21, -35, -3, 1, 29, 16,
-16, -57, -78, -7, 17, -13, 8, -13, -6, 22,
-22, -32, -21, -20, 20, -4, 10, 13, 12, -4,
8, -30, -30, -46, -71, -4, 3, -11, 4, -11,
16, 5, -15, -21, 3, -23, -25, -19, -28, -32,
-28, -68, -98, -101, -34, 19, 71, 52, 49, 30,
-18, -57, -82, -56, -56, -66, 15, 12, 1, 29,
-21, -62, -76, -27, -33, -38, 18, 30, 54, 32,
3, -36, -10, -17, -34, -3, -8, 32, 63, 27,
1, -30, -44, -20, -13, -49, -25, 3, -14, -18,
-26, -68, -80, -46, -28, 17, 42, 37, 58, 34,
30, 26, 57, 55, 49, 25, 16, 3, 24, 11,
35, 35, 67, 57, 60, 82, 114, 103, 93, 55,
18, -8, -23, -32, -53, -68, 15, 11, -6, -7,
-2, -43, -29, 0, -28, -5, -5, -15, 25, -1,
4, -13, -35, -45, 14, -6, -2, 19, 16, -9,
-30, -72, -93, -93, -73, -10, -15, 6, 30, 45,
-23, -58, -50, -55, -74, -60, -23, 0, 6, 21,
-4, -40, -63, -24, 7, -19, 4, -18, 27, 28,
-12, 1, 88, 76, 74, 88, 93, 90, 80, 44,
-13, -59, -43, 52, 27, 21, 15, 12, 42, 11,
22, -14, -17, -33, -57, -4, 5, -18, 40, 18,
-3, -23, -43, -44, 8, -16, -14, -4, -20, -29,
35, 45, 75, 82, 111, 117, 125, 105, 89, 51,
-3, -38, -57, -30, 79, 71, 48, 33, 33, 0,
-17, -62, -57, 66, 67, 35, 29, 5, 22, 17,
3, -31, -34, -21, -44, -49, 42, 23, 24, 26,
-23, -62, -74, -49, -30, -30, -37, -50, 9, 35,
-17, -57, -71, -81, -45, 61, 58, 37, 31, 9,
3, -7, 28, 14, -2, 0, 40, 41, 58, 33,
-11, -51, -74, -17, 40, 12, 8, 13, -4, -22,
-16, -46, -31, -35, -49, -49, -26, -9, -7, -7,
17, -9, -24, -41, -68, -73, 38, 33, 19, 16,
-15, -50, -47, -16, -24, -21, 59, 56, 53, 30,
-14, -54, -57, 2, -17, -33, -34, -21, 4, -4,
-23, -62, -93, -72, 48, 31, 21, 6, 3, 17,
-18, -63, -79, 44, 68, 36, 45, 20, 57, 37,
-29, -72, -99, -111, -86, -31, 7, 25, 39, 55,
-14, -49, -53, -63, -80, -31, 24, 13, 1, -1,
-9, -45, -55, -27, -31, -63, -23, 25, 13, -5,
-20, -61, -80, 7, 44, 16, 54, 40, 32, 17,
24, 7, -8, -43, -62, -54, -11, 7, 35, 27,
-12, -55, -59, -48, -69, -4, -1, -12, 68, 39,
-12, -31, 52, 63, 53, 34, 29, 22, 36, 19,
-26, -66, -97, -79, 50, 41, 40, 48, 54, 28,
-2, -37, -41, -2, -11, -30, 29, 16, 4, -2,
40, 49, 56, 37, 39, 40, 64, 59, 67, 39,
11, -5, 20, 14, 25, 16, 25, 22, 37, 17,
-3, -43, -46, -10, -35, -38, -35, -39, 67, 43,
-7, -47, -33, -39, -60, -12, -18, 11, 43, 11,
-25, -65, -91, -76, -91, -81, 0, 13, 34, 50,
-9, -50, -52, 17, 0, -4, 43, 18, 63, 42,
-8, -15, 15, 41, 56, 35, 51, 45, 51, 29,
0, -14, -24, -36, -43, -70, -39, 27, 33, 5,
-25, -62, -81, -66, -12, -26, -16, -4, -13, 21,
-29, -68, -60, -24, -3, 11, 18, 19, 30, 20,
1, -35, -42, -30, -57, -51, 13, -17, 3, 22,
-8, -27, -12, -2, -7, -21, 36, 41, 34, 12,
-17, -56, -62, -72, -73, -17, -26, 9, 16, 13,
11, -21, -37, -3, 16, -17, 1, -3, -18, -19,
15, -20, -19, -22, -49, -30, -7, -29, 3, -2,
17, -4, 11, 6, 51, 40, 36, 34, 48, 22,
-19, -55, -29, 37, 68, 49, 45, 33, 42, 23,
7, -30, -22, 3, -22, -36, -36, -54, 20, 22,
20, 2, -15, -39, -59, -85, -10, 37, 21, 2,
-15, -54, -77, -54, 74, 70, 48, 32, 51, 20,
-25, -64, -70, -75, -52, 17, 6, -20, -30, 26,
-13, -55, -15, 39, 16, 42, 30, 33, 62, 28,
-21, -56, -30, -35, 6, 13, -4, -29, 33, 27,
-17, -55, -75, -31, 3, -28, -26, 16, 18, -4,
-13, -44, -60, -52, -9, -36, -38, 1, -9, -9,
-12, -50, -77, -70, 43, 47, 28, 13, 43, 16,
-13, -57, -80, -104, -113, -30, 43, 45, 52, 39,
3, -28, -42, -37, -58, -67, 23, 4, 38, 33,
-21, -64, -74, -22, 43, 83, 81, 56, 62, 32,
34, 26, 23, 9, 14, 17, 26, 16, 37, 19,
-5, -48, -49, -75, -65, 9, -6, 41, 45, 15,
32, 30, 63, 83, 90, 91, 100, 84, 85, 52,
-19, -54, -68, -71, 11, 30, 13, 1, 63, 37,
44, 76, 99, 87, 117, 113, 103, 77, 64, 32,
-16, -45, -12, 30, 27, 15, 57, 49, 42, 22,
9, -15, -31, -28, -36, -61, -13, -18, -33, -5,
-12, -55, -8, 82, 64, 47, 42, 21, 27, 9,
-15, -56, -74, -12, -19, -28, 7, -16, 53, 38,
-7, -45, -64, -55, -74, -80, 35, 45, 24, 15,
-25, -48, -34, -42, -6, -27, -9, 9, 13, -7,
-25, -65, -84, -35, 30, 14, 24, 39, 48, 28,
-22, -62, -86, -51, 64, 104, 94, 61, 62, 31,
16, -15, -25, -28, -55, -56, -10, -23, 52, 36,
10, -10, -22, -46, -71, -92, -45, -13, 16, 26,
-22, -65, -84, 17, 85, 55, 66, 48, 55, 31,
-1, -38, -33, -25, -49, -15, 18, -10, 41, 30,
-3, -24, -47, -60, -30, -46, -17, -13, -27, 1,
-7, -41, -61, -54, -50, -78, -28, 5, -2, 20,
17, -12, -27, -4, 8, -27, -5, 23, 14, -12,
-36, -81, -111, -75, -17, -9, 9, 9, 39, 49,
-13, -59, -54, 68, 51, 32, 35, 14, 64, 38,
-11, -44, -69, -57, 11, -11, -5, 3, -16, -15,
34, 36, 41, 16, -8, -24, 11, 23, 48, 28,
-17, -42, 8, 17, 45, 69, 71, 55, 49, 23,
3, -30, -46, -64, -95, -109, 2, 39, 19, 19,
25, -13, -7, 16, -11, -5, 8, -11, 52, 33,
-8, -37, -57, -60, 13, 7, -14, -4, 20, -7,
7, -31, 9, 44, 20, 22, 29, 10, 52, 31,
3, -22, -36, -53, -80, -77, -35, -41, 54, 41,
-21, -59, -87, -83, 12, 69, 57, 36, 32, 2,
6, -14, -34, -42, -4, -32, -27, 10, 4, -20,
-11, -56, -59, 25, 8, -5, -9, -26, 68, 43,
22, 13, 40, 39, 73, 81, 95, 88, 82, 45,
-18, -62, -79, 28, 60, 28, 29, 3, 23, 25,
6, -31, -39, -55, -85, -32, 7, -17, 48, 30,
7, -24, -42, -8, 39, 10, 7, 11, 1, -20,
-1, -36, -26, -30, -48, 2, 46, 26, 35, 14,
-17, -57, -56, -10, -4, 26, 22, 6, -4, -16,
-18, -55, -59, -67, -86, -50, 3, 29, 29, 16,
-25, -61, -33, 2, 26, 25, 23, 10, 24, 16,
26, 15, -8, -20, 6, -21, -16, 3, 0, -22,
13, -17, -26, -12, -31, -48, 15, -3, 1, 14,
4, -27, -33, -21, -29, -53, -52, -64, -42, 22,
-11, -41, -42, -40, -42, -64, 0, 48, 50, 19,
-13, -47, -42, -56, -50, 10, 3, -9, -30, -16,
-4, -47, -12, 14, -13, 21, 13, 6, 73, 40,
-15, -50, -63, -41, -31, -55, -60, -13, 28, 15,
-6, -50, -56, -81, -95, 30, 29, 21, 71, 35,
-14, -58, -65, 37, 40, 9, 18, -10, -4, 20,
31, 33, 79, 106, 119, 103, 100, 77, 64, 33,
14, 7, 56, 81, 97, 85, 85, 61, 45, 20,
-24, -66, -74, -51, -17, 16, 5, -21, 22, 26,
-1, -25, -38, -24, -2, -35, -26, 21, 34, 1,
20, 15, 75, 59, 39, 26, 48, 43, 50, 29,
26, 1, -15, -4, -9, -38, 9, 2, -9, -8,
20, 14, 19, 13, 2, -16, 24, 25, 19, 3,
-8, -41, -58, -78, -109, -106, -27, 9, 53, 46,
17, 5, -13, -25, -24, -54, -20, 2, -21, -25,
-11, -50, -48, 19, 10, -7, 46, 26, 24, 17,
-28, -68, -69, -50, -49, -33, -7, 10, 20, 21,
4, -36, -21, 38, 19, 1, 25, -3, 20, 22,
-18, -58, -87, -44, 82, 73, 49, 31, 19, -7,
-21, -61, -78, -44, -58, -66, -9, -23, 10, 40,
-25, -66, -76, -33, -33, 6, 16, -6, -21, 5,
-27, -69, -77, 5, -2, -7, 6, 9, 24, 6,
1, -41, -41, -58, -79, 25, 69, 43, 68, 36,
-28, -67, -85, -71, -34, 0, 14, 12, -2, 4,
-2, -33, -55, -37, 37, 25, 6, 6, 29, -4,
-8, -25, -11, -9, 40, 23, 17, 25, 37, 12,
-21, -27, 52, 60, 47, 58, 76, 70, 69, 38,
23, 15, 22, -8, -32, -50, -10, 3, 31, 21,
-10, -44, -67, -61, -29, -54, 8, 39, 21, 4,
31, 18, 30, 36, 46, 28, 50, 42, 35, 13,
-21, -57, -24, -16, -15, 14, 3, -25, -17, 20,
23, 6, 24, 35, 90, 72, 64, 55, 55, 23,
7, -28, -42, -19, -36, -50, -15, -40, 29, 28,
-21, -59, -66, -59, -6, 85, 83, 53, 54, 26,
2, -20, -42, -52, -27, -49, 5, 9, -9, -8,
-18, -56, -84, -72, 24, 51, 32, 20, 13, -10,
-13, -53, -64, -39, -63, -40, 24, 0, 34, 29,
0, -31, -45, -63, -90, -53, 3, -18, -9, 24,
-13, -57, -71, 27, 19, -3, 25, -3, 45, 35,
12, -9, -26, -40, -51, -78, -24, 11, -9, -6,
-12, -49, -45, -33, -50, -48, -46, -52, 2, 25,
-14, -56, -84, -108, -122, -50, 4, 22, 42, 53,
-6, -44, -54, -28, -41, -61, 19, 25, 6, 1,
-32, -75, -95, -38, -1, -15, 7, 14, 23, 23,
11, 12, 37, 30, 38, 51, 80, 80, 82, 47,
-19, -56, -69, -82, -98, -64, -29, 2, 28, 42,
-18, -49, 3, 34, 41, 39, 32, 18, 21, 7,
-8, 23, 39, 30, 30, 27, 41, 36, 44, 23,
-16, -49, -69, -46, 1, -27, 41, 48, 35, 15,
6, -32, -36, 5, -17, -30, 2, -16, 51, 35,
-23, -64, -91, -21, 71, 44, 52, 44, 40, 21,
-22, -55, -40, -20, 62, 52, 38, 29, 27, 5,
-27, -69, -75, -6, -8, 3, -2, -30, -42, 13,
2, -29, -42, -10, 29, 2, 15, 30, 26, 0,
-27, -69, -85, -75, -54, -8, -14, -31, 16, 42,
-2, -44, -54, -75, -101, -6, 4, -3, 32, 13,
7, -3, -22, -43, -14, -27, -24, -11, -14, -12,
-18, -57, -85, -66, 47, 86, 75, 45, 42, 10,
18, 3, 39, 76, 80, 48, 48, 41, 44, 21,
-13, -51, -73, -22, -15, -41, 3, -4, -22, 3,
-10, -50, -63, -9, -23, -42, -6, -30, 11, 28,
15, -11, -29, -39, -57, -71, -23, -40, -33, 20,
-2, -40, -48, -5, -21, -25, 31, 7, 53, 35,
-19, -63, -72, 39, 34, 16, 37, 17, 54, 31,
-18, -49, -28, -27, -40, -29, 4, 4, 19, 11,
-1, -43, -41, 24, 15, -12, -4, -31, -4, 23,
-11, -46, -79, -74, 34, 21, 9, 15, 3, -13,
-16, -51, -56, -55, 8, 62, 50, 30, 43, 14,
-1, -25, -27, -32, -46, -62, -66, -36, 53, 32,
-12, -49, -77, -50, 2, -21, 23, 6, 14, 21,
-5, -47, -58, -77, -105, -14, 30, 9, 73, 44,
-24, -52, -4, 10, 13, 13, 27, 27, 42, 24,
-10, -38, -27, -15, -24, -52, -53, 1, 14, -6,
-17, -45, -13, 2, 19, 53, 83, 79, 76, 43,
-21, -62, -86, -48, 40, 17, 14, -9, 40, 30,
-1, -32, -51, -33, -3, -35, 2, 17, -2, -12,
-21, -60, -85, -70, 33, 73, 58, 37, 67, 36,
-1, -45, -39, 37, 17, 3, 18, -8, 53, 35,
-8, -47, -65, -61, -87, -93, 9, 9, 2, 33,
-13, -55, -56, -19, -29, 14, 17, 6, 55, 28,
5, 1, -7, -23, -26, -56, -39, 14, 11, -13,
-28, -69, -89, -74, -83, -45, 1, 0, 16, 45,
-3, 5, 91, 104, 119, 111, 97, 76, 72, 39,
19, 5, -12, -34, -41, -72, -67, 14, 21, 1,
-17, -49, 15, 27, 13, 6, 2, 12, 27, 10,
-10, -30, 18, 36, 93, 87, 87, 69, 58, 26,
37, 32, 64, 54, 53, 67, 78, 73, 80, 48,
48, 46, 38, 9, -1, 8, 47, 44, 58, 33,
-23, -61, -88, -76, 27, 14, 9, 36, 36, 10,
-24, -66, -88, -97, -55, 20, 19, 16, 52, 31,
4, -16, -1, -8, 2, 0, 15, 13, 29, 14,
-9, -44, -66, -72, 8, 32, 37, 38, 46, 16,
-22, -65, -62, 30, 22, 51, 57, 45, 68, 38,
-4, -42, -53, -33, -54, -53, -4, -18, 62, 40,
-5, -37, -61, -41, 35, 15, -2, -3, -12, -28,
-18, -65, -55, 90, 80, 49, 44, 21, 59, 36,
5, -16, -31, -32, -37, -62, -19, -11, 9, 16,
-22, -60, -67, -51, -61, -35, -5, -18, -27, 24,
-18, -55, -39, -42, -40, 20, 25, 6, 6, 7,
0, -25, -42, -50, -59, -84, -31, -13, -22, 17,
-32, -73, -100, -89, -21, -10, 18, 38, 31, 23,
-15, -54, -57, -13, -18, -41, -32, 17, 50, 21,
-16, -57, -71, -10, -8, -26, -38, -47, 42, 25,
-17, -58, -82, -7, 33, 3, 30, 11, 13, 24,
-23, -61, -97, -83, 82, 81, 57, 39, 31, 2,
26, 32, 104, 86, 62, 55, 77, 70, 74, 43,
-8, -29, -33, -52, -74, -73, -17, 14, 39, 25,
-21, -60, -68, -22, 43, 37, 51, 54, 64, 36,
-5, -30, -50, -52, 22, 7, 10, 13, 0, -20,
-15, -53, -61, -34, -50, -25, 15, 6, 0, -14,
-10, -51, -60, 20, 77, 50, 34, 22, 8, -8,
-8, -45, -52, -59, -76, -35, -43, -49, 47, 40,
41, 44, 53, 40, 41, 30, 38, 31, 46, 24,
19, 3, -15, -26, -16, -45, -13, 24, 18, -5,
-3, -39, -54, -35, -49, -70, 2, -6, -19, 15,
-13, -53, -36, 6, -3, 45, 50, 30, 33, 10,
15, -25, -16, -4, -32, 7, 23, 6, 67, 36,
-21, -58, -87, -71, 10, -12, -16, 19, 10, 0,
9, -15, -6, 25, 31, 7, 30, 28, 20, 2,
2, -28, -42, -50, -67, -75, 12, 12, -4, 8,
-17, -63, -58, 56, 49, 36, 60, 38, 37, 14,
-13, -48, -38, -29, -44, -25, -20, -33, 38, 20,
2, -37, -42, -1, -18, -42, 3, -17, -19, 12,
-20, -60, -73, -7, 12, -13, -22, -38, 4, 10,
-8, -41, -63, -65, 42, 63, 45, 31, 31, 0,
-4, -46, -38, -9, -35, 15, 50, 27, 67, 39,
3, -7, -13, -34, -51, -47, 9, 39, 54, 29,
-29, -71, -89, -52, -39, -6, 3, 2, 38, 28,
-14, -42, -13, -15, -19, 0, 20, 12, 37, 25,
11, -26, -24, -40, -65, -11, -13, -27, 65, 37,
0, -31, -46, -17, -21, -45, 11, -2, 25, 24,
51, 91, 102, 87, 85, 63, 57, 42, 48, 23,
-4, -34, -56, -70, -10, -14, 4, 18, 3, -8,
-23, -59, -39, -44, -42, -14, -10, -23, -4, 17,
-2, 4, 35, 63, 69, 75, 82, 63, 78, 48,
-17, -55, -60, -3, -4, -19, 4, -4, -18, -29,
2, -20, -36, -50, -32, -59, -16, 30, 16, -6,
-12, -47, 24, 68, 45, 46, 41, 32, 65, 37,
-4, -40, -54, -67, -96, -66, -9, -25, 42, 38,
-15, 13, 58, 58, 84, 104, 119, 104, 89, 51,
-15, -24, -9, -24, -27, -50, -7, 28, 29, 6,
-7, -33, -35, -49, -65, -53, -37, -10, 33, 14,
31, 19, 46, 72, 67, 45, 83, 68, 63, 41,
-14, -53, -59, -17, 55, 79, 64, 39, 43, 10,
};

igned char cdbk_lsp2_vlbr[160]={
-20, -30, -24, 17, 7, -13, -21, 61, 56, 16,
12, 1, 10, 77, 32, 3, 7, 3, -25, -31,
-4, 2, -36, -83, 18, 5, -5, 5, 11, 23,
-2, -1, -11, -12, -20, -28, 68, 50, -17, -20,
5, 2, 1, 20, 17, 4, -52, -66, 36, 24,
-4, -10, 7, -15, -32, 80, 37, 8, -13, -29,
33, 37, 28, 15, 8, 14, 35, 18, 50, 36,
-4, -1, 4, -7, 3, 3, -11, -58, -75, 13,
13, 21, 24, -11, -12, -38, -72, 33, 15, -12,
-44, -17, 83, 21, 2, 7, 0, 4, 0, -1,
-25, -42, -51, 33, 20, 15, 30, -13, 9, 32,
6, 2, -8, 7, -38, -77, 6, -13, -7, 32,
48, 57, 32, -12, -10, -4, 2, -15, -29, -29,
2, 10, -9, -16, 79, 44, 7, 12, -5, -18,
-23, -29, -35, -3, -3, -18, -34, -3, -39, -50,
-5, -10, -8, -37, -76, 11, -4, -19, 30, 16,
};

#endif

<p><p>--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'cvs-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the commits mailing list