Example #1
0
        public VorbisPacket(ByteArray aByteArray, VorbisHeader aVorbisHeader, Byte[] aFirstSegmentArray)
        {
            oggPageHeader = new OggPageHeader(aByteArray);

            sizeSegmentList    = oggPageHeader.GetSegmentSizeList();
            vorbisSegmentArray = new VorbisSegment[sizeSegmentList.Count];

            for (int i = 0; i < sizeSegmentList.Count; i++)
            {
                Byte[] lPacket    = aByteArray.ReadBytes(sizeSegmentList[i]);
                Byte[] lPacketAll = new Byte[sizeSegmentList[i] + aFirstSegmentArray.Length];

                for (int j = 0; j < aFirstSegmentArray.Length; j++)
                {
                    lPacketAll[j] = aFirstSegmentArray[j];
                }

                for (int j = 0; j < sizeSegmentList[i]; j++)
                {
                    lPacketAll[aFirstSegmentArray.Length + j] = lPacket[j];
                }

                MemoryStream    lMemoryStream = new MemoryStream(lPacketAll);
                ByteArrayLittle lByteArray    = new ByteArrayLittle(lMemoryStream);

                vorbisSegmentArray[i] = new VorbisSegment(lByteArray, aVorbisHeader);

                aFirstSegmentArray = new Byte[0];
            }

            nextSegmentArray = aByteArray.ReadBytes(oggPageHeader.GetNextSegmentSize());
        }
Example #2
0
 public OggPage(OggPage src)
 {
     Header   = src.Header;
     Size     = src.Size;
     Segments = new byte[src.Segments.Length][];
     for (int pos = 0; pos < Segments.Length; pos++)
     {
         Segments[pos] = new byte[src.Segments[pos].Length];
         Array.Copy(src.Segments[pos], Segments[pos], Segments[pos].Length);
     }
 }
Example #3
0
        private OggPage GetOggPage(ref int offset)
        {
            OggPageHeader hdr      = new OggPageHeader();
            OggPage       page     = new OggPage();
            int           pageSize = 0;

            ByteArrayToStructure(Audio, offset, ref hdr);

            if (hdr.Header[0] != 'O' || hdr.Header[1] != 'g' || hdr.Header[2] != 'g' || hdr.Header[3] != 'S')
            {
                return(null);
            }

            page.Header = hdr;
            pageSize   += Marshal.SizeOf(hdr);

            page.Segments = new byte[0][];

            /* where will the segment data start */
            int segmentDataPos = pageSize + hdr.PageSegments;
            /* position in page segment table */
            int pageSegTablePos = 0;
            /* logical number of the segment */
            int pageSegNum = 0;

            while (pageSegTablePos < hdr.PageSegments)
            {
                int lenEntry = Audio[offset + pageSize];
                int len      = lenEntry;
                pageSize++;
                pageSegTablePos++;

                while (lenEntry == 0xFF)
                {
                    lenEntry = Audio[offset + pageSize];
                    len     += lenEntry;
                    pageSize++;
                    pageSegTablePos++;
                }
                Array.Resize(ref page.Segments, pageSegNum + 1);
                page.Segments[pageSegNum] = new byte[len];
                Array.Copy(Audio, offset + segmentDataPos, page.Segments[pageSegNum], 0, len);
                segmentDataPos += page.Segments[pageSegNum].Length;
                pageSegNum++;
            }

            page.Size = segmentDataPos;
            offset   += segmentDataPos;

            return(page);
        }