namespace FileFlows.AudioNodes.Helpers; /// /// Provides methods for working with audio metadata. /// public class MetadataHelper { /// /// Gets an array of metadata parameters based on the provided AudioTags. /// /// The audio metadata. /// An array of metadata parameters. public static string[] GetMetadataParameters(AudioInfo audioInfo) { if (audioInfo == null) return new string[] { }; var parameters = new List(); AddMetadataParameter(parameters, "TITLE", audioInfo.Title); AddMetadataParameter(parameters, "ARTIST", audioInfo.Artist); AddMetadataParameter(parameters, "ALBUM", audioInfo.Album); AddMetadataParameter(parameters, "GENRE", string.Join(";", audioInfo?.Genres ?? new string[] { })); if (audioInfo.Date.Year > 1900) { if (audioInfo.Date.Month == 1 && audioInfo.Date.Day == 1) AddMetadataParameter(parameters, "DATE", audioInfo.Date.Year.ToString()); else AddMetadataParameter(parameters, "DATE", audioInfo.Date.ToString("yyyy-M-d")); } if (audioInfo.Track > 0 && audioInfo.TotalTracks > 0) AddMetadataParameter(parameters, "TRACK", audioInfo.Track + "/" + audioInfo.TotalTracks); else if(audioInfo.Track > 0) AddMetadataParameter(parameters, "TRACK", audioInfo.Track.ToString()); if(audioInfo.Disc > 0) AddMetadataParameter(parameters, "DISC", audioInfo.Disc.ToString()); if(audioInfo.TotalDiscs > 0) AddMetadataParameter(parameters, "TOTALDISCS", audioInfo.TotalDiscs.ToString()); AddMetadataParameter(parameters, "comment", "Created by FileFlows\nhttps://fileflows.com"); return parameters.ToArray(); } /// /// Adds a metadata parameter to the list if the value is valid. /// /// The list of parameters. /// The metadata key. /// The metadata value. private static void AddMetadataParameter(List parameters, string key, string value) { if (string.IsNullOrWhiteSpace(value) == false && value != "0") { parameters.AddRange(new[] { "-metadata", $"{key}={EscapeForShell(value)}" }); } } /// /// Escapes a string for use in a command-line shell. /// /// The input string to escape. /// The escaped string. private static string EscapeForShell(string input) { return input.Replace("\"", "\\\""); } }