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 using System;\r
8 using System.Collections.Generic;\r
9 using System.IO;\r
10 using System.Text.RegularExpressions;\r
11 \r
12 namespace Handbrake.Parsing\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", "").Trim() : "0";\r
103             string bitrateVal = bitrate.Success ? bitrate.Groups[0].Value.Replace("bps", "").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 = iso639_2.Value.Replace("iso639-2: ", "").Replace(")", "")\r
116                 };\r
117                 return thisTrack; \r
118             }\r
119           \r
120             return null;\r
121         }\r
122 \r
123         public static AudioTrack[] ParseList(StringReader output)\r
124         {\r
125             var tracks = new List<AudioTrack>();\r
126             while (true)\r
127             {\r
128                 AudioTrack thisTrack = Parse(output);\r
129                 if (thisTrack != null)\r
130                     tracks.Add(thisTrack);\r
131                 else\r
132                     break;\r
133             }\r
134             return tracks.ToArray();\r
135         }\r
136     }\r
137 }