OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Parsing / AudioTrack.cs
1 /*  AudioTrack.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 namespace Handbrake.Parsing\r
8 {\r
9     using System;\r
10     using System.Collections.Generic;\r
11     using System.IO;\r
12     using System.Text.RegularExpressions;\r
13 \r
14     /// <summary>\r
15     /// An object represending an AudioTrack associated with a Title, in a DVD\r
16     /// </summary>\r
17     public class AudioTrack\r
18     {\r
19         private int m_bitrate;\r
20         private string m_format;\r
21         private int m_frequency;\r
22         private string m_language;\r
23         private string m_subFormat;\r
24         private int m_trackNumber;\r
25         private string m_iso639_2;\r
26 \r
27         /// <summary>\r
28         /// The track number of this Audio Track\r
29         /// </summary>\r
30         public int TrackNumber\r
31         {\r
32             get { return m_trackNumber; }\r
33         }\r
34 \r
35         /// <summary>\r
36         /// The language (if detected) of this Audio Track\r
37         /// </summary>\r
38         public string Language\r
39         {\r
40             get { return m_language; }\r
41         }\r
42 \r
43         /// <summary>\r
44         /// The primary format of this Audio Track\r
45         /// </summary>\r
46         public string Format\r
47         {\r
48             get { return m_format; }\r
49         }\r
50 \r
51         /// <summary>\r
52         /// Additional format info for this Audio Track\r
53         /// </summary>\r
54         public string SubFormat\r
55         {\r
56             get { return m_subFormat; }\r
57         }\r
58 \r
59         /// <summary>\r
60         /// The frequency (in MHz) of this Audio Track\r
61         /// </summary>\r
62         public int Frequency\r
63         {\r
64             get { return m_frequency; }\r
65         }\r
66 \r
67         /// <summary>\r
68         /// The bitrate (in kbps) of this Audio Track\r
69         /// </summary>\r
70         public int Bitrate\r
71         {\r
72             get { return m_bitrate; }\r
73         }\r
74 \r
75         public string ISO639_2\r
76         {\r
77             get { return m_iso639_2; }\r
78         }\r
79 \r
80         /// <summary>\r
81         /// Override of the ToString method to make this object easier to use in the UI\r
82         /// </summary>\r
83         /// <returns>A string formatted as: {track #} {language} ({format}) ({sub-format})</returns>\r
84         public override string ToString()\r
85         {\r
86             if (m_subFormat == null)\r
87                 return string.Format("{0} {1} ({2})", m_trackNumber, m_language, m_format);\r
88 \r
89             return string.Format("{0} {1} ({2}) ({3})", m_trackNumber, m_language, m_format, m_subFormat);\r
90         }\r
91 \r
92         public static AudioTrack Parse(StringReader output)\r
93         {\r
94             string audio_track = output.ReadLine();\r
95             Match m = Regex.Match(audio_track, @"^    \+ ([0-9]*), ([A-Za-z0-9]*) \((.*)\) \((.*)\)");\r
96             Match track = Regex.Match(audio_track, @"^    \+ ([0-9]*), ([A-Za-z0-9]*) \((.*)\)"); // ID and Language\r
97             Match iso639_2 = Regex.Match(audio_track, @"iso639-2: ([a-zA-Z]*)\)");\r
98             Match samplerate = Regex.Match(audio_track, @"([0-9]*)Hz");\r
99             Match bitrate = Regex.Match(audio_track, @"([0-9]*)bps");\r
100 \r
101             string subformat = m.Groups[4].Value.Trim().Contains("iso639") ? null : m.Groups[4].Value;\r
102             string samplerateVal = samplerate.Success ? samplerate.Groups[0].Value.Replace("Hz", string.Empty).Trim() : "0";\r
103             string bitrateVal = bitrate.Success ? bitrate.Groups[0].Value.Replace("bps", string.Empty).Trim() : "0";\r
104 \r
105             if (track.Success)\r
106             {\r
107                 var thisTrack = new AudioTrack\r
108                                     {\r
109                                         m_trackNumber = int.Parse(track.Groups[1].Value.Trim()), \r
110                                         m_language = track.Groups[2].Value, \r
111                                         m_format = m.Groups[3].Value, \r
112                                         m_subFormat = subformat, \r
113                                         m_frequency = int.Parse(samplerateVal), \r
114                                         m_bitrate = int.Parse(bitrateVal), \r
115                                         m_iso639_2 =\r
116                                             iso639_2.Value.Replace("iso639-2: ", string.Empty).Replace(")", string.Empty)\r
117                                     };\r
118                 return thisTrack;\r
119             }\r
120 \r
121             return null;\r
122         }\r
123 \r
124         public static AudioTrack[] ParseList(StringReader output)\r
125         {\r
126             var tracks = new List<AudioTrack>();\r
127             while (true)\r
128             {\r
129                 AudioTrack thisTrack = Parse(output);\r
130                 if (thisTrack != null)\r
131                     tracks.Add(thisTrack);\r
132                 else\r
133                     break;\r
134             }\r
135             return tracks.ToArray();\r
136         }\r
137     }\r
138 }