/*--------------------------------------------------------------------*/ void hwin_init() { int i, j; double pi; ARRAY36 *win; static int iOnceOnly = 0; if (!iOnceOnly++) { win = hwin_init_addr(); pi = 4.0 * atan(1.0); /* type 0 */ for (i = 0; i < 36; i++) win[0][i] = (float) sin(pi / 36 * (i + 0.5)); /* type 1 */ for (i = 0; i < 18; i++) win[1][i] = (float) sin(pi / 36 * (i + 0.5)); for (i = 18; i < 24; i++) win[1][i] = 1.0F; for (i = 24; i < 30; i++) win[1][i] = (float) sin(pi / 12 * (i + 0.5 - 18)); for (i = 30; i < 36; i++) win[1][i] = 0.0F; /* type 3 */ for (i = 0; i < 6; i++) win[3][i] = 0.0F; for (i = 6; i < 12; i++) win[3][i] = (float) sin(pi / 12 * (i + 0.5 - 6)); for (i = 12; i < 18; i++) win[3][i] = 1.0F; for (i = 18; i < 36; i++) win[3][i] = (float) sin(pi / 36 * (i + 0.5)); /* type 2 */ for (i = 0; i < 12; i++) win[2][i] = (float) sin(pi / 12 * (i + 0.5)); for (i = 12; i < 36; i++) win[2][i] = 0.0F; /*--- invert signs by region to match mdct 18pt --> 36pt mapping */ for (j = 0; j < 4; j++) { if (j == 2) continue; for (i = 9; i < 36; i++) win[j][i] = -win[j][i]; } /*-- invert signs for short blocks --*/ for (i = 3; i < 12; i++) win[2][i] = -win[2][i]; } }
/*--------------------------------------------------------------------*/ static void hwin_init ( ) { int i, j; double pi; ARRAY36 *win; win = hwin_init_addr ( ); pi = 4.0 * atan ( 1.0 ); /* type 0 */ for ( i = 0; i < 36; i++ ) win[0][i] = ( float ) sin ( pi / 36 * ( i + 0.5 ) ); /* type 1*/ for ( i = 0; i < 18; i++ ) win[1][i] = ( float ) sin ( pi / 36 * ( i + 0.5 ) ); for ( i = 18; i < 24; i++ ) win[1][i] = 1.0F; for ( i = 24; i < 30; i++ ) win[1][i] = ( float ) sin ( pi / 12 * ( i + 0.5 - 18 ) ); for ( i = 30; i < 36; i++ ) win[1][i] = 0.0F; /* type 3*/ for ( i = 0; i < 6; i++ ) win[3][i] = 0.0F; for ( i = 6; i < 12; i++ ) win[3][i] = ( float ) sin ( pi / 12 * ( i + 0.5 - 6 ) ); for ( i = 12; i < 18; i++ ) win[3][i] = 1.0F; for ( i = 18; i < 36; i++ ) win[3][i] = ( float ) sin ( pi / 36 * ( i + 0.5 ) ); /* type 2*/ for ( i = 0; i < 12; i++ ) win[2][i] = ( float ) sin ( pi / 12 * ( i + 0.5 ) ); for ( i = 12; i < 36; i++ ) win[2][i] = 0.0F; /*--- invert signs by region to match mdct 18pt --> 36pt mapping */ for ( j = 0; j < 4; j++ ) { if ( j == 2 ) continue; for ( i = 9; i < 36; i++ ) win[j][i] = -win[j][i]; } /*-- invert signs for short blocks --*/ for ( i = 3; i < 12; i++ ) win[2][i] = -win[2][i]; /*--- scale window so mdct(imdct(x)) = x (aprox 32k max) --*/ for ( j = 0; j < 4; j++ ) { if ( j == 2 ) continue; for ( i = 0; i < 36; i++ ) win[j][i] = ( 1.0f / 9.0f ) * win[j][i]; } for ( i = 0; i < 36; i++ ) win[2][i] = ( 1.0f / 3.0f ) * win[2][i]; /*-------- for(j=0;j<4;j++) { if( j == 2 ) continue; for(i=0;i<36;i++ ) win[j][i] = (1.0f/8.0f)*win[j][i]; } for(i=0;i<36;i++ ) win[2][i] = (1.0f/8.0f)*win[2][i]; -----------*/ return; }