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
8 using System.Collections.Generic;
\r
10 using System.Text.RegularExpressions;
\r
12 namespace Handbrake.Parsing
\r
15 /// An object represending an AudioTrack associated with a Title, in a DVD
\r
17 public class AudioTrack
\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 private string m_iso639_2;
\r
28 /// The track number of this Audio Track
\r
30 public int TrackNumber
\r
32 get { return m_trackNumber; }
\r
36 /// The language (if detected) of this Audio Track
\r
38 public string Language
\r
40 get { return m_language; }
\r
44 /// The primary format of this Audio Track
\r
46 public string Format
\r
48 get { return m_format; }
\r
52 /// Additional format info for this Audio Track
\r
54 public string SubFormat
\r
56 get { return m_subFormat; }
\r
60 /// The frequency (in MHz) of this Audio Track
\r
62 public int Frequency
\r
64 get { return m_frequency; }
\r
68 /// The bitrate (in kbps) of this Audio Track
\r
72 get { return m_bitrate; }
\r
75 public string ISO639_2
\r
77 get { return m_iso639_2; }
\r
81 /// Override of the ToString method to make this object easier to use in the UI
\r
83 /// <returns>A string formatted as: {track #} {language} ({format}) ({sub-format})</returns>
\r
84 public override string ToString()
\r
86 if (m_subFormat == null)
\r
87 return string.Format("{0} {1} ({2})", m_trackNumber, m_language, m_format);
\r
89 return string.Format("{0} {1} ({2}) ({3})", m_trackNumber, m_language, m_format, m_subFormat);
\r
92 public static AudioTrack Parse(StringReader output)
\r
94 String audio_track = output.ReadLine();
\r
95 Match m = Regex.Match(audio_track, @"^ \+ ([0-9]*), ([A-Za-z0-9]*) \((.*)\) \((.*)\)");
\r
96 Match track = Regex.Match(audio_track, @"^ \+ ([0-9]*), ([A-Za-z0-9]*) \((.*)\)"); // ID and Language
\r
97 Match iso639_2 = Regex.Match(audio_track, @"iso639-2: ([a-zA-Z]*)\)");
\r
98 Match samplerate = Regex.Match(audio_track, @"([0-9]*)Hz");
\r
99 Match bitrate = Regex.Match(audio_track, @"([0-9]*)bps");
\r
101 string subformat = m.Groups[4].Value.Trim().Contains("iso639") ? null : m.Groups[4].Value;
\r
102 string samplerateVal = samplerate.Success ? samplerate.Groups[0].Value.Replace("Hz", "").Trim() : "0";
\r
103 string bitrateVal = bitrate.Success ? bitrate.Groups[0].Value.Replace("bps", "").Trim() : "0";
\r
107 var thisTrack = new AudioTrack
\r
109 m_trackNumber = int.Parse(track.Groups[1].Value.Trim()),
\r
110 m_language = track.Groups[2].Value,
\r
111 m_format = m.Groups[3].Value,
\r
112 m_subFormat = subformat,
\r
113 m_frequency = int.Parse(samplerateVal),
\r
114 m_bitrate = int.Parse(bitrateVal),
\r
115 m_iso639_2 = iso639_2.Value.Replace("iso639-2: ", "").Replace(")", "")
\r
123 public static AudioTrack[] ParseList(StringReader output)
\r
125 var tracks = new List<AudioTrack>();
\r
128 AudioTrack thisTrack = Parse(output);
\r
129 if (thisTrack != null)
\r
130 tracks.Add(thisTrack);
\r
134 return tracks.ToArray();
\r