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
6 namespace HandBrake.ApplicationServices.Parsing
\r
8 using System.Collections.Generic;
\r
10 using System.Text.RegularExpressions;
\r
13 /// An object represending an AudioTrack associated with a Title, in a DVD
\r
15 public class AudioTrack
\r
18 /// Gets or sets The track number of this Audio Track
\r
20 public int TrackNumber { get; set; }
\r
23 /// Gets or sets The language (if detected) of this Audio Track
\r
25 public string Language { get; set; }
\r
28 /// Gets or sets LanguageCode.
\r
30 public string LanguageCode { get; set; }
\r
33 /// Gets or sets Description.
\r
35 public string Description { get; set; }
\r
38 /// Gets or sets The primary format of this Audio Track
\r
40 public string Format { get; set; }
\r
43 /// Gets or sets The frequency (in MHz) of this Audio Track
\r
45 public int SampleRate { get; set; }
\r
48 /// Gets or sets The bitrate (in kbps) of this Audio Track
\r
50 public int Bitrate { get; set; }
\r
53 /// Parse the CLI input to an Audio Track object
\r
55 /// <param name="output">
\r
59 /// An Audio Track obkect
\r
61 public static AudioTrack Parse(StringReader output)
\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
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
76 var thisTrack = new AudioTrack
\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
93 /// Pase a list of audio tracks
\r
95 /// <param name="output">
\r
99 /// An array of audio tracks
\r
101 public static AudioTrack[] ParseList(StringReader output)
\r
103 var tracks = new List<AudioTrack>();
\r
106 AudioTrack thisTrack = Parse(output);
\r
107 if (thisTrack != null)
\r
108 tracks.Add(thisTrack);
\r
112 return tracks.ToArray();
\r
116 /// Override of the ToString method to make this object easier to use in the UI
\r
118 /// <returns>A string formatted as: {track #} {language} ({format}) ({sub-format})</returns>
\r
119 public override string ToString()
\r
121 if (Description == null)
\r
122 return string.Format("{0} {1} ({2})", TrackNumber, Language, Format);
\r
124 return string.Format("{0} {1} ({2}) ({3})", TrackNumber, Language, Format, Description);
\r