--- /dev/null
+/* AudioTrack.cs $\r
+ This file is part of the HandBrake source code.\r
+ Homepage: <http://handbrake.fr>.\r
+ It may be used under the terms of the GNU General Public License. */\r
+\r
+namespace HandBrake.ApplicationServices.Parsing\r
+{\r
+ using System.Collections.Generic;\r
+ using System.IO;\r
+ using System.Text.RegularExpressions;\r
+\r
+ /// <summary>\r
+ /// An object represending an AudioTrack associated with a Title, in a DVD\r
+ /// </summary>\r
+ public class AudioTrack\r
+ {\r
+ /// <summary>\r
+ /// Gets or sets The track number of this Audio Track\r
+ /// </summary>\r
+ public int TrackNumber { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets The language (if detected) of this Audio Track\r
+ /// </summary>\r
+ public string Language { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets LanguageCode.\r
+ /// </summary>\r
+ public string LanguageCode { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets Description.\r
+ /// </summary>\r
+ public string Description { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets The primary format of this Audio Track\r
+ /// </summary>\r
+ public string Format { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets The frequency (in MHz) of this Audio Track\r
+ /// </summary>\r
+ public int SampleRate { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets The bitrate (in kbps) of this Audio Track\r
+ /// </summary>\r
+ public int Bitrate { get; set; }\r
+\r
+ /// <summary>\r
+ /// Parse the CLI input to an Audio Track object\r
+ /// </summary>\r
+ /// <param name="output">\r
+ /// The output.\r
+ /// </param>\r
+ /// <returns>\r
+ /// An Audio Track obkect\r
+ /// </returns>\r
+ public static AudioTrack Parse(StringReader output)\r
+ {\r
+ string audioTrack = output.ReadLine();\r
+ Match m = Regex.Match(audioTrack, @"^ \+ ([0-9]*), ([A-Za-z0-9,\s]*) \((.*)\) \((.*)\)");\r
+ Match track = Regex.Match(audioTrack, @"^ \+ ([0-9]*), ([A-Za-z0-9,\s]*) \((.*)\)"); // ID and Language\r
+ Match iso639_2 = Regex.Match(audioTrack, @"iso639-2: ([a-zA-Z]*)\)");\r
+ Match samplerate = Regex.Match(audioTrack, @"([0-9]*)Hz");\r
+ Match bitrate = Regex.Match(audioTrack, @"([0-9]*)bps");\r
+\r
+ string subformat = m.Groups[4].Value.Trim().Contains("iso639") ? null : m.Groups[4].Value;\r
+ string samplerateVal = samplerate.Success ? samplerate.Groups[0].Value.Replace("Hz", string.Empty).Trim() : "0";\r
+ string bitrateVal = bitrate.Success ? bitrate.Groups[0].Value.Replace("bps", string.Empty).Trim() : "0";\r
+\r
+ if (track.Success)\r
+ {\r
+ var thisTrack = new AudioTrack\r
+ {\r
+ TrackNumber = int.Parse(track.Groups[1].Value.Trim()), \r
+ Language = track.Groups[2].Value, \r
+ Format = m.Groups[3].Value,\r
+ Description = subformat, \r
+ SampleRate = int.Parse(samplerateVal), \r
+ Bitrate = int.Parse(bitrateVal),\r
+ LanguageCode = iso639_2.Value.Replace("iso639-2: ", string.Empty).Replace(")", string.Empty)\r
+ };\r
+ return thisTrack;\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Pase a list of audio tracks\r
+ /// </summary>\r
+ /// <param name="output">\r
+ /// The output.\r
+ /// </param>\r
+ /// <returns>\r
+ /// An array of audio tracks\r
+ /// </returns>\r
+ public static AudioTrack[] ParseList(StringReader output)\r
+ {\r
+ var tracks = new List<AudioTrack>();\r
+ while (true)\r
+ {\r
+ AudioTrack thisTrack = Parse(output);\r
+ if (thisTrack != null)\r
+ tracks.Add(thisTrack);\r
+ else\r
+ break;\r
+ }\r
+ return tracks.ToArray();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Override of the ToString method to make this object easier to use in the UI\r
+ /// </summary>\r
+ /// <returns>A string formatted as: {track #} {language} ({format}) ({sub-format})</returns>\r
+ public override string ToString()\r
+ {\r
+ if (Description == null)\r
+ return string.Format("{0} {1} ({2})", TrackNumber, Language, Format);\r
+\r
+ return string.Format("{0} {1} ({2}) ({3})", TrackNumber, Language, Format, Description);\r
+ }\r
+ }\r
+}
\ No newline at end of file