csvorbis.Mdct.init C# (CSharp) Method

init() private method

private init ( int n ) : void
n int
return void
        internal void init(int n)
        {
            bitrev=new int[n/4];
            trig=new float[n+n/4];

            int n2=(int)((uint)n >> 1);
            log2n=(int)Math.Round(Math.Log(n)/Math.Log(2));
            this.n=n;

            int AE=0;
            int AO=1;
            int BE=AE+n/2;
            int BO=BE+1;
            int CE=BE+n/2;
            int CO=CE+1;
            // trig lookups...
            for(int i=0;i<n/4;i++)
            {
                trig[AE+i*2]=(float)Math.Cos((Math.PI/n)*(4*i));
                trig[AO+i*2]=(float)-Math.Sin((Math.PI/n)*(4*i));
                trig[BE+i*2]=(float)Math.Cos((Math.PI/(2*n))*(2*i+1));
                trig[BO+i*2]=(float)Math.Sin((Math.PI/(2*n))*(2*i+1));
            }
            for(int i=0;i<n/8;i++)
            {
                trig[CE+i*2]=(float)Math.Cos((Math.PI/n)*(4*i+2));
                trig[CO+i*2]=(float)-Math.Sin((Math.PI/n)*(4*i+2));
            }

            {
            int mask=(1<<(log2n-1))-1;
            int msb=1<<(log2n-2);
            for(int i=0;i<n/8;i++)
            {
                int acc=0;
                for(int j=0; (((uint)msb) >> j) != 0; j++)
                    if(((((uint)msb>>j))&i) != 0)
                        acc |= 1 << j;
                bitrev[i*2]=((~acc)&mask);
                //	bitrev[i*2]=((~acc)&mask)-1;
                bitrev[i*2+1]=acc;
            }
            }
            scale=4.0f/n;
        }