-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.IO;\r
+/* AudioTrack.cs $\r
+ \r
+ This file is part of the HandBrake source code.\r
+ Homepage: <http://handbrake.fr>.\r
+ It may be used under the terms of the GNU General Public License. */\r
\r
namespace Handbrake.Parsing\r
{\r
+ using System;\r
+ using System.Collections.Generic;\r
+ using System.IO;\r
+ using System.Text.RegularExpressions;\r
+\r
/// <summary>\r
/// An object represending an AudioTrack associated with a Title, in a DVD\r
/// </summary>\r
public class AudioTrack\r
{\r
+ private int m_bitrate;\r
+ private string m_format;\r
+ private int m_frequency;\r
+ private string m_language;\r
+ private string m_subFormat;\r
private int m_trackNumber;\r
+ private string m_iso639_2;\r
+\r
/// <summary>\r
/// The track number of this Audio Track\r
/// </summary>\r
public int TrackNumber\r
{\r
- get\r
- {\r
- return this.m_trackNumber;\r
- }\r
+ get { return m_trackNumber; }\r
}\r
\r
- private string m_language;\r
/// <summary>\r
/// The language (if detected) of this Audio Track\r
/// </summary>\r
public string Language\r
{\r
- get\r
- {\r
- return this.m_language;\r
- }\r
+ get { return m_language; }\r
}\r
\r
- private string m_format;\r
/// <summary>\r
/// The primary format of this Audio Track\r
/// </summary>\r
public string Format\r
{\r
- get\r
- {\r
- return this.m_format;\r
- }\r
+ get { return m_format; }\r
}\r
\r
- private string m_subFormat;\r
/// <summary>\r
/// Additional format info for this Audio Track\r
/// </summary>\r
public string SubFormat\r
{\r
- get\r
- {\r
- return this.m_subFormat;\r
- }\r
+ get { return m_subFormat; }\r
}\r
\r
- private int m_frequency;\r
/// <summary>\r
/// The frequency (in MHz) of this Audio Track\r
/// </summary>\r
public int Frequency\r
{\r
- get\r
- {\r
- return this.m_frequency;\r
- }\r
+ get { return m_frequency; }\r
}\r
\r
- private int m_bitrate;\r
/// <summary>\r
/// The bitrate (in kbps) of this Audio Track\r
/// </summary>\r
public int Bitrate\r
{\r
- get\r
- {\r
- return this.m_bitrate;\r
- }\r
+ get { return m_bitrate; }\r
+ }\r
+\r
+ public string ISO639_2\r
+ {\r
+ get { return m_iso639_2; }\r
}\r
\r
/// <summary>\r
/// <returns>A string formatted as: {track #} {language} ({format}) ({sub-format})</returns>\r
public override string ToString()\r
{\r
- return string.Format("{0} {1} ({2}) ({3})", this.m_trackNumber, this.m_language, this.m_format, this.m_subFormat);\r
+ if (m_subFormat == null)\r
+ return string.Format("{0} {1} ({2})", m_trackNumber, m_language, m_format);\r
+\r
+ return string.Format("{0} {1} ({2}) ({3})", m_trackNumber, m_language, m_format, m_subFormat);\r
}\r
\r
- public static AudioTrack Parse(StreamReader output)\r
+ public static AudioTrack Parse(StringReader output)\r
{\r
- string curLine = output.ReadLine();\r
- if (!curLine.Contains(" + subtitle tracks:"))\r
+ string audio_track = output.ReadLine();\r
+ Match m = Regex.Match(audio_track, @"^ \+ ([0-9]*), ([A-Za-z0-9]*) \((.*)\) \((.*)\)");\r
+ Match track = Regex.Match(audio_track, @"^ \+ ([0-9]*), ([A-Za-z0-9]*) \((.*)\)"); // ID and Language\r
+ Match iso639_2 = Regex.Match(audio_track, @"iso639-2: ([a-zA-Z]*)\)");\r
+ Match samplerate = Regex.Match(audio_track, @"([0-9]*)Hz");\r
+ Match bitrate = Regex.Match(audio_track, @"([0-9]*)bps");\r
+\r
+ string subformat = m.Groups[4].Value.Trim().Contains("iso639") ? null : m.Groups[4].Value;\r
+ string samplerateVal = samplerate.Success ? samplerate.Groups[0].Value.Replace("Hz", string.Empty).Trim() : "0";\r
+ string bitrateVal = bitrate.Success ? bitrate.Groups[0].Value.Replace("bps", string.Empty).Trim() : "0";\r
+\r
+ if (track.Success)\r
{\r
- AudioTrack thisTrack = new AudioTrack();\r
- string[] splitter = curLine.Split(new string[] { " + ", ", ", " (", ") (", " ch", "), ", "Hz, ", "bps" }, StringSplitOptions.RemoveEmptyEntries);\r
- thisTrack.m_trackNumber = int.Parse(splitter[0]);\r
- thisTrack.m_language = splitter[1];\r
- thisTrack.m_format = splitter[2];\r
- /*\r
- * Problem 2\r
- * Field 'Handbrake.frmMain.hbProc' is never assigned to, and will always have it's default value null.\r
- * This happens with "AllAudios.iso" which is a test file. http://www.sr88.co.uk/AllAudios.iso (~95MB)\r
- */\r
-\r
- thisTrack.m_subFormat = splitter[3];\r
- thisTrack.m_frequency = int.Parse(splitter[4]);\r
- thisTrack.m_bitrate = int.Parse(splitter[5]);\r
+ var thisTrack = new AudioTrack\r
+ {\r
+ m_trackNumber = int.Parse(track.Groups[1].Value.Trim()), \r
+ m_language = track.Groups[2].Value, \r
+ m_format = m.Groups[3].Value, \r
+ m_subFormat = subformat, \r
+ m_frequency = int.Parse(samplerateVal), \r
+ m_bitrate = int.Parse(bitrateVal), \r
+ m_iso639_2 =\r
+ iso639_2.Value.Replace("iso639-2: ", string.Empty).Replace(")", string.Empty)\r
+ };\r
return thisTrack;\r
}\r
- else\r
- {\r
- return null;\r
- }\r
+\r
+ return null;\r
}\r
\r
- public static AudioTrack[] ParseList(StreamReader output)\r
+ public static AudioTrack[] ParseList(StringReader output)\r
{\r
- List<AudioTrack> tracks = new List<AudioTrack>();\r
- while (true) // oh glorious hack, serve me well\r
+ var tracks = new List<AudioTrack>();\r
+ while (true)\r
{\r
- AudioTrack thisTrack = AudioTrack.Parse(output);\r
+ AudioTrack thisTrack = Parse(output);\r
if (thisTrack != null)\r
- {\r
tracks.Add(thisTrack);\r
- }\r
else\r
- {\r
break;\r
- }\r
}\r
return tracks.ToArray();\r
}\r
}\r
-}\r
+}
\ No newline at end of file