Exemple #1
0
		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;
		}
Exemple #2
0
        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;
                }
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
		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;
				}
			}
		}