Exemplo n.º 1
0
    public static ProcessingState Create(VorbisInfo info)
    {
        if (info == null)
        {
            throw new ArgumentNullException(nameof(info));
        }

        var codecSetup = info.CodecSetup;

        // initialize the storage vectors. blocksize[1] is small for encode, but the correct size for decode
        var pcmStorage = codecSetup.BlockSizes[1];

        var pcm = new float[info.Channels][];

        for (var i = 0; i < pcm.Length; i++)
        {
            pcm[i] = new float[pcmStorage];
        }

        // Vorbis I uses only window type 0
        var window = new int[2];

        window[0] = Encoding.Log(codecSetup.BlockSizes[0]) - 7;
        window[1] = Encoding.Log(codecSetup.BlockSizes[1]) - 7;

        var centerWindow = codecSetup.BlockSizes[1] / 2;

        var lookups = LookupCollection.Create(info);

        return(new ProcessingState(
                   info,
                   lookups,
                   pcm,
                   window,
                   centerWindow));
    }