OSDN Git Service

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