/// <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()); }
/// <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); }