Exemplo n.º 1
0
 public int speex_encode_native(object state, spx_word16_t[] inner, SpeexBits bits)
 {
     return (((SpeexMode)state)).enc(state, inner, bits);
 }
Exemplo n.º 2
0
 int speex_decode_native(object state, SpeexBits bits, spx_word16_t[] outer)
 {
     return (((SpeexMode)state)).dec(state, bits, outer);
 }
Exemplo n.º 3
0
public void speex_encode_stereo_int(spx_int16_t[] data, int frame_size, SpeexBits bits)
{
   int i, tmp;
   spx_word32_t e_left=0, e_right=0, e_tot=0;
   spx_word32_t balance, e_ratio;
   spx_word32_t largest, smallest;
   int balance_id;
   
   /* In band marker */
   bits.speex_bits_pack(14, 5);
   /* Stereo marker */
   bits.speex_bits_pack(SPEEX_INBAND_STEREO, 4);

   for (i=0;i<frame_size;i++)
   {
      e_left  += SHR32(MULT16_16(data[2*i],data[2*i]),8);
      e_right += SHR32(MULT16_16(data[2*i+1],data[2*i+1]),8);
      data[i] =  .5*(((float)data[2*i])+data[2*i+1]);
      e_tot   += SHR32(MULT16_16(data[i],data[i]),8);
   }
   if (e_left > e_right)
   {
      speex_bits_pack(bits, 0, 1);
      largest = e_left;
      smallest = e_right;
   } else {
      speex_bits_pack(bits, 1, 1);
      largest = e_right;
      smallest = e_left;
   }

   /* Balance quantization */
   balance=(largest+1.0f)/(smallest+1.0f);
   balance=4*log(balance);
   balance_id=floor(.5+fabs(balance));
   if (balance_id>30)
      balance_id=31;
   
   speex_bits_pack(bits, balance_id, 5);
   
   /* "coherence" quantisation */
   e_ratio = e_tot/(1.0f+e_left+e_right);
   
   tmp=scal_quant(EXTRACT16(e_ratio), e_ratio_quant_bounds, 4);
   /*fprintf (stderr, "%d %d %d %d\n", largest, smallest, balance_id, e_ratio);*/
   speex_bits_pack(bits, tmp, 2);
}
Exemplo n.º 4
0
public int speex_std_stereo_request_handler(SpeexBits bits, object state, object data)
{
   RealSpeexStereoState stereo;
   spx_word16_t sign=1, dexp;
   int tmp;

   stereo = (RealSpeexStereoState)data;
   

   if (bits.speex_bits_unpack_unsigned(1))
      sign=-1;
   dexp = bits.speex_bits_unpack_unsigned(5);
   stereo.balance = exp(sign*.25*dexp);
   tmp = bits.speex_bits_unpack_unsigned(2);
   stereo.e_ratio = e_ratio_quant[tmp];

   return 0;
}
Exemplo n.º 5
0
public void speex_encode_stereo(float[] data, int frame_size, SpeexBits bits)
{
   int i, tmp;
   float e_left=0, e_right=0, e_tot=0;
   float balance, e_ratio;
   for (i=0;i<frame_size;i++)
   {
      e_left  += ((float)data[2*i])*data[2*i];
      e_right += ((float)data[2*i+1])*data[2*i+1];
      data[i] =  .5*(((float)data[2*i])+data[2*i+1]);
      e_tot   += ((float)data[i])*data[i];
   }
   balance=(e_left+1)/(e_right+1);
   e_ratio = e_tot/(1+e_left+e_right);

   /*Quantization*/
   bits.speex_bits_pack(14, 5);
   bits.speex_bits_pack(SPEEX_INBAND_STEREO, 4);
   
   balance=4*log(balance);

   /*Pack sign*/
   if (balance>0)
      bits.speex_bits_pack(0, 1);
   else
      bits.speex_bits_pack(1, 1);
   balance=floor(.5+Math.Abs(balance));
   if (balance>30)
      balance=31;
   
   bits.speex_bits_pack((int)balance, 5);
   
   /* FIXME: this is a hack */
   tmp=scal_quant(e_ratio*Q15_ONE, e_ratio_quant_bounds, 4);
   bits.speex_bits_pack(tmp, 2);
}