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 \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(StreamReader output)\r
95         {\r
96             string curLine = output.ReadLine();\r
97             if (!curLine.Contains("  + subtitle tracks:"))\r
98             {\r
99                 AudioTrack thisTrack = new AudioTrack();\r
100                 string[] splitter = curLine.Split(new string[] { "    + ", ", ", " (", ") (", " ch", "), ", "Hz, ", "bps" }, StringSplitOptions.RemoveEmptyEntries);\r
101                 thisTrack.m_trackNumber = int.Parse(splitter[0]);\r
102                 thisTrack.m_language = splitter[1];\r
103                 thisTrack.m_format = splitter[2];\r
104                 /*\r
105                  * Problem 2\r
106                  * Field 'Handbrake.frmMain.hbProc' is never assigned to, and will always have it's default value null.\r
107                  * This happens with "AllAudios.iso" which is a test file. http://www.sr88.co.uk/AllAudios.iso  (~95MB)\r
108                  */\r
109 \r
110                 thisTrack.m_subFormat = splitter[3];\r
111                 thisTrack.m_frequency = int.Parse(splitter[4]);\r
112                 thisTrack.m_bitrate = int.Parse(splitter[5]);\r
113                 return thisTrack;\r
114             }\r
115             else\r
116             {\r
117                 return null;\r
118             }\r
119         }\r
120 \r
121         public static AudioTrack[] ParseList(StreamReader output)\r
122         {\r
123             List<AudioTrack> tracks = new List<AudioTrack>();\r
124             while (true) // oh glorious hack, serve me well\r
125             {\r
126                 AudioTrack thisTrack = AudioTrack.Parse(output);\r
127                 if (thisTrack != null)\r
128                 {\r
129                     tracks.Add(thisTrack);\r
130                 }\r
131                 else\r
132                 {\r
133                     break;\r
134                 }\r
135             }\r
136             return tracks.ToArray();\r
137         }\r
138     }\r
139 }\r