コード例 #1
0
        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)
            {
            }
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: cilles/SpotDown
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: MainWindow.xaml.cs プロジェクト: cbries/utilities
        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;
            }));
        }
コード例 #5
0
        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}");
                }
            }
        }