OSDN Git Service

CLI: update the built in presets
[handbrake-jp/handbrake-jp-git.git] / win / C# / HandBrake.ApplicationServices / Parsing / AudioTrack.cs
1 /*  AudioTrack.cs $\r
2     This file is part of the HandBrake source code.\r
3     Homepage: <http://handbrake.fr>.\r
4     It may be used under the terms of the GNU General Public License. */\r
5 \r
6 namespace HandBrake.ApplicationServices.Parsing\r
7 {\r
8     using System.Collections.Generic;\r
9     using System.IO;\r
10     using System.Text.RegularExpressions;\r
11 \r
12     /// <summary>\r
13     /// An object represending an AudioTrack associated with a Title, in a DVD\r
14     /// </summary>\r
15     public class AudioTrack\r
16     {\r
17         /// <summary>\r
18         /// Gets or sets The track number of this Audio Track\r
19         /// </summary>\r
20         public int TrackNumber { get; set; }\r
21 \r
22         /// <summary>\r
23         /// Gets or sets The language (if detected) of this Audio Track\r
24         /// </summary>\r
25         public string Language { get; set; }\r
26 \r
27         /// <summary>\r
28         /// Gets or sets LanguageCode.\r
29         /// </summary>\r
30         public string LanguageCode { get; set; }\r
31 \r
32         /// <summary>\r
33         /// Gets or sets Description.\r
34         /// </summary>\r
35         public string Description { get; set; }\r
36 \r
37         /// <summary>\r
38         /// Gets or sets The primary format of this Audio Track\r
39         /// </summary>\r
40         public string Format { get; set; }\r
41 \r
42         /// <summary>\r
43         /// Gets or sets The frequency (in MHz) of this Audio Track\r
44         /// </summary>\r
45         public int SampleRate { get; set; }\r
46 \r
47         /// <summary>\r
48         /// Gets or sets The bitrate (in kbps) of this Audio Track\r
49         /// </summary>\r
50         public int Bitrate { get; set; }\r
51 \r
52         /// <summary>\r
53         /// Parse the CLI input to an Audio Track object\r
54         /// </summary>\r
55         /// <param name="output">\r
56         /// The output.\r
57         /// </param>\r
58         /// <returns>\r
59         /// An Audio Track obkect\r
60         /// </returns>\r
61         public static AudioTrack Parse(StringReader output)\r
62         {\r
63             string audioTrack = output.ReadLine();\r
64             Match m = Regex.Match(audioTrack, @"^    \+ ([0-9]*), ([A-Za-z0-9,\s]*) \((.*)\) \((.*)\)");\r
65             Match track = Regex.Match(audioTrack, @"^    \+ ([0-9]*), ([A-Za-z0-9,\s]*) \((.*)\)"); // ID and Language\r
66             Match iso639_2 = Regex.Match(audioTrack, @"iso639-2: ([a-zA-Z]*)\)");\r
67             Match samplerate = Regex.Match(audioTrack, @"([0-9]*)Hz");\r
68             Match bitrate = Regex.Match(audioTrack, @"([0-9]*)bps");\r
69 \r
70             string subformat = m.Groups[4].Value.Trim().Contains("iso639") ? null : m.Groups[4].Value;\r
71             string samplerateVal = samplerate.Success ? samplerate.Groups[0].Value.Replace("Hz", string.Empty).Trim() : "0";\r
72             string bitrateVal = bitrate.Success ? bitrate.Groups[0].Value.Replace("bps", string.Empty).Trim() : "0";\r
73 \r
74             if (track.Success)\r
75             {\r
76                 var thisTrack = new AudioTrack\r
77                                     {\r
78                                         TrackNumber = int.Parse(track.Groups[1].Value.Trim()), \r
79                                         Language = track.Groups[2].Value, \r
80                                         Format = m.Groups[3].Value,\r
81                                         Description = subformat, \r
82                                         SampleRate = int.Parse(samplerateVal), \r
83                                         Bitrate = int.Parse(bitrateVal),\r
84                                         LanguageCode = iso639_2.Value.Replace("iso639-2: ", string.Empty).Replace(")", string.Empty)\r
85                                     };\r
86                 return thisTrack;\r
87             }\r
88 \r
89             return null;\r
90         }\r
91 \r
92         /// <summary>\r
93         /// Pase a list of audio tracks\r
94         /// </summary>\r
95         /// <param name="output">\r
96         /// The output.\r
97         /// </param>\r
98         /// <returns>\r
99         /// An array of audio tracks\r
100         /// </returns>\r
101         public static AudioTrack[] ParseList(StringReader output)\r
102         {\r
103             var tracks = new List<AudioTrack>();\r
104             while (true)\r
105             {\r
106                 AudioTrack thisTrack = Parse(output);\r
107                 if (thisTrack != null)\r
108                     tracks.Add(thisTrack);\r
109                 else\r
110                     break;\r
111             }\r
112             return tracks.ToArray();\r
113         }\r
114 \r
115         /// <summary>\r
116         /// Override of the ToString method to make this object easier to use in the UI\r
117         /// </summary>\r
118         /// <returns>A string formatted as: {track #} {language} ({format}) ({sub-format})</returns>\r
119         public override string ToString()\r
120         {\r
121             if (Description == null)\r
122                 return string.Format("{0} {1} ({2})", TrackNumber, Language, Format);\r
123 \r
124             return string.Format("{0} {1} ({2}) ({3})", TrackNumber, Language, Format, Description);\r
125         }\r
126     }\r
127 }