コード例 #1
0
ファイル: Program.cs プロジェクト: mattshall/lyricsfetcher
        static void TestSources()
        {
            ITunesLibrary lib = new ITunesLibrary();

            lib.MaxSongsToFetch = 150;
            lib.LoadSongs();
            lib.WaitLoad();

            List <Song> songs = lib.Songs.FindAll(
                delegate(Song s) {
                LyricsStatus status = s.LyricsStatus;
                return(status == LyricsStatus.Untried ||
                       status == LyricsStatus.Failed ||
                       status == LyricsStatus.Success);
            }
                );

            songs = songs.GetRange(0, 10);

            //TestOneSource(songs, new LyricsSourceLyricWiki());
            //TestOneSource(songs, new LyricsSourceLyricWikiHtml());
            TestOneSource(songs, new LyricsSourceLyricsPlugin());
            TestOneSource(songs, new LyricsSourceLyrdb());
            TestOneSource(songs, new LyricsSourceLyricsFly());
        }
コード例 #2
0
        static void Main(string[] args)
        {
            var iTunesXml = @"C:\Users\matth\Music\iTunes\iTunes Music Library.xml";

            var library = new ITunesLibrary(iTunesXml);

            var tracks = library.Tracks;
            // returns all tracks in the iTunes Library

            var albums = library.Albums;
            // returns all albums in the iTunes Library

            var playlists = library.Playlists;

            foreach (var playlist in playlists.Where(p => p.Tracks != null && p.Tracks.Count() != 0))
            {
                Console.WriteLine(playlist.Name);

                var serviceCollection = new ServiceCollection();
                serviceCollection.AddLogging();


                var playlistOutput = new M3uPlaylist
                {
                    IsExtended = true
                };

                foreach (var track in playlist.Tracks)
                {
                    if (track.Location != null)
                    {
                        playlistOutput.PlaylistEntries.Add(new M3uPlaylistEntry()
                        {
                            Album       = track.Album,
                            AlbumArtist = track.Artist,
                            Path        = track.Location.Replace("file://localhost/D:/iTunesMedia/Music", "..").Replace("%20", " "),
                            Title       = track.Name
                        });
                    }
                }

                var    content = new M3uContent();
                string text    = content.ToText(playlistOutput);

                File.WriteAllText(@"\\192.168.1.2\music\playlists\" + playlist.Name + ".m3u", text);
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: mattshall/lyricsfetcher
        static void TestManyMetaDataLookup()
        {
            ITunesLibrary lib = new ITunesLibrary();

            lib.MaxSongsToFetch = 50;
            lib.LoadSongs();
            lib.WaitLoad();

            Stopwatch sw = new Stopwatch();

            sw.Start();
            try {
                foreach (Song song in lib.Songs)
                {
                    MetaDataLookup req = new MetaDataLookup();
                    //MetaDataLookupOld req = new MetaDataLookupOld();
                    req.Lookup(song);
                    if (req.Status == MetaDataStatus.Success)
                    {
                        if (song.Title == req.MetaData.Title && song.Artist == req.MetaData.Artist)
                        {
                            System.Diagnostics.Debug.WriteLine(String.Format("same: {0}", song));
                        }
                        else
                        {
                            System.Diagnostics.Debug.WriteLine(String.Format("different: {0}. title={1}, artist={2}", song, req.MetaData.Title, req.MetaData.Artist));
                        }
                    }
                    else
                    {
                        System.Diagnostics.Debug.WriteLine(String.Format("failed: {0}", song));
                    }
                }
            }
            finally {
                sw.Stop();
                System.Diagnostics.Debug.WriteLine(String.Format("Tried {0} song in {1} ({2} secs per song)", lib.Songs.Count, sw.Elapsed, (sw.ElapsedMilliseconds / lib.Songs.Count) / 1000));
            }
        }
コード例 #4
0
 public void Setup()
 {
     fileSystem = new Mock <IFileSystem>();
     subject    = new ITunesLibrary(Filepath, fileSystem.Object);
 }
コード例 #5
0
ファイル: Program.cs プロジェクト: mattshall/lyricsfetcher
        static void TestSecondTry()
        {
            // Is it actually worthwhile doing the second or subsequent attempt?
            ITunesLibrary lib = new ITunesLibrary();

            //lib.MaxSongsToFetch = 1000;
            lib.LoadSongs();
            lib.WaitLoad();

            List <Song> songs = lib.Songs.FindAll(
                delegate(Song s) {
                LyricsStatus status = s.LyricsStatus;
                return(status == LyricsStatus.Untried ||
                       status == LyricsStatus.Failed ||
                       status == LyricsStatus.Success);
            }
                );

            ILyricsSource source2 = new LyricsSourceLyricsPlugin();
            ILyricsSource source1 = new LyricsSourceLyrdb();
            ILyricsSource source3 = new LyricsSourceLyricsFly();

            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();
            Stopwatch sw3 = new Stopwatch();

            int failures = 0;
            int success1 = 0;
            int success2 = 0;
            int success3 = 0;

            foreach (Song song in songs)
            {
                sw1.Start();
                string lyrics = source1.GetLyrics(song);
                sw1.Stop();

                if (lyrics == string.Empty)
                {
                    sw2.Start();
                    lyrics = source2.GetLyrics(song);
                    sw2.Stop();

                    if (lyrics == string.Empty)
                    {
                        sw3.Start();
                        lyrics = source3.GetLyrics(song);
                        sw3.Stop();

                        if (lyrics == string.Empty)
                        {
                            failures++;
                        }
                        else
                        {
                            success3++;
                        }
                    }
                    else
                    {
                        success2++;
                    }
                }
                else
                {
                    success1++;
                }
            }

            Console.WriteLine("1st try: successes: {0} ({1}%), time: {2} ({3} each)",
                              success1, (success1 * 100 / songs.Count), sw1.Elapsed, sw1.ElapsedMilliseconds / songs.Count);
            Console.WriteLine("2st try: successes: {0} ({1}%), time: {2} ({3} each)",
                              success2, (success2 * 100 / songs.Count), sw2.Elapsed, sw2.ElapsedMilliseconds / (songs.Count - success1));
            Console.WriteLine("3st try: successes: {0} ({1}%), time: {2} ({3} each)",
                              success3, (success3 * 100 / songs.Count), sw3.Elapsed, sw3.ElapsedMilliseconds / (songs.Count - success1 - success2));
            Console.WriteLine("failures: {0} ({1}%)",
                              failures, (failures * 100 / songs.Count));
        }
コード例 #6
0
 public void SetUp()
 {
     subject = new ITunesLibrary(fileLocation);
 }
コード例 #7
0
        static void Main(string[] args)
        {
            var folderName = "C:\\Users\\Eric\\Music\\iTunes\\iTunes Music Library.xml";

            if (args.Count() > 0)
            {
                folderName = args[0];
            }

            var options = new ProgressBarOptions
            {
                ProgressCharacter   = '─',
                ProgressBarOnBottom = true
            };

            var library = new ITunesLibrary(folderName);

            // ignore streams (http://) for tracking
            var tracks = library.Tracks.Where(t => !t.Location.Contains("http://")).ToList();

            using (var pbar = new ProgressBar(tracks.Count(), "Initial message", options))
            {
                Parallel.ForEach(tracks, (itunesTrack) =>
                {
                    // create a windows path from the itunes location
                    var fileName = WebUtility.UrlDecode(itunesTrack.Location.Replace("+", "%2b")).Replace("file://localhost/", "").Replace("/", "\\");
                    try
                    {
                        TagLib.Id3v2.Tag.DefaultVersion      = 4;
                        TagLib.Id3v2.Tag.ForceDefaultVersion = true;

                        using (var mp3File = TagLib.File.Create(fileName))
                        {
                            TagLib.Id3v2.Tag tag = (TagLib.Id3v2.Tag)mp3File.GetTag(TagLib.TagTypes.Id3v2, true);

                            // strip old popularity frames
                            foreach (var oldPopFrame in tag.GetFrames <TagLib.Id3v2.PopularimeterFrame>().ToArray())
                            {
                                tag.RemoveFrame(oldPopFrame);
                            }

                            //tag.AlbumArtists = new[] { itunesTrack.AlbumArtist };
                            //tag.Performers = new[] { itunesTrack.Artist };
                            //tag.Genres = new[] { itunesTrack.Genre };
                            //tag.IsCompilation = itunesTrack.PartOfCompilation;

                            //RemoveLyrics(mp3File);

                            var frame = TagLib.Id3v2.PopularimeterFrame.Get(tag, "Windows Media Player 9 Series", true);
                            if (itunesTrack.Rating.HasValue)
                            {
                                var stars    = itunesTrack.Rating.Value / 20; // itunes sends 20 x star value
                                frame.Rating = TransformRating(stars);
                            }
                            if (itunesTrack.PlayCount.HasValue && (ulong)itunesTrack.PlayCount.Value > frame.PlayCount)
                            {
                                frame.PlayCount = (ulong)itunesTrack.PlayCount.Value;
                            }

                            //only keep existing tags in file
                            var removeTags = mp3File.TagTypes & ~mp3File.TagTypesOnDisk;
                            mp3File.RemoveTags(removeTags);
                            mp3File.Save();
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error updating the playcount: {ex.Message}");
                    }

                    pbar.Tick($"updating {fileName}");
                });
            }
        }