OSDN Git Service

import original 0.9.5 release
[handbrake-jp/handbrake-jp.git] / win / C# / HandBrake.ApplicationServices / Parsing / AudioTrack.cs
diff --git a/win/C#/HandBrake.ApplicationServices/Parsing/AudioTrack.cs b/win/C#/HandBrake.ApplicationServices/Parsing/AudioTrack.cs
new file mode 100644 (file)
index 0000000..55cf524
--- /dev/null
@@ -0,0 +1,127 @@
+/*  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