private void ReadFramesByHeader(ID3TagObject id3TagObject) { if (_MajorVersion == 2) { id3TagObject.Title = GetFrameDataByHeaderName(TITLE_HEADER_V2, false); id3TagObject.Artist = GetFrameDataByHeaderName(ARTIST_HEADER_V2, false); id3TagObject.Album = GetFrameDataByHeaderName(ALBUM_HEADER_V2, false); id3TagObject.Year = GetFrameDataByHeaderName(YEAR_HEADER_V2, false); string[] tracks = GetFrameDataByHeaderName(TRACK_HEADER_V2, false).Split('/'); if (tracks.Length > 0 && !string.IsNullOrEmpty(tracks[0])) { id3TagObject.Track = Convert.ToInt32(tracks[0]); } if (tracks.Length > 1 && !string.IsNullOrEmpty(tracks[1])) { id3TagObject.TotalTracks = Convert.ToInt32(tracks[1]); } //if (!string.IsNullOrEmpty(GetFrameDataByHeaderName(GENRE_HEADER_V2, false))) id3TagObject.Genre = GetFrameDataByHeaderName(GENRE_HEADER_V2, false); id3TagObject.Comment = GetFrameDataByHeaderName(COMMENT_HEADER_V2, false); } else if (_MajorVersion > 2) { id3TagObject.BeatsPerMinute = GetFrameDataByHeaderName(BPM_HEADER_V34, false); id3TagObject.Length = GetFrameDataByHeaderName(LENGTH_HEADER_V34, false); id3TagObject.Artist = GetFrameDataByHeaderName(ARTIST_HEADER_V34, false); id3TagObject.Album = GetFrameDataByHeaderName(ALBUM_HEADER_V34, false); id3TagObject.Comment = GetFrameDataByHeaderName(COMMENT_HEADER_V34, false); id3TagObject.Composer = GetFrameDataByHeaderName(COMPOSER_HEADER_V34, false); id3TagObject.Copyright = GetFrameDataByHeaderName(COPYRIGHT_HEADER_V34, false); id3TagObject.Language = GetFrameDataByHeaderName(LANGUAGE_HEADER_V34, false); id3TagObject.Textwriter = GetFrameDataByHeaderName(TEXTWRITER_HEADER_V34, false); id3TagObject.Title = GetFrameDataByHeaderName(TITLE_HEADER_V34, false); id3TagObject.Year = GetFrameDataByHeaderName(YEAR_HEADER_V34, false); string[] tracks = GetFrameDataByHeaderName(TRACK_HEADER_V34, true).Split('/'); if (tracks.Length > 0 && !string.IsNullOrEmpty(tracks[0])) { id3TagObject.Track = Convert.ToInt32(tracks[0]); } if (tracks.Length > 1 && !string.IsNullOrEmpty(tracks[1])) { id3TagObject.TotalTracks = Convert.ToInt32(tracks[1]); } if (!string.IsNullOrEmpty(GetFrameDataByHeaderName(GENRE_HEADER_V34, false))) { id3TagObject.Genre = GetFrameDataByHeaderName(GENRE_HEADER_V34, false); } } }
public ID3TagObject Read(string fileName) { ID3TagObject ret = null; if (!File.Exists(fileName)) { return(ret); } using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { //Delcare a buffer to read byte[] id3buffer = new byte[128]; //Read the Last 128 Bytes of the file fs.Seek(id3buffer.Length * -1, SeekOrigin.End); fs.Read(id3buffer, 0, id3buffer.Length); //Read all bytes and convert them to a string string id3string = Encoding.ASCII.GetString(id3buffer); //Check if the ID3v1 Tag exists if (id3string.Substring(_HeaderIndex, _HeaderLength) == "TAG") { ret = new ID3TagObject() { Title = id3string.Substring(_TitleIndex, _TitleLength), Artist = id3string.Substring(_ArtistIndex, _ArtistLength), Album = id3string.Substring(_TitleIndex, _TitleLength), Year = id3string.Substring(_YearIndex, _YearLength), Comment = id3string.Substring(_CommentIndex, _CommentLength), Genre = id3buffer[_GenreIdIndex].ToString() }; if (id3buffer[_ZerobinaryIndex] == 0) { ret.Track = id3buffer[_TrackIndex]; } } else { throw new ID3TagCouldntBeenFoundException("The ID3v1 Tag couldn't been found. Please make sure the file has an ID3v1 Tag"); } } return(ret); }
/// <summary> /// Reads in the given file at the filepath and returns an object to get all the ID3 Content. /// </summary> /// <param name="fileName">Filepath of the file to parse</param> /// <returns>Returns an ID3TagObject to work with.</returns> public ID3TagObject Read(string fileName) { ID3TagObject ret = null; if (!File.Exists(fileName)) { return(ret); } using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { using (BinaryReader binaryReader = new BinaryReader(fs)) { ret = new ID3TagObject() { ID3v2Parser = this, Type = ID3Type.ID3v2 }; ReadHeader(binaryReader); if (_ExtendedHeaderFlag) { ReadExtendedHeader(binaryReader); } ReadFrames(binaryReader); if (_FooterPresentTag) { ReadFooter(binaryReader); } ReadFramesByHeader(ret); } } return(ret); }