public void Convert(string zigSrcPath, string destPath)
{
var deser = new XmlSerializer(typeof(ZpeSong));
ZpeSong zigSong;
using (FileStream stream = new FileStream(zigSrcPath, FileMode.Open))
{
zigSong = (ZpeSong)deser.Deserialize(stream);
}
if (zigSong.PueVersion != 46)
throw new Exception("Incompatable version of Ziggy Pro Editor XML file");
bool foundTrack = false;
StringBuilder sb = new StringBuilder();
// cross matching arrangment arrays
string[] rsArray = new string[] { "Lead", "Rhythm", "Bass" };
string[] zigArray = new string[] { "PART REAL_GUITAR_22", "PART REAL_GUITAR", "PART REAL_BASS_22" };
int arrIndex = -1;
foreach (var arrangement in zigArray)
{
arrIndex++;
var guitarTrack = zigSong.Tracks.SingleOrDefault(tr => arrangement.Equals(tr.Name));
if (guitarTrack == null)
{
continue;
//throw new Exception("Couldn't find a guitar track");
}
foundTrack = true;
var rsSong = new Song2014();
AddSongMetadata(rsSong, zigSong, rsArray[arrIndex]);
AddEbeats(rsSong, zigSong, arrangement);
AddNotes(rsSong, zigSong, arrangement);
AddToneProps(rsSong, rsArray[arrIndex]);
var destDir = Path.GetDirectoryName(destPath);
var destName = Path.GetFileNameWithoutExtension(destPath);
var xmlDestPath = String.Format("{0}_{1}.xml", Path.Combine(destDir, destName), rsArray[arrIndex]);
using (FileStream stream = new FileStream(xmlDestPath, FileMode.Create))
{
rsSong.Serialize(stream, true);
}
}
if (!foundTrack)
throw new NullReferenceException("Did not find any Rocksmith 2014 compatible Ziggy Pro tracks in " + Path.GetFileName(zigSrcPath) + Environment.NewLine);
}