OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Parsing / AudioTrack.cs
index 6232da2..56a3519 100644 (file)
+/*  AudioTrack.cs $\r
+       \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
 using System;\r
 using System.Collections.Generic;\r
-using System.Text;\r
 using System.IO;\r
+using System.Text.RegularExpressions;\r
 \r
 namespace Handbrake.Parsing\r
 {\r
+    /// <summary>\r
+    /// An object represending an AudioTrack associated with a Title, in a DVD\r
+    /// </summary>\r
     public class AudioTrack\r
     {\r
+        private int m_bitrate;\r
+        private string m_format;\r
+        private int m_frequency;\r
+        private string m_language;\r
+        private string m_subFormat;\r
         private int m_trackNumber;\r
+        private string m_iso639_2;\r
+\r
+        /// <summary>\r
+        /// The track number of this Audio Track\r
+        /// </summary>\r
         public int TrackNumber\r
         {\r
-            get\r
-            {\r
-                return this.m_trackNumber;\r
-            }\r
+            get { return m_trackNumber; }\r
         }\r
 \r
-        private string m_language;\r
+        /// <summary>\r
+        /// The language (if detected) of this Audio Track\r
+        /// </summary>\r
         public string Language\r
         {\r
-            get\r
-            {\r
-                return this.m_language;\r
-            }\r
+            get { return m_language; }\r
         }\r
 \r
-        private string m_format;\r
+        /// <summary>\r
+        /// The primary format of this Audio Track\r
+        /// </summary>\r
         public string Format\r
         {\r
-            get\r
-            {\r
-                return this.m_format;\r
-            }\r
+            get { return m_format; }\r
         }\r
 \r
-        private string m_subFormat;\r
+        /// <summary>\r
+        /// Additional format info for this Audio Track\r
+        /// </summary>\r
         public string SubFormat\r
         {\r
-            get\r
-            {\r
-                return this.m_subFormat;\r
-            }\r
+            get { return m_subFormat; }\r
         }\r
 \r
-        private int m_frequency;\r
+        /// <summary>\r
+        /// The frequency (in MHz) of this Audio Track\r
+        /// </summary>\r
         public int Frequency\r
         {\r
-            get\r
-            {\r
-                return this.m_frequency;\r
-            }\r
+            get { return m_frequency; }\r
         }\r
 \r
-        private int m_bitrate;\r
+        /// <summary>\r
+        /// The bitrate (in kbps) of this Audio Track\r
+        /// </summary>\r
         public int Bitrate\r
         {\r
-            get\r
-            {\r
-                return this.m_bitrate;\r
-            }\r
+            get { return m_bitrate; }\r
         }\r
 \r
-        public static AudioTrack Parse(StreamReader output)\r
+        public string ISO639_2\r
         {\r
-            string curLine = output.ReadLine();\r
-            if (!curLine.Contains("  + subtitle tracks:"))\r
-            {\r
-                AudioTrack thisTrack = new AudioTrack();\r
-                string[] splitter = curLine.Split(new string[] { "    + ", ", ", " (", ") (", " ch", "), ", "Hz, ", "bps" }, StringSplitOptions.RemoveEmptyEntries);\r
-                thisTrack.m_trackNumber = int.Parse(splitter[0]);\r
-                thisTrack.m_language = splitter[1];\r
-                thisTrack.m_format = splitter[2];\r
-                thisTrack.m_subFormat = splitter[3];\r
-                thisTrack.m_frequency = int.Parse(splitter[4]);\r
-                thisTrack.m_bitrate = int.Parse(splitter[5]);\r
-                return thisTrack;\r
-            }\r
-            else\r
+            get { return m_iso639_2;  }\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 (m_subFormat == null)\r
+                return string.Format("{0} {1} ({2})", m_trackNumber, m_language, m_format);\r
+            \r
+            return string.Format("{0} {1} ({2}) ({3})", m_trackNumber, m_language, m_format, m_subFormat);\r
+        }\r
+\r
+        public static AudioTrack Parse(StringReader output)\r
+        {\r
+            String audio_track = output.ReadLine();\r
+            Match m = Regex.Match(audio_track, @"^    \+ ([0-9]*), ([A-Za-z0-9]*) \((.*)\) \((.*)\)");\r
+            Match track = Regex.Match(audio_track, @"^    \+ ([0-9]*), ([A-Za-z0-9]*) \((.*)\)"); // ID and Language\r
+            Match iso639_2 = Regex.Match(audio_track, @"iso639-2: ([a-zA-Z]*)\)");\r
+            Match samplerate = Regex.Match(audio_track, @"([0-9]*)Hz");\r
+            Match bitrate = Regex.Match(audio_track, @"([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", "").Trim() : "0";\r
+            string bitrateVal = bitrate.Success ? bitrate.Groups[0].Value.Replace("bps", "").Trim() : "0";\r
+\r
+            if (track.Success)\r
             {\r
-                return null;\r
+                var thisTrack = new AudioTrack\r
+                {\r
+                    m_trackNumber = int.Parse(track.Groups[1].Value.Trim()),\r
+                    m_language = track.Groups[2].Value,\r
+                    m_format = m.Groups[3].Value,\r
+                    m_subFormat = subformat,\r
+                    m_frequency = int.Parse(samplerateVal),\r
+                    m_bitrate = int.Parse(bitrateVal),\r
+                    m_iso639_2 = iso639_2.Value.Replace("iso639-2: ", "").Replace(")", "")\r
+                };\r
+                return thisTrack; \r
             }\r
+          \r
+            return null;\r
         }\r
 \r
-        public static AudioTrack[] ParseList(StreamReader output)\r
+        public static AudioTrack[] ParseList(StringReader output)\r
         {\r
-            List<AudioTrack> tracks = new List<AudioTrack>();\r
-            while (true) // oh glorious hack, serve me well\r
+            var tracks = new List<AudioTrack>();\r
+            while (true)\r
             {\r
-                AudioTrack thisTrack = AudioTrack.Parse(output);\r
+                AudioTrack thisTrack = Parse(output);\r
                 if (thisTrack != null)\r
-                {\r
                     tracks.Add(thisTrack);\r
-                }\r
                 else\r
-                {\r
                     break;\r
-                }\r
             }\r
             return tracks.ToArray();\r
         }\r
     }\r
-}\r
+}
\ No newline at end of file