Пример #1
0
        public void RetrieveEmbeddedTags()
        {
            ITrackBasics track = new TrackFile(
                @"C:\Users\cohns\Music\iTunes\iTunes Media\Music\Adele\Rolling In the Deep - Single\01 Rolling In The Deep.mp3");

            Tagger.ReadFileTags(track);

            Tagger tagger = new Tagger();

            tagger.RetrieveTags(track);
            Assert.IsNotNull(track.UniqueID);
            Assert.IsNotNull(track.ArtistURL);
            Assert.AreNotEqual(0, track.Year);
        }
Пример #2
0
        public void PeruseLibrary()
        {
            var controller = new Controller();

            System.Threading.Thread.Sleep(5000);

            var playlist  = controller.LibraryPlaylist;
            var librarian = controller.Librarian;
            var catalog   = librarian.Catalog;
            var tagger    = new Tagger();

            // search the library...

            var extensions = catalog.FindExtensionsByPlaylist(controller.LibraryPlaylist.PersistentID);

            var filepaths =
                from e in Directory.EnumerateFiles(catalog.MusicPath, "*", SearchOption.AllDirectories)
                where extensions.Contains(Path.GetExtension(e))
                select e;

            Logger.WriteLine(String.Format("Found {0} possible tracks to analyze", filepaths.Count()));

            var random       = new Random();
            int maxIndex     = filepaths.Count() - 1;
            int numFound     = 0;
            int numFailed    = 0;
            int numRetrieved = 0;
            int numSimilar   = 0;

#if true
            for (int index = 0; index < maxIndex; index++)
#else
            for (int index = 0; index < Math.Min(20, maxIndex); index++)
#endif
            {
                var trackFile = new TrackFile(filepaths.ElementAt(random.Next(maxIndex)));

                Logger.WriteLine();
                Logger.WriteLine(String.Format("Reading tags from [{0}]", trackFile.Location));

                using (TagLib.File tagFile = TagLib.File.Create(trackFile.Location))
                {
                    if (tagFile != null)
                    {
                        trackFile.Album  = tagFile.Tag.Album;
                        trackFile.Artist = tagFile.Tag.FirstAlbumArtist;
                        trackFile.Title  = tagFile.Tag.Title;
                        Logger.WriteLine(String.Format(" - Tag.Album  = [{0}]", tagFile.Tag.Album));
                        Logger.WriteLine(String.Format(" - Tag.Artist = [{0}]", tagFile.Tag.FirstAlbumArtist));
                        Logger.WriteLine(String.Format(" - Tag.Title  = [{0}]", tagFile.Tag.Title));
                    }
                }

                if (String.IsNullOrEmpty(trackFile.Title) ||
                    (String.IsNullOrEmpty(trackFile.Album) && String.IsNullOrEmpty(trackFile.Artist)))
                {
                    Logger.WriteLine(String.Format(" . Retrieving tags for PUID [{0}]", trackFile.UniqueID));
                    tagger.RetrieveTags(trackFile);
                    numRetrieved++;
                }

                bool found = false;

                // can we find the track by artist/album/title?

                PersistentID pid = catalog.FindTrack(
                    trackFile.Album, trackFile.Artist, trackFile.Title);

                if (found = !pid.IsEmpty)
                {
                    Track track = playlist.GetTrack(pid);

                    if (!track.Artist.Equals(trackFile.Artist))
                    {
                        Logger.WriteLine(String.Format(
                                             " ~ Similar track '{0}', '{1}', '{2}'",
                                             track.Artist, track.Album, track.Title));
                        numSimilar++;
                    }
                    else
                    {
                        Logger.WriteLine(String.Format(
                                             " = Found track '{0}', '{1}', '{2}'",
                                             track.Artist, track.Album, track.Title));
                    }

                    numFound++;
                }

                if (!found)
                {
                    numFailed++;
                    Logger.WriteLine(String.Format(
                                         " x Could not find track '{0}', '{1}', '{2}'",
                                         trackFile.Artist, trackFile.Album, trackFile.Title));
                }
            }

            Logger.WriteLine();
            Logger.WriteLine(String.Format("... {0} found", numFound));
            Logger.WriteLine(String.Format("... {0} not found", numFailed));
            Logger.WriteLine(String.Format("... {0} similar", numSimilar));
            Logger.WriteLine(String.Format("... {0} retrieved", numRetrieved));
        }
Пример #3
0
        public void RunTagger()
        {
            var controller = new Controller();

            System.Threading.Thread.Sleep(5000);

            var playlist  = controller.LibraryPlaylist;
            var librarian = controller.Librarian;
            var catalog   = librarian.Catalog;
            var tagger    = new Tagger();

            // search the library...

            var extensions = catalog.FindExtensionsByPlaylist(controller.LibraryPlaylist.PersistentID);

            var filepaths =
                from e in Directory.EnumerateFiles(catalog.MusicPath, "*", SearchOption.AllDirectories)
                where extensions.Contains(Path.GetExtension(e))
                select e;

            Logger.WriteLine(String.Format("Found {0} possible tracks to analyze", filepaths.Count()));

            var random   = new Random();
            int maxIndex = filepaths.Count() - 1;

            int MaxTagged = 20;

            for (int index = 0, total = 0; (index < maxIndex) && (total < MaxTagged); index++)
            {
                // using the Location, find the track in our library so we can take advantage
                // of iTunes cataloging and tagging information

                var track = playlist.GetTrack(
                    catalog.GetPersistentIDByLocation(filepaths.ElementAt(random.Next(maxIndex))));

                // convert the Track to a TrackFile so we don't actually change our iTunes
                // media files during this unit test

                var trackFile = new TrackFile(track);
                if (String.IsNullOrEmpty(trackFile.Location) || !File.Exists(trackFile.Location))
                {
                    Logger.WriteLine(Logger.Level.Warn, "TEST", String.Format(
                                         "{0} Track location not found: [{1}]", index, trackFile.Location));
                    Logger.WriteLine(String.Format(" ? track.Album  = [{0}]", track.Album));
                    Logger.WriteLine(String.Format(" ? track.Artist = [{0}]", track.Artist));
                    Logger.WriteLine(String.Format(" ? track.Title  = [{0}]", track.Title));
                    Logger.WriteLine(String.Format(" ? track.Year   = [{0}]", track.Year));
                    Logger.WriteLine(String.Format(" ? track.Genre  = [{0}]", track.Genre));
                    continue;
                }

                Logger.WriteLine();
                Logger.WriteLine(String.Format("{0}. Reading tags from [{1}]", index, trackFile.Location));

                using (TagLib.File tagFile = TagLib.File.Create(trackFile.Location))
                {
                    if (tagFile != null)
                    {
                        var tag = tagFile.Tag;
                        trackFile.Album  = tag.Album;
                        trackFile.Artist = tag.FirstAlbumArtist;
                        trackFile.Title  = tag.Title;
                        Logger.WriteLine(String.Format(" - Tag.Album  = [{0}]", tag.Album));
                        Logger.WriteLine(String.Format(" - Tag.Artist = [{0}]", tag.FirstAlbumArtist));
                        Logger.WriteLine(String.Format(" - Tag.Title  = [{0}]", tag.Title));
                        Logger.WriteLine(String.Format(" - Tag.Number = [{0}]", tag.Track));
                        Logger.WriteLine(String.Format(" - Tag.Year   = [{0}]", tag.Year));
                        Logger.WriteLine(String.Format(" - Tag.Genre  = [{0}]", tag.FirstGenre));

                        trackFile.Album       = tag.Album;
                        trackFile.Artist      = tag.FirstAlbumArtist;
                        trackFile.Title       = tag.Title;
                        trackFile.TrackNumber = (int)tag.Track;
                        trackFile.Year        = (int)tag.Year;
                        trackFile.Genre       = tag.FirstGenre;
                    }
                }

                if (String.IsNullOrEmpty(trackFile.Title) ||
                    String.IsNullOrEmpty(trackFile.Album) ||
                    String.IsNullOrEmpty(trackFile.Artist))
                {
                    Logger.WriteLine(String.Format(" . Retrieving tags for PUID [{0}]", trackFile.UniqueID));
                    tagger.RetrieveTags(trackFile);

                    if (String.IsNullOrEmpty(trackFile.UniqueID))
                    {
                        Logger.WriteLine(" > No tags found");
                    }
                    else
                    {
                        Logger.WriteLine(String.Format(" > Track.Album  = [{0}]", trackFile.Album));
                        Logger.WriteLine(String.Format(" > Track.Artist = [{0}]", trackFile.Artist));
                        Logger.WriteLine(String.Format(" > Track.Title  = [{0}]", trackFile.Title));
                        Logger.WriteLine(String.Format(" > Track.Number = [{0}]", trackFile.TrackNumber));
                        Logger.WriteLine(String.Format(" > Track.Year   = [{0}]", trackFile.Year));
                        Logger.WriteLine(String.Format(" > Track.Genre  = [{0}]", trackFile.Genre));
                        Logger.WriteLine(String.Format(" > ArtistURL    = [{0}]", trackFile.ArtistURL));

                        if (trackFile.IsAnalyzed)
                        {
                            XNamespace ns = tagger._PuidRoot.GetDefaultNamespace();

                            var releases =
                                from recording in tagger._PuidRoot
                                .Elements(ns + "puid")
                                .Elements(ns + "recording-list")
                                .Elements(ns + "recording")
                                select recording;
#if Verbose
                            if (releases.Count() > 1)
                            {
                                Logger.WriteLine(String.Format(" * Found {0} recordings in the following", releases.Count()));
                            }

                            Logger.WriteLine("PuidRoot");
                            Logger.WriteLine(tagger._PuidRoot.ToString(SaveOptions.None));

                            if (tagger._ArtistRoot != null)
                            {
                                Logger.WriteLine("ArtistRoot");
                                Logger.WriteLine(tagger._ArtistRoot.ToString(SaveOptions.None));
                            }
                            else
                            {
                                Logger.WriteLine(" * Artist information not found");
                            }
#else
                            if (releases.Count() > 1)
                            {
                                Logger.WriteLine(String.Format(" * Found {0} recordings", releases.Count()));
                            }

                            if (tagger._ArtistRoot == null)
                            {
                                Logger.WriteLine(" * Artist information not found");
                            }
#endif
                            // count tagged tracks
                            total++;
                        }
                    }
                }
            }

            controller.Dispose(true);
        }