private void ReadExtendedDescription(Stream stream, Tag tag) { BinaryReader reader = new BinaryReader(stream); ushort field_count = reader.ReadUInt16(); for(int i = 0; i < field_count; i++) { ushort field_length = reader.ReadUInt16(); string property_name = ReadUtf16String(reader, field_length); ushort property_type = reader.ReadUInt16(); string property_value = String.Empty; switch(property_type) { case 0: property_value = ReadUtf16String(reader, reader.ReadUInt16()); break; case 1: stream.Seek(reader.ReadUInt16(), SeekOrigin.Current); break; case 2: reader.ReadUInt16(); property_value = (reader.ReadUInt32() == 1).ToString(); break; case 3: property_value = reader.ReadUInt32().ToString(); break; case 4: property_value = reader.ReadUInt64().ToString(); break; case 5: property_value = reader.ReadUInt16().ToString(); break; } switch(property_name) { case "WM/AlbumTitle": tag.SetAlbum(property_value); break; case "WM/AlbumArtist": tag.SetArtist(property_value); break; case "WM/TrackNumber": tag.SetTrack(property_value); break; case "WM/Year": tag.SetYear(property_value); break; case "WM/Genre": tag.SetGenre(property_value); break; } } }