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