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()); }
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); } }
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)); } }
public void Setup() { fileSystem = new Mock <IFileSystem>(); subject = new ITunesLibrary(Filepath, fileSystem.Object); }
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)); }
public void SetUp() { subject = new ITunesLibrary(fileLocation); }
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}"); }); } }