예제 #1
0
        /// <summary>
        /// Create binary data from unsynchronised lyrics/comment frame
        /// </summary>
        /// <returns>binary frame data</returns>
        public override byte[] Make()
        {
            MemoryStream buffer = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(buffer);

            writer.Write((byte)_textEncoding);
            //TODO: Validate langage field
            byte[] language = TextBuilder.WriteASCII(_language);
            if (language.Length != 3)
            {
                writer.Write(new byte[] { (byte)'e', (byte)'n', (byte)'g' });
            }
            else
            {
                writer.Write(language, 0, 3);
            }
            writer.Write(TextBuilder.WriteText(_contents, _textEncoding));
            writer.Write(TextBuilder.WriteTextEnd(_text, _textEncoding));
            return(buffer.ToArray());
        }
예제 #2
0
        /// <summary>
        /// Parse binary data unsynchronised lyrics/comment frame.
        /// </summary>
        /// <param name="frame">binary frame data</param>
        public override void Parse(byte[] frame)
        {
            int index = 0;

            _textEncoding = (TextCode)frame[index];
            index++;

            //TODO: Invalid tag, may be legacy.
            if (frame.Length - index < 3)
            {
                return;
            }

            _language = UTF8Encoding.UTF8.GetString(frame, index, 3);
            index    += 3; // Three language bytes

            if (frame.Length - index < 1)
            {
                return;
            }

            _contents = TextBuilder.ReadText(frame, ref index, _textEncoding);
            _text     = TextBuilder.ReadTextEnd(frame, index, _textEncoding);
        }