private float[] getComputedWindow() {
      int ix=(blockFlag?4:0)+(previousWindowFlag?2:0)+(nextWindowFlag?1:0);
      float[] w=windows[ix];
      if(w==null) {
         w=new float[n];

         for(int i=0;i<leftN;i++){
	         float x=(float)((i+.5)/leftN*Math.PI/2.);
	         x=(float)Math.sin(x);
	         x*=x;
	         x*=(float)Math.PI/2.;
	         x=(float)Math.sin(x);
	         w[i+leftWindowStart]=x;
	      }

         for(int i=leftWindowEnd; i<rightWindowStart; w[i++]=1.0f);

	      for(int i=0;i<rightN;i++){
	         float x=(float)((rightN-i-.5)/rightN*Math.PI/2.);
	         x=(float)Math.sin(x);
	         x*=x;
	         x*=(float)Math.PI/2.;
	         x=(float)Math.sin(x);
	         w[i+rightWindowStart]=x;
	      }

         windows[ix]=w;
      }
      return w;
   }