static void lsp_to_curve(float[] curve,
			   int[] map, int n, int ln,
			   float[] lsp, int m,
			   float amp, float ampoffset){
    int i;
    float wdel=M_PI/ln;
    for(i=0;i<m;i++)lsp[i]=Lookup.coslook(lsp[i]);
    int m2=(m/2)*2;

    i=0;
    while(i<n){
      int k=map[i];
      float p=.7071067812f;
      float q=.7071067812f;
      float w=Lookup.coslook(wdel*k);
      int ftmp=0;
      int c=m>>>1;

      for(int j=0;j<m2;j+=2){
        q*=lsp[j]-w;
	p*=lsp[j+1]-w;
      }

      if((m&1)!=0){
        /* odd order filter; slightly assymetric */
        /* the last coefficient */
        q*=lsp[m-1]-w;
        q*=q;
        p*=p*(1.f-w*w);
      }
      else{
        /* even order filter; still symmetric */
        q*=q*(1.f+w);
        p*=p*(1.f-w);
      }

      //  q=frexp(p+q,&qexp);
      q=p+q;
      int hx=Float.floatToIntBits(q);
      int ix=0x7fffffff&hx;
      int qexp=0;

      if(ix>=0x7f800000||(ix==0)){
        // 0,inf,nan
      }
      else{
        if(ix<0x00800000){            // subnormal
   	  q*=3.3554432000e+07;        // 0x4c000000
          hx=Float.floatToIntBits(q);
          ix=0x7fffffff&hx;
	  qexp=-25;
        }
        qexp += ((ix>>>23)-126);
        hx=(hx&0x807fffff)|0x3f000000;
        q=Float.intBitsToFloat(hx);
      }

      q=Lookup.fromdBlook(amp*
			  Lookup.invsqlook(q)*
			  Lookup.invsq2explook(qexp+m)-ampoffset);

      do{curve[i++]*=q;}
//    do{curve[i++]=q;}
      while(i<n&&map[i]==k);

    }
  }