Example #1
0
 public static void Read(TagLibMetaDataSource source, IList <MetaDataItem> metaData, File file)
 {
     if (file.TagTypes.HasFlag(TagTypes.Id3v2))
     {
         var tag = GetTag <global::TagLib.Id3v2.Tag>(file, TagTypes.Id3v2);
         if (tag == null)
         {
             return;
         }
         foreach (var frame in tag.GetFrames <global::TagLib.Id3v2.PopularimeterFrame>())
         {
             ReadPopularimeterFrame(source, metaData, file, frame);
         }
     }
     else
     {
         var rating = ReadCustomTag(CommonMetaData.Rating, file);
         if (!string.IsNullOrEmpty(rating))
         {
             source.AddTag(metaData, CommonMetaData.Rating, rating);
         }
         var playCount = ReadCustomTag(CommonMetaData.PlayCount, file);
         if (!string.IsNullOrEmpty(playCount))
         {
             source.AddTag(metaData, CommonMetaData.Rating, playCount);
         }
     }
 }
Example #2
0
        public static void Read(TagLibMetaDataSource source, IList <MetaDataItem> metaData, File file)
        {
            var isCompilation = default(bool);

            if (TagManager.HasTag(file, TagTypes.Id3v2))
            {
                var tag = TagManager.GetTag <global::TagLib.Id3v2.Tag>(file, TagTypes.Id3v2);
                if (tag != null)
                {
                    isCompilation = tag.IsCompilation;
                }
            }
            else if (TagManager.HasTag(file, TagTypes.Apple))
            {
                var tag = TagManager.GetTag <global::TagLib.Mpeg4.AppleTag>(file, TagTypes.Apple);
                if (tag != null)
                {
                    isCompilation = tag.IsCompilation;
                }
            }
            else if (TagManager.HasTag(file, TagTypes.Xiph))
            {
                var tag = TagManager.GetTag <global::TagLib.Ogg.XiphComment>(file, TagTypes.Xiph);
                if (tag != null)
                {
                    isCompilation = tag.IsCompilation;
                }
            }

            //Check MB release type, it's innocuous so don't bother respecting READ_MUSICBRAINZ_TAGS.
            if (string.Equals(file.Tag.MusicBrainzReleaseType, MusicBrainzReleaseType.Compilation, StringComparison.OrdinalIgnoreCase))
            {
                isCompilation = true;
            }

            if (isCompilation)
            {
                source.AddTag(metaData, CommonMetaData.IsCompilation, bool.TrueString);
                //TODO: CustomMetaData.VariousArtists should go away but scripts use it, let's keep it updated for now.
                source.AddTag(metaData, CustomMetaData.VariousArtists, bool.TrueString);
            }
        }
Example #3
0
        public static void Read(TagLibMetaDataSource source, IList <MetaDataItem> metaData, File file)
        {
            var tag = file.Tag;

            if (tag.ReplayGainAlbumPeak != 0 && !double.IsNaN(tag.ReplayGainAlbumPeak) && !double.IsInfinity(tag.ReplayGainAlbumPeak))
            {
                source.AddTag(metaData, CommonMetaData.ReplayGainAlbumPeak, tag.ReplayGainAlbumPeak.ToString());
            }
            if (tag.ReplayGainAlbumGain != 0 && !double.IsNaN(tag.ReplayGainAlbumGain) && !double.IsInfinity(tag.ReplayGainAlbumGain))
            {
                source.AddTag(metaData, CommonMetaData.ReplayGainAlbumGain, tag.ReplayGainAlbumGain.ToString());
            }
            if (tag.ReplayGainTrackPeak != 0 && !double.IsNaN(tag.ReplayGainTrackPeak) && !double.IsInfinity(tag.ReplayGainTrackPeak))
            {
                source.AddTag(metaData, CommonMetaData.ReplayGainTrackPeak, tag.ReplayGainTrackPeak.ToString());
            }
            if (tag.ReplayGainTrackGain != 0 && !double.IsNaN(tag.ReplayGainTrackGain) && !double.IsInfinity(tag.ReplayGainTrackGain))
            {
                source.AddTag(metaData, CommonMetaData.ReplayGainTrackGain, tag.ReplayGainTrackGain.ToString());
            }
        }
Example #4
0
            private static void ReadPopularimeterFrame(TagLibMetaDataSource source, IList <MetaDataItem> metaData, File file, global::TagLib.Id3v2.PopularimeterFrame frame)
            {
                const byte RATING_1 = 1;
                const byte RATING_2 = 64;
                const byte RATING_3 = 128;
                const byte RATING_4 = 196;
                const byte RATING_5 = 255;

                if (frame.Rating != 0)
                {
                    var rating = 0;
                    switch (frame.Rating)
                    {
                    case RATING_1:
                        rating = 1;
                        break;

                    case RATING_2:
                        rating = 2;
                        break;

                    case RATING_3:
                        rating = 3;
                        break;

                    case RATING_4:
                        rating = 4;
                        break;

                    case RATING_5:
                        rating = 5;
                        break;
                    }
                    source.AddTag(metaData, CommonMetaData.Rating, Convert.ToString(rating));
                }
                if (frame.PlayCount != 0)
                {
                    source.AddTag(metaData, CommonMetaData.PlayCount, Convert.ToString(frame.PlayCount));
                }
            }
Example #5
0
        public static void Read(TagLibMetaDataSource source, IList <MetaDataItem> metaData, File file)
        {
            var result = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            //If it's an Id3v2 tag then try to read the popularimeter frame.
            //It can contain a rating and a play counter.
            if (file.TagTypes.HasFlag(TagTypes.Id3v2))
            {
                var tag = TagManager.GetTag <global::TagLib.Id3v2.Tag>(file, TagTypes.Id3v2);
                if (tag == null)
                {
                    return;
                }
                foreach (var frame in tag.GetFrames <global::TagLib.Id3v2.PopularimeterFrame>())
                {
                    ReadPopularimeterFrame(frame, result);
                }
            }
            //If we didn't find a popularimeter frame then attempt to read the rating from a custom tag.
            if (!result.ContainsKey(CommonStatistics.Rating))
            {
                var rating = TagManager.ReadCustomTag(CommonStatistics.Rating, file);
                if (!string.IsNullOrEmpty(rating))
                {
                    result.Add(CommonStatistics.Rating, Convert.ToString(GetRatingStars(rating)));
                }
                else
                {
                    result.Add(CommonStatistics.Rating, string.Empty);
                }
            }
            //If we didn't find a popularimeter frame then attempt to read the play count from a custom tag.
            if (!result.ContainsKey(CommonStatistics.PlayCount))
            {
                var playCount = TagManager.ReadCustomTag(CommonStatistics.PlayCount, file);
                if (!string.IsNullOrEmpty(playCount))
                {
                    result.Add(CommonStatistics.PlayCount, playCount);
                }
                else
                {
                    result.Add(CommonStatistics.PlayCount, "0");
                }
            }
            //Popularimeter frame does not support last played, attempt to read the play count from a custom tag.
            //if (!result.ContainsKey(CommonMetaData.LastPlayed))
            {
                var lastPlayed = TagManager.ReadCustomTag(CommonStatistics.LastPlayed, file);
                if (!string.IsNullOrEmpty(lastPlayed))
                {
                    result.Add(CommonStatistics.LastPlayed, lastPlayed);
                }
                else
                {
                    result.Add(CommonStatistics.LastPlayed, DateTimeHelper.NEVER);
                }
            }
            //Copy our informations back to the meta data collection.
            foreach (var key in result.Keys)
            {
                var value = result[key];
                source.AddTag(metaData, key, value);
            }
        }