private void SaveTags(TrackViewModel tracky) { int code = -1; try { foreach (var c in TagSavePending) { try { using (TagLib.File tlFile = TagLib.File.Create(c.Path)) { tlFile.Tag.Title = c.Title; tlFile.Tag.Album = c.Album; tlFile.Tag.Performers = new string[] { c.Artist }; tlFile.Tag.Genres = new[] { c.Genre }; tlFile.Save(); } TagSavePending.Remove(c); } catch (Exception e) { Console.WriteLine(e); } } } catch (Exception ex) { } }
public void MusicTags(int num, int session) { PassArguments result = songArray[session][num]; try { //===edit tags==== TagLib.File f = TagLib.File.Create(_dir + EscapeFilename(result.PassedFileName) + ".mp3"); f.Tag.Clear(); f.Tag.AlbumArtists = new string[1] { result.PassedArtist }; f.Tag.Performers = new string[1] { result.PassedArtist }; f.Tag.Title = result.PassedSong; f.Tag.Album = result.PassedAlbum; // // Log(result.passedFileName + " and " + result.passedAlbumID); Image currentImage = GetAlbumArt(num, session); Picture pic = new Picture(); pic.Type = PictureType.FrontCover; pic.MimeType = System.Net.Mime.MediaTypeNames.Image.Jpeg; pic.Description = "Cover"; MemoryStream ms = new MemoryStream(); currentImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); // <-- Error doesn't occur anymore ms.Position = 0; pic.Data = ByteVector.FromStream(ms); f.Tag.Pictures = new IPicture[1] { pic }; f.Save(); ms.Close(); } catch (Exception ex) { Log("[Error: x7] " + ex.Message + Environment.NewLine + Environment.NewLine + result.PassedFileName, true); } }
private bool WriteMp3Metadata() { using (TagLib.File file = TagLib.File.Create(_filepath, "taglib/mp3", ReadStyle.Average)) { var tags = (Tag)file.GetTag(TagTypes.Id3v2); if (_coverBytes.Length > 0) { var byteVector = new ByteVector(_coverBytes); var coverPicture = new Picture { Description = "Cover", Data = byteVector, MimeType = MediaTypeNames.Image.Jpeg, Type = PictureType.FrontCover }; var attachedPictureFrame = new AttachedPictureFrame(coverPicture); tags.Pictures = new IPicture[] { attachedPictureFrame }; } tags.AddFrame(MetadataHelpers.BuildTextInformationFrame("TMED", "Digital Media")); if (_trackInfo?.TrackTags != null) { tags.Title = _trackInfo.TrackTags.Title; tags.Performers = _trackInfo.TrackTags.Artists.Select(x => x.Name).ToArray(); tags.AlbumArtists = _albumInfo.AlbumTags.Artists.Select(x => x.Name).ToArray(); // i don't like just using ART_NAME as the only album artist tags.Composers = _trackInfo.TrackTags.Contributors.Composers; if (_trackInfo.TrackTags.TrackNumber != null) { tags.Track = uint.Parse(_trackInfo.TrackTags.TrackNumber); } if (_trackInfo.TrackTags.DiscNumber != null) { tags.Disc = uint.Parse(_trackInfo.TrackTags.DiscNumber); } if (_trackInfo.TrackTags.Bpm != null) { string bpm = _trackInfo.TrackTags.Bpm; if (double.TryParse(bpm, out double bpmParsed)) { bpmParsed = Math.Round(bpmParsed); bpm = bpmParsed.ToString(CultureInfo.InvariantCulture); } tags.BeatsPerMinute = uint.Parse(bpm); } tags.AddFrame(MetadataHelpers.BuildTextInformationFrame("TSRC", _trackInfo.TrackTags.Isrc)); tags.AddFrame(MetadataHelpers.BuildTextInformationFrame("TPUB", _trackInfo.TrackTags.Contributors.Publishers)); tags.AddFrame(MetadataHelpers.BuildTextInformationFrame("TLEN", _trackInfo.TrackTags.Length)); tags.AddFrame(MetadataHelpers.BuildUserTextInformationFrame("EXPLICIT", _trackInfo.TrackTags.ExplicitLyrics)); tags.AddFrame(MetadataHelpers.BuildUserTextInformationFrame("REPLAYGAIN_TRACK_GAIN", _trackInfo.TrackTags.Gain)); tags.AddFrame(MetadataHelpers.BuildUserTextInformationFrame("WRITERS", _trackInfo.TrackTags.Contributors.Writers)); tags.AddFrame(MetadataHelpers.BuildUserTextInformationFrame("AUTHORS", _trackInfo.TrackTags.Contributors.Authors)); tags.AddFrame(MetadataHelpers.BuildUserTextInformationFrame("TIPL", "PRODUCERS", _trackInfo.TrackTags.Contributors.Publishers)); tags.AddFrame(MetadataHelpers.BuildUserTextInformationFrame("TIPL", "ENGINEERS", _trackInfo.TrackTags.Contributors.Engineers)); tags.AddFrame(MetadataHelpers.BuildUserTextInformationFrame("TIPL", "MIXERS", _trackInfo.TrackTags.Contributors.Mixers)); } if (_albumInfo?.AlbumTags != null) { tags.Album = _albumInfo.AlbumTags.Title; tags.Genres = _albumInfo.AlbumTags.Genres.GenreData.Select(x => x.Name).ToArray(); if (_albumInfo.AlbumTags.NumberOfTracks != null) { tags.TrackCount = uint.Parse(_albumInfo.AlbumTags.NumberOfTracks); } if (_albumInfo.AlbumTags.NumberOfDiscs != null) { tags.DiscCount = uint.Parse(_albumInfo.AlbumTags.NumberOfDiscs); } if (_albumInfo.AlbumTags.Type == "Compilation" || _albumInfo.AlbumTags.Type == "Playlist") { tags.IsCompilation = true; } tags.Copyright = _albumInfo.AlbumTags.Copyright; string year = _albumInfo.AlbumTags.ReleaseDate; if (!string.IsNullOrWhiteSpace(year)) { string[] yearSplit = year.Split("-"); if (yearSplit[0].Length == 4 && uint.TryParse(yearSplit[0], out uint yearParsed)) { tags.Year = yearParsed; } } tags.AddFrame(MetadataHelpers.BuildTextInformationFrame("TPUB", _albumInfo.AlbumTags.Label)); tags.AddFrame(MetadataHelpers.BuildTextInformationFrame("TDOR", _albumInfo.AlbumTags.ReleaseDate)); tags.AddFrame(MetadataHelpers.BuildUserTextInformationFrame("UPC", _albumInfo.AlbumTags.Upc)); } if (_trackInfo?.Lyrics != null) { tags.Lyrics = _trackInfo.Lyrics.UnSyncedLyrics; WriteLyricsFile(); } try { file.Save(); } catch (IOException ex) { Console.WriteLine(ex.Message); return(false); } } return(true); }
private async Task <bool> GenerateM3U(string folderpath) { if (string.IsNullOrEmpty(folderpath) || !Directory.Exists(folderpath)) { ResetFiles(); return(false); } TxtDirectory.Text = folderpath.Trim(); var files = Mp3Files.SelectedItems; bool isChkAfterPatternChecked = ChkAfterPattern.IsChecked != null && ChkAfterPattern.IsChecked.Value; string pattern = TxtPattern.Text; bool forceId3Tagging = ChkForceId3Tagging.IsChecked != null && ChkForceId3Tagging.IsChecked.Value; return(await Task.Run(delegate { string cnt = "#EXTM3U\r\n"; foreach (var file in files) { var item = file as FileItem; if (item == null) { continue; } long duration = GetDuration(item.Filename); string filename = Path.GetFileNameWithoutExtension(item.Filename); if (string.IsNullOrEmpty(filename)) { filename = Path.GetFileName(item.Filename); } if (string.IsNullOrEmpty(filename)) { continue; } int p = filename.IndexOf(pattern, StringComparison.OrdinalIgnoreCase); if (isChkAfterPatternChecked) { p += pattern.Length; } string artist; string title; if (p != -1) { artist = filename.Substring(0, p).Trim(); title = Path.GetFileNameWithoutExtension(filename.Substring(p + 1).Trim()); } else { artist = filename; title = Path.GetFileNameWithoutExtension(filename); } if (!item.HasId3Tag || forceId3Tagging) { using (TagLib.File f = TagLib.File.Create(item.Filename)) { f.Tag.Title = title; f.Tag.Composers = new [] { artist }; f.Tag.AlbumArtists = new[] { artist }; f.Tag.Performers = new [] { artist }; f.Save(); } } cnt += string.Format("#EXTINF:{0},{1} - {2}\r\n", duration, artist, title); cnt += Path.GetFileName(item.Filename) + "\r\n"; var cnt1 = cnt; _ctx.Post(o => { if (!string.IsNullOrEmpty(cnt1)) { TxtInfo.Text = cnt1; } }, null); } _ctx.Post(o => { TxtInfo.Text = cnt; }, null); string name = Path.GetFileNameWithoutExtension(folderpath); string targetFilename = Path.Combine(folderpath, name + ".m3u"); File.WriteAllText(targetFilename, cnt, Encoding.UTF8); if (File.Exists(targetFilename)) { targetFilename.ShowExplorer(); } else { return false; } return true; })); }
public static void ExportRelease(DiscogsRelease release, string folder) { if (release.videos == null) { return; } foreach (DiscogsVideo releaseVideo in release.videos) { if (!GetAudioFilePath(releaseVideo.uri, out string src)) { continue; } string filename = getEscaped(releaseVideo.title); string releaseName = $"{string.Join(", ", release.artists?.Select(a => a.name).ToArray() ?? new string[0])} - {release.title}"; foreach (char invalidPathChar in Path.GetInvalidPathChars()) { releaseName = releaseName.Replace(invalidPathChar, ' '); } string destFolder = Path.Combine(folder, releaseName); if (!Directory.Exists(destFolder)) { Directory.CreateDirectory(destFolder); } string dest = Path.Combine(destFolder, $"{filename}{AudioExtension}"); if (!File.Exists(src) || File.Exists(dest)) { continue; } try { File.Copy(src, dest); TagLib.File file = TagLib.File.Create(dest); DiscogsTrack track = getTrack(releaseVideo, release); file.Tag.Title = track?.title; file.Tag.Performers = track?.artists?.Select(a => a.name).ToArray() ?? release.artists?.Select(a => a.name).ToArray() ?? new string[0]; file.Tag.Album = release.title; file.Tag.AlbumArtists = release.artists?.Select(a => a.name).ToArray() ?? new string[0]; file.Tag.Genres = release.genres; try { IPicture cover = new Picture(GetImageFilePath(release.images?[0])); file.Tag.Pictures = new[] { cover }; } catch (Exception e) { Console.WriteLine($@"tagging {release.title}{e}"); } file.Save(); } catch (Exception e) { Console.WriteLine($@"{src} --> {dest} {e}"); } } }