示例#1
0
        /// <summary>Creates the specified header.</summary>
        /// <param name="header">The header.</param>
        /// <param name="flags">The flags.</param>
        /// <param name="description">The description.</param>
        /// <param name="type">The type.</param>
        /// <param name="mimeType">Type of the MIME.</param>
        /// <param name="imageData">The image data.</param>
        /// <returns></returns>
        /// <exception cref="NotSupportedException"></exception>
        public static ID3v2APICFrame Create(ID3v2Header header, ID3v2FrameFlags flags, string description, ID3v2PictureType type, string mimeType, byte[] imageData)
        {
            ID3v2EncodingType encoding = ID3v2Encoding.Select(header, description + mimeType);

            // header, encoding[1], mimeType+0, pitureType[1], description+0, data
            byte[] descriptionBytes = ID3v2Encoding.GetBytes(encoding, description, true);
            byte[] mimeTypeBytes    = ID3v2Encoding.GetBytes(encoding, mimeType, true);
            int    contentSize      = descriptionBytes.Length + mimeTypeBytes.Length + 1 + 1 + imageData.Length;
            var    frameHeader      = ID3v2FrameHeader.Create(header, "APIC", flags, contentSize);

            using (var ms = new MemoryStream())
            {
                var writer = new DataWriter(ms);
                writer.Write(frameHeader.Data);
                writer.Write((byte)encoding);
                writer.Write(mimeTypeBytes);
                writer.Write((byte)type);
                writer.Write(descriptionBytes);
                writer.Write(imageData);
                if (frameHeader.HeaderSize + contentSize != ms.Position)
                {
                    throw new Exception();
                }

                return(new ID3v2APICFrame(new ID3v2Frame(header, ms.ToArray())));
            }
        }
示例#2
0
        void Parse()
        {
            var encoding = (ID3v2EncodingType)Content[0];
            var start    = 1 + ID3v2Encoding.Parse(encoding, Content, 1, out description);

            ID3v2Encoding.Parse(0, Content, start, out address);
        }
示例#3
0
        void Parse()
        {
            var encoding = (ID3v2EncodingType)m_Content[0];
            int start    = 1 + ID3v2Encoding.Parse(encoding, m_Content, 1, out m_Description);

            ID3v2Encoding.Parse(0, m_Content, start, out m_Address);
        }
示例#4
0
        void Parse()
        {
            var encoding = (ID3v2EncodingType)Content[0];
            var index    = 1 + ID3v2Encoding.Parse(0, Content, 1, out mimeType);

            pictureType    = (ID3v2PictureType)Content[index++];
            index         += ID3v2Encoding.Parse(encoding, Content, index, out description);
            imageDataStart = index;
        }
示例#5
0
        void Parse()
        {
            var encoding = (ID3v2EncodingType)m_Content[0];
            int index    = 1 + ID3v2Encoding.Parse(0, m_Content, 1, out m_MimeType);

            m_PictureType    = (ID3v2PictureType)m_Content[index++];
            index           += ID3v2Encoding.Parse(encoding, m_Content, index, out m_Description);
            m_ImageDataStart = index;
        }
示例#6
0
        void Parse()
        {
            var encoding = (ID3v2EncodingType)Content[0];

            language = ID3v2Encoding.ISO88591.GetString(Content, 1, 3);
            var len = ID3v2Encoding.Parse(encoding, Content, 4, out description);

            ID3v2Encoding.Parse(encoding, Content, 4 + len, out var text);
            lines = text.SplitNewLine();
        }
示例#7
0
        void Parse()
        {
            var encoding = (ID3v2EncodingType)m_Content[0];

            m_Language = ID3v2Encoding.ISO88591.GetString(m_Content, 1, 3);
            int    start = 4 + ID3v2Encoding.Parse(encoding, m_Content, 4, out m_Descriptor);
            string text;

            ID3v2Encoding.Parse(encoding, m_Content, start, out text);
            m_Lines = text.Split('\n');
        }
示例#8
0
        void Parse()
        {
            var encoding = (ID3v2EncodingType)Content[0];

            language = ID3v2Encoding.ISO88591.GetString(Content, 1, 3);
            var    start = 4 + ID3v2Encoding.Parse(encoding, Content, 4, out descriptor);
            string text;

            ID3v2Encoding.Parse(encoding, Content, start, out text);
            lines = text.Split('\n');
        }
示例#9
0
        void Parse()
        {
            // encoding
            var encoding = (ID3v2EncodingType)Content[0];

            // language
            language = ID3v2Encoding.ISO88591.GetString(Content, 1, 3);

            // timestamp
            bool isTimeStamp;

            {
                var mode = Content[4];
                switch (mode)
                {
                case 0: isTimeStamp = false; break;

                case 1: isTimeStamp = true; break;

                default: throw new NotImplementedException(string.Format("Mode {0} is not implemented!", mode));
                }
            }

            // content type
            contentType = (ContentType)Content[5];

            // read descriptor
            var start = 6;

            start += ID3v2Encoding.Parse(encoding, Content, start, out descriptor);

            // read events
            var l_Events = new List <Event>();

            while (start < Content.Length)
            {
                string text;
                start += ID3v2Encoding.Parse(encoding, Content, start, out text);
                long value = 0;
                for (var i = 0; i < 4; i++)
                {
                    value = (value << 8) | Content[start++];
                }

                l_Events.Add(new Event(text, value, isTimeStamp));
            }
            events = l_Events.ToArray();

            parsed = true;
        }
示例#10
0
        void ParseData()
        {
            int start = 0;

            EncodingType = (ID3v2EncodingType)m_Content[start++];
            start       += ID3v2Encoding.Parse(EncodingType, m_Content, start, out string name);
            start       += ID3v2Encoding.Parse(EncodingType, m_Content, start, out string value);
            if (start != m_Content.Length)
            {
                Trace.WriteLine(string.Format("{0} bytes garbage at end of frame!", m_Content.Length - start));
            }
            Name  = name;
            Value = value;
        }
示例#11
0
        void Parse()
        {
            var encoding = ID3v2Encoding.Get((ID3v2EncodingType)Content[0]);
            var strings  = encoding.GetString(RawData, 1, Content.Length - 1).Split('\0');
            var i        = 0;
            var list     = new List <ID3v2Contributor>();

            while (i < strings.Length)
            {
                var item = default(ID3v2Contributor);
                item.Involvement = strings[i++];
                item.Involvee    = strings[i++];
                list.Add(item);
            }
            this.list = list.ToArray();
        }
示例#12
0
        /// <summary>Creates a new ID3v2TextFrame.</summary>
        /// <param name="header">The header.</param>
        /// <param name="flags">The flags.</param>
        /// <param name="id">The identifier.</param>
        /// <param name="text">The text.</param>
        /// <returns></returns>
        /// <exception cref="NotSupportedException"></exception>
        public static ID3v2TextFrame Create(ID3v2Header header, ID3v2FrameFlags flags, string id, string text)
        {
            var encoding = ID3v2Encoding.Select(header, text);

            // header, encoding[1], name+0
            var textBytes   = ID3v2Encoding.GetBytes(encoding, text, true);
            var contentSize = 1 + textBytes.Length;
            var frameHeader = ID3v2FrameHeader.Create(header, id, flags, contentSize);

            using var ms = new MemoryStream();
            var writer = new DataWriter(ms);

            writer.Write(frameHeader.Data);
            writer.Write((byte)encoding);
            writer.Write(textBytes);
            return(new ID3v2TextFrame(new ID3v2Frame(header, ms.ToArray())));
        }
示例#13
0
        void Parse()
        {
            Encoding encoding = ID3v2Encoding.Get((ID3v2EncodingType)m_Content[0]);

            string[] strings = encoding.GetString(m_Data, 1, m_Content.Length - 1).Split('\0');
            int      i       = 0;
            var      l_List  = new List <ID3v2Contributor>();

            while (i < strings.Length)
            {
                var item = new ID3v2Contributor();
                item.Involvement = strings[i++];
                item.Involvee    = strings[i++];
                l_List.Add(item);
            }
            m_List = l_List.ToArray();
        }
示例#14
0
        /// <summary>Creates a new header.</summary>
        /// <param name="header">The tag header.</param>
        /// <param name="flags">The flags.</param>
        /// <param name="name">The name.</param>
        /// <param name="value">The value.</param>
        /// <returns></returns>
        /// <exception cref="NotSupportedException"></exception>
        public static ID3v2TXXXFrame Create(ID3v2Header header, ID3v2FrameFlags flags, string name, string value)
        {
            var encoding = ID3v2Encoding.Select(header, name + value);

            // header, encoding[1], name+0, value+0
            var nameBytes   = ID3v2Encoding.GetBytes(encoding, name, true);
            var valueBytes  = ID3v2Encoding.GetBytes(encoding, value, true);
            var contentSize = nameBytes.Length + valueBytes.Length + 1;
            var frameHeader = ID3v2FrameHeader.Create(header, "TXXX", flags, contentSize);

            using var ms = new MemoryStream();
            var writer = new DataWriter(ms);

            writer.Write(frameHeader.Data);
            writer.Write((byte)encoding);
            writer.Write(nameBytes);
            writer.Write(valueBytes);
            return(new ID3v2TXXXFrame(new ID3v2Frame(header, ms.ToArray())));
        }
示例#15
0
 void ParseData()
 {
     EncodingType = (ID3v2EncodingType)Content[0];
     ID3v2Encoding.Parse(EncodingType, Content, 1, out var text);
     Text = text;
 }
示例#16
0
 void Parse()
 {
     ID3v2Encoding.Parse(0, m_Content, 0, out m_Address);
 }
示例#17
0
 void Parse() => ID3v2Encoding.Parse(0, Content, 0, out m_Address);
示例#18
0
 void ParseData()
 {
     EncodingType = (ID3v2EncodingType)m_Content[0];
     ID3v2Encoding.Parse(EncodingType, m_Content, 1, out string text);
     Text = text;
 }
示例#19
0
 void Parse() => startIndex = 1 + ID3v2Encoding.Parse(0, Content, 0, out owner);
示例#20
0
 void Parse()
 {
     m_StartIndex = 1 + ID3v2Encoding.Parse(0, m_Content, 0, out m_Owner);
 }