private void CopyToMP3() { // Time to clear lock Thread.Sleep(10000); if (lastTrack != null) { //Save last track to mp3 var configET = new MapperConfiguration(cfg => cfg.CreateMap <FullTrack, ExtTrack>()); var mapperET = configET.CreateMapper(); string name = CleanString(lastTrack.Name); int remaster = name.IndexOf("- Remaster", StringComparison.CurrentCultureIgnoreCase); if (remaster > 0) { name = name.Substring(0, remaster - 1); } else { remaster = name.IndexOf("/ Remaster", StringComparison.CurrentCultureIgnoreCase); if (remaster > 0) { name = name.Substring(0, remaster - 1); } } remaster = name.IndexOf("Remaster", StringComparison.CurrentCultureIgnoreCase); if (remaster > 0) { name = name.Substring(0, remaster - 1); } string artist = CleanString(lastTrack.Artists[0].Name); ExtTrack extTrack = mapperET.Map <ExtTrack>(lastTrack); extTrack.AddProps(name, artist, ""); List <string> genres = DiscogCall(extTrack, txtAddGenres.Text); string directory = GetMp3Path(extTrack); string fullPathMP3 = directory + @"\" + CleanString(extTrack.Filename) + ".mp3"; Directory.CreateDirectory(directory); // LASTFM - genres dodgy? // extTrack.Year = LastFMCall(extTrack.OCName, extTrack.OCArtist); extTrack.TagGenres = genres.ToArray(); // temporary workaround for problems with genres extTrack.TagGenres = new string[] { string.Join(",", extTrack.TagGenres) }; using (var reader = new AudioFileReader(WAVPATH + (fileToCopy == 1 ? "thisTrack1.wav" : "thisTrack2.wav"))) using (var writer = new LameMP3FileWriter(fullPathMP3, reader.WaveFormat, BITRATE)) reader.CopyTo(writer); //tag mp3 file TagLib.File mp3 = TagLib.File.Create(fullPathMP3); mp3.Tag.Title = extTrack.Filename; mp3.Tag.Performers = extTrack.TagArtists; mp3.Tag.Album = extTrack.Album.Name; mp3.Tag.AlbumArtists = extTrack.TagArtists; mp3.Tag.Genres = extTrack.TagGenres; //mp3.Tag.Comment = "my comments, maybe some info about track"; if (extTrack.Year != null) { mp3.Tag.Year = (uint)extTrack.Year; } mp3.Save(); mp3.Dispose(); } }
private static List <string> DiscogCall(ExtTrack extTrack, string addGenre = "") { string url = "https://api.discogs.com/database/search?" + HttpUtility.UrlEncode(extTrack.OCName); if (extTrack.OCArtist != "") { url += "&artist=" + HttpUtility.UrlEncode(extTrack.OCArtist); } url += "&per_page=100&type=master"; HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url); myReq.Headers["Authorization"] = "Discogs key=" + DISCOGS_CONSUMERKEY + ", secret=" + DISCOGS_CONSUMERSECRET; myReq.UserAgent = "MyGenres/1.0 +http://martinharran.com"; WebResponse wr = myReq.GetResponse(); Stream receiveStream = wr.GetResponseStream(); StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); string content = reader.ReadToEnd(); int trackYear = 3000; DiscogsResult result = DiscogsResult.FromJson(content); List <string> genres = new List <string>(); if (addGenre != "") { genres.Add(addGenre); } if (result != null) { if (result.Results != null) { for (int i = 0; i < result.Results.Count(); i++) { Result r = result.Results[i]; if (r.Country != null) { if (r.Country.ToUpper() == "UK" || r.Country.ToUpper() == "US" || r.Country.ToUpper() == "Europe" ) { if (r.Style != null) { for (int g = 0; g < r.Style.Count(); g++) { string style = r.Style[g]; //string style = r.Style[g].ToString().Replace(" ", "_"); var match = genres.FirstOrDefault(stringToCheck => stringToCheck.Contains(style)); if (match == null) { genres.Add(style); } } } } } if (r.Year != null) { if (extTrack.Year == null) { extTrack.Year = (int)r.Year; } else if (r.Year < trackYear) { extTrack.Year = (int)r.Year; } } } } } return(genres); }
public static string GetMp3Path(ExtTrack track) { string path = @"F:\TestAudio\" + track.OCArtist + @"\" + CleanString(track.Album.Name); return(path); }