private void ParseData(ref long pos, ref long len, int level, BinaryReader br, DataAtoms dataatom) { byte [] buffer = new byte[4]; pos += br.Read(buffer, 0, 4); long size = BitConverter.ToInt32(new byte [] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0); pos += br.Read(buffer, 0, 4); pos += br.Read(buffer, 0, 4); long type = BitConverter.ToInt32(new byte [] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0); size -= 16; type &= 255; pos += br.Read(buffer, 0, 4); byte [] data = new byte[size]; pos += br.Read(data, 0, (int)size); switch(type) { case 0: int [] intvals = new int[size / 2]; for(int i = 0; i < size / 2; i++) { intvals[i] = BitConverter.ToInt16(new byte[] { data[1 + (i * 2)], data[0 + (i * 2)] }, 0); } switch(dataatom) { case DataAtoms.GNRE: tag.AddGenre(GENRE_MAP[intvals[0]]); break; case DataAtoms.TRKN: tag.AddTrack(Convert.ToString(intvals[1])); break; default: Console.WriteLine("DataAtom: {0}", dataatom); break; } break; case 1: CommonField field = 0; switch(dataatom) { case DataAtoms.GEN: field = CommonField.Genre; break; case DataAtoms.NAM: field = CommonField.Title; break; case DataAtoms.ART: field = CommonField.Artist; break; case DataAtoms.ALB: field = CommonField.Album; break; case DataAtoms.DAY: field = CommonField.Year; break; case DataAtoms.CMT: field = CommonField.Comment; break; } tag.Add(field, Encoding.Default.GetString(data)); break; case 2: // other byte data break; default: // non-standard data break; } }
private void ParseData(ref long pos, ref long len, int level, BinaryReader br, DataAtoms dataatom) { byte [] buffer = new byte[4]; pos += br.Read(buffer, 0, 4); long size = BitConverter.ToInt32(new byte [] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0); pos += br.Read(buffer, 0, 4); pos += br.Read(buffer, 0, 4); long type = BitConverter.ToInt32(new byte [] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0); size -= 16; type &= 255; pos += br.Read(buffer, 0, 4); byte [] data = new byte[size]; pos += br.Read(data, 0, (int)size); switch (type) { case 0: int [] intvals = new int[size / 2]; for (int i = 0; i < size / 2; i++) { intvals[i] = BitConverter.ToInt16(new byte[] { data[1 + (i * 2)], data[0 + (i * 2)] }, 0); } switch (dataatom) { case DataAtoms.GNRE: tag.AddGenre(GENRE_MAP[intvals[0]]); break; case DataAtoms.TRKN: tag.AddTrack(Convert.ToString(intvals[1])); break; default: Console.WriteLine("DataAtom: {0}", dataatom); break; } break; case 1: CommonField field = 0; switch (dataatom) { case DataAtoms.GEN: field = CommonField.Genre; break; case DataAtoms.NAM: field = CommonField.Title; break; case DataAtoms.ART: field = CommonField.Artist; break; case DataAtoms.ALB: field = CommonField.Album; break; case DataAtoms.DAY: field = CommonField.Year; break; case DataAtoms.CMT: field = CommonField.Comment; break; } tag.Add(field, Encoding.Default.GetString(data)); break; case 2: // other byte data break; default: // non-standard data break; } }