public bool Read(Id3Tag tag, Stream mp3Stream) { //Check wether the file contains an Id3v1 tag-------------------------------- mp3Stream.Seek( -128 , SeekOrigin.End); byte[] b = new byte[3]; mp3Stream.Read( b, 0, 3 ); mp3Stream.Seek(0, SeekOrigin.Begin); string tagS = Encoding.ASCII.GetString(b); if(tagS != "TAG") return false; mp3Stream.Seek( - 128 + 3, SeekOrigin.End ); //Parse the tag -)------------------------------------------------ tag.AddTitle(Read(mp3Stream, 30)); tag.AddArtist(Read(mp3Stream, 30)); tag.AddAlbum(Read(mp3Stream, 30)); //------------------------------------------------ tag.AddYear(Read(mp3Stream, 4)); tag.AddComment(Read(mp3Stream, 30)); //string trackNumber; mp3Stream.Seek(- 2, SeekOrigin.Current); b = new byte[2]; mp3Stream.Read(b, 0, 2); if (b[0] == 0) tag.AddTrack(b[1].ToString()); byte genreByte = (byte) mp3Stream.ReadByte(); mp3Stream.Seek(0, SeekOrigin.Begin); tag.AddGenre(TagGenres.Get(genreByte)); return true; }
private void AddId3Frame(Id3Tag tag, string field, byte[] b, byte version) { if (version == Id3Tag.ID3V22) { field = ConvertFromId3v22(field); } if (field == "" || field.Length < 4) { return; } //FIXME: We do not support non-text frames yet. if (field != "COMM" && (field[0] != 'T' || field[1] == 'X')) { return; } if (field == "COMM") { TextId3Frame f = new CommId3Frame(b, version); tag.AddComment(f.Content); } else if (field[0] == 'T' && field[1] != 'X') { /* * FIXME: Add support for: they have a special format * if (field.equalsIgnoreCase("TDRC")) { * return new TimeId3Frame(field, data, version); * } * return new TextId3Frame(field, data, version); */ TextId3Frame f = new TextId3Frame(field, b, version); switch (field) { case "TCON": // genre tag.AddGenre(TranslateGenre(f.Content)); break; case "TRCK": // track number string num, count; Utils.SplitTrackNumber(f.Content, out num, out count); if (num != null) { tag.AddTrack(num); } if (count != null) { tag.AddTrackCount(count); } break; default: tag.Add(field, f.Content); break; } } }
public bool Read(Id3Tag tag, Stream mp3Stream) { //Check wether the file contains an Id3v1 tag-------------------------------- mp3Stream.Seek(-128, SeekOrigin.End); byte[] b = new byte[3]; mp3Stream.Read(b, 0, 3); mp3Stream.Seek(0, SeekOrigin.Begin); string tagS = Encoding.ASCII.GetString(b); if (tagS != "TAG") { return(false); } mp3Stream.Seek(-128 + 3, SeekOrigin.End); //Parse the tag -)------------------------------------------------ tag.AddTitle(Read(mp3Stream, 30)); tag.AddArtist(Read(mp3Stream, 30)); tag.AddAlbum(Read(mp3Stream, 30)); //------------------------------------------------ tag.AddYear(Read(mp3Stream, 4)); tag.AddComment(Read(mp3Stream, 30)); //string trackNumber; mp3Stream.Seek(-2, SeekOrigin.Current); b = new byte[2]; mp3Stream.Read(b, 0, 2); if (b[0] == 0) { tag.AddTrack(b[1].ToString()); } byte genreByte = (byte)mp3Stream.ReadByte(); mp3Stream.Seek(0, SeekOrigin.Begin); tag.AddGenre(TagGenres.Get(genreByte)); return(true); }
private void AddId3Frame(Id3Tag tag, string field, byte[] b, byte version) { if(version == Id3Tag.ID3V22) field = ConvertFromId3v22(field); if (field == "" || field.Length < 4) return; //FIXME: We do not support non-text frames yet. if (field != "COMM" && (field[0] != 'T' || field[1] == 'X')) return; if (field == "COMM") { TextId3Frame f = new CommId3Frame(b, version); tag.AddComment(f.Content); } else if (field[0] == 'T' && field[1] != 'X') { /* FIXME: Add support for: they have a special format if (field.equalsIgnoreCase("TDRC")) { return new TimeId3Frame(field, data, version); } return new TextId3Frame(field, data, version); */ TextId3Frame f = new TextId3Frame(field, b, version); switch (field) { case "TCON": // genre tag.AddGenre(TranslateGenre(f.Content)); break; case "TRCK": // track number string num, count; Utils.SplitTrackNumber(f.Content, out num, out count); if (num != null) tag.AddTrack(num); if (count != null) tag.AddTrackCount(count); break; default: tag.Add(field, f.Content); break; } } }