Esempio n. 1
0
        private static void PackComment(EncodeBuffer buffer, Comments vorbisComment)
        {
            // Preamble
            buffer.Write(0x03, 8);
            buffer.WriteString(VorbisString);

            // Vendor
            buffer.Write((uint)VendorString.Length, 32);
            buffer.WriteString(VendorString);

            // Comments
            buffer.Write((uint)vorbisComment.UserComments.Count, 32);

            foreach (var comment in vorbisComment.UserComments)
            {
                if (!string.IsNullOrEmpty(comment))
                {
                    buffer.Write((uint)comment.Length, 32);
                    buffer.WriteString(comment);
                }
                else
                {
                    buffer.Write(0, 32);
                }
            }

            buffer.Write(1, 1);
        }
Esempio n. 2
0
        private void PackBooks(EncodeBuffer buffer, VorbisInfo info)
        {
            var codecSetup = info.CodecSetup;

            buffer.Write(0x05, 8);
            buffer.WriteString(VorbisString);

            buffer.Write((uint)(codecSetup.BookParams.Count - 1), 8);
            foreach (var book in codecSetup.BookParams)
            {
                PackStaticBook(buffer, book);
            }

            // times; hook placeholders
            buffer.Write(0, 6);
            buffer.Write(0, 16);

            buffer.Write((uint)(codecSetup.FloorParams.Count - 1), 6);
            foreach (var floor in codecSetup.FloorParams)
            {
                buffer.Write(1, 16); // For now we're only using floor type 1
                PackFloor(buffer, floor);
            }

            buffer.Write((uint)(codecSetup.ResidueParams.Count - 1), 6);
            foreach (var residue in codecSetup.ResidueParams)
            {
                buffer.Write((uint)residue.ResidueType, 16);
                PackResidue(buffer, residue);
            }

            buffer.Write((uint)(codecSetup.MapParams.Count - 1), 6);
            foreach (var mapping in codecSetup.MapParams)
            {
                buffer.Write(0, 16); // Mapping type is always zero
                PackMapping(buffer, info, mapping);
            }

            buffer.Write((uint)(codecSetup.ModeParams.Count - 1), 6);
            for (var i = 0; i < codecSetup.ModeParams.Count; i++)
            {
                PackModes(buffer, codecSetup, i);
            }

            buffer.Write(1, 1);
        }
Esempio n. 3
0
        private static void PackInfo(EncodeBuffer buffer, VorbisInfo info)
        {
            var codecSetup = info.CodecSetup;

            // preamble
            buffer.Write(0x01, 8);
            buffer.WriteString(VorbisString);

            // basic information about the stream
            buffer.Write(0x00, 32);
            buffer.Write((uint)info.Channels, 8);
            buffer.Write((uint)info.SampleRate, 32);

            buffer.Write(0, 32); // Bit rate upper not used
            buffer.Write((uint)info.BitRateNominal, 32);
            buffer.Write(0, 32); // Bit rate lower not used

            buffer.Write((uint)Encoding.Log(codecSetup.BlockSizes[0] - 1), 4);
            buffer.Write((uint)Encoding.Log(codecSetup.BlockSizes[1] - 1), 4);
            buffer.Write(1, 1);
        }