OSDN Git Service

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