示例#1
0
        public OggPacket BuildCommentsPacket(Comments comments)
        {
            var buffer = new EncodeBuffer();

            PackComment(buffer, comments);

            var bytes = buffer.GetBytes();

            return(new OggPacket(bytes, false, 0, 1));
        }
示例#2
0
        public OggPacket BuildBooksPacket(VorbisInfo info)
        {
            var buffer = new EncodeBuffer(4096);

            PackBooks(buffer, info);

            var bytes = buffer.GetBytes();

            return(new OggPacket(bytes, false, 0, 2));
        }
示例#3
0
        public OggPacket BuildInfoPacket(VorbisInfo info)
        {
            var buffer = new EncodeBuffer();

            PackInfo(buffer, info);

            var bytes = buffer.GetBytes();

            return(new OggPacket(bytes, false, 0, 0));
        }
示例#4
0
        private byte[] PerformAnalysis(
            float[][] pcm,
            int pcmEnd)
        {
            var channels = pcm.Length;

            var gmdct       = new float[channels][];
            var work        = new int[channels][];
            var floorPosts  = new int[channels][][];
            var localAmpMax = new float[channels];

            var blockType = 0;

            if (_currentWindow != 0)
            {
                if ((_lastWindow != 0) && (_nextWindow != 0))
                {
                    blockType = 1;
                }
            }
            else
            {
                if (!MarkEnvelope())
                {
                    blockType = 1;
                }
            }

            var mapping   = _vorbisInfo.CodecSetup.MapParams[_currentWindow];
            var psyLookup = _lookups.PsyLookup[blockType + (_currentWindow != 0 ? 2 : 0)];

            var buffer = new EncodeBuffer();

            TransformPcm(pcm, pcmEnd, work, gmdct, localAmpMax);
            ApplyMasks(pcm, pcmEnd, mapping, floorPosts, gmdct, psyLookup, localAmpMax);
            Encode(pcm, pcmEnd, buffer, mapping, work, floorPosts, psyLookup, gmdct);

            return(buffer.GetBytes());
        }