printf ("decode ltp: %d %d %d\n", start, end, pitch);
void pitch_unquant_3tap(float exc[],                    /* Excitation */int   start,                    /* Smallest pitch value allowed */int   end,                      /* Largest pitch value allowed */void *par,int   nsf,                      /* Number of samples in subframe */int *pitch_val,float *gain_val,SpeexBits *bits,float *stack,int lost){   int i;   int pitch;   int gain_index;   float gain[3];   float *gain_cdbk;   ltp_params *params;   params = (ltp_params*) par;   gain_cdbk=params->gain_cdbk;   pitch = speex_bits_unpack_unsigned(bits, params->pitch_bits);   printf ("decode ltp: %d %d %d\n", start, end, pitch);   pitch += start;   gain_index = speex_bits_unpack_unsigned(bits, params->gain_bits);   /*printf ("decode pitch: %d %d\n", pitch, gain_index);*/   gain[0] = gain_cdbk[gain_index*12];   gain[1] = gain_cdbk[gain_index*12+1];   gain[2] = gain_cdbk[gain_index*12+2];   if (lost)   {      float gain_sum;      /*Put everything in one tap*/      gain[1]+=gain[0]+gain[2];      gain[0]=gain[2]=0;      gain_sum = fabs(gain[0])+fabs(gain[1])+fabs(gain[2]);      if (gain_sum>.85)      {         float fact = .85/gain_sum;         for (i=0;i<3;i++)            gain[i]*=fact;      }      /*gain[1]=.8;*/   }   *pitch_val = pitch;   /**gain_val = gain[0]+gain[1]+gain[2];*/   gain_val[0]=gain[0];   gain_val[1]=gain[1];   gain_val[2]=gain[2];#ifdef DEBUG   printf ("unquantized pitch: %d %f %f %f\n", pitch, gain[0], gain[1], gain[2]);#endif   for(i=0;i<nsf;i++)      exc[i]=0;   {      float *e[3];      float *tmp2;      tmp2=PUSH(stack, 3*nsf);      e[0]=tmp2;      e[1]=tmp2+nsf;      e[2]=tmp2+2*nsf;            for (i=0;i<3;i++)      {         int j;         int pp=pitch+1-i;         for (j=0;j<nsf;j++)         {            if (j-pp<0)               e[i][j]=exc[j-pp];            else               e[i][j]=exc[j-pp-pitch];         }      }      for (i=0;i<nsf;i++)         exc[i]=gain[0]*e[2][i]+gain[1]*e[1][i]+gain[2]*e[0][i];            POP(stack);   }}