private LookupCollection(
     EnvelopeLookup envelopeLookup,
     List <MdctLookup> transformLookup,
     PsyGlobalLookup psyGlobalLookup,
     List <PsyLookup> psyLookup,
     List <DrftLookup> fftLookup,
     List <FloorLookup> floorLookup,
     List <ResidueLookup> residueLookup)
 {
     EnvelopeLookup  = envelopeLookup;
     TransformLookup = transformLookup;
     PsyGlobalLookup = psyGlobalLookup;
     PsyLookup       = psyLookup;
     FftLookup       = fftLookup;
     FloorLookup     = floorLookup;
     ResidueLookup   = residueLookup;
 }
 private LookupCollection(
     EnvelopeLookup envelopeLookup,
     MdctLookup[] transformLookup,
     PsyGlobalLookup psyGlobalLookup,
     PsyLookup[] psyLookup,
     DrftLookup[] fftLookup,
     FloorLookup[] floorLookup,
     ResidueLookup[] residueLookup)
 {
     EnvelopeLookup  = envelopeLookup;
     TransformLookup = transformLookup;
     PsyGlobalLookup = psyGlobalLookup;
     PsyLookup       = psyLookup;
     FftLookup       = fftLookup;
     FloorLookup     = floorLookup;
     ResidueLookup   = residueLookup;
 }
        public static LookupCollection Create(VorbisInfo info)
        {
            var codecSetup = info.CodecSetup;

            var psyGlobal = new PsyGlobalLookup(codecSetup.PsyGlobalParam);
            var envelope  = new EnvelopeLookup(codecSetup.PsyGlobalParam, info);

            // MDCT is tranform 0
            var transform = new MdctLookup[2];

            transform[0] = new MdctLookup(codecSetup.BlockSizes[0]);
            transform[1] = new MdctLookup(codecSetup.BlockSizes[1]);

            // analysis always needs an fft
            var fftLookup = new DrftLookup[2];

            fftLookup[0] = new DrftLookup(codecSetup.BlockSizes[0]);
            fftLookup[1] = new DrftLookup(codecSetup.BlockSizes[1]);

            // finish the codebooks
            if (codecSetup.FullBooks == null)
            {
                codecSetup.FullBooks = new CodeBook[codecSetup.BookParams.Count];
                for (var i = 0; i < codecSetup.BookParams.Count; i++)
                {
                    codecSetup.FullBooks[i] = CodeBook.InitEncode(codecSetup.BookParams[i]);
                }
            }

            var psyLookup = new PsyLookup[codecSetup.PsyParams.Count];

            for (var i = 0; i < psyLookup.Length; i++)
            {
                psyLookup[i] = new PsyLookup(
                    codecSetup.PsyParams[i],
                    codecSetup.PsyGlobalParam,
                    codecSetup.BlockSizes[codecSetup.PsyParams[i].BlockFlag] / 2,
                    info.SampleRate);
            }

            // initialize all the backend lookups
            var floor = new FloorLookup[codecSetup.FloorParams.Count];

            for (var i = 0; i < floor.Length; i++)
            {
                floor[i] = new FloorLookup(codecSetup.FloorParams[i]);
            }

            var residue = new ResidueLookup[codecSetup.ResidueParams.Count];

            for (var i = 0; i < residue.Length; i++)
            {
                residue[i] = new ResidueLookup(codecSetup.ResidueParams[i], new List <CodeBook>(codecSetup.FullBooks));
            }

            return(new LookupCollection(
                       envelope,
                       new List <MdctLookup>(transform),
                       psyGlobal,
                       new List <PsyLookup>(psyLookup),
                       new List <DrftLookup>(fftLookup),
                       new List <FloorLookup>(floor),
                       new List <ResidueLookup>(residue)));
        }