public Song Convert(string inputFileName, ILog logger) { Song song; if (!File.Exists(inputFileName)) { throw new Exception("Project file not found."); } var extension = Path.GetExtension(inputFileName).ToLower(); switch (extension) { case ".als": var liveProject = new LiveParser().Process(inputFileName); song = new LiveConverter().Process(liveProject, logger); break; case ".xrns": var renoiseProject = new RenoiseParser().Process(inputFileName); song = new RenoiseConverter().Process(renoiseProject, logger); break; case ".flp": var flProject = Monad.FLParser.Project.Load(inputFileName, false); song = new FLConverter().Process(flProject, logger); break; case ".rpp": var reaperProject = new ReaperParser.ReaperParser().ParseProject(inputFileName); song = new ReaperConverter().Process(reaperProject, logger); break; default: throw new Exception("Invalid file format."); } song.DetectWarnings(logger); song.DeltaEncode(); song.Restructure(logger); return(song); }
public RenoiseSong InjectPatches(Song song, ILog logger) { this.logger = logger; var parser = new RenoiseParser(); var rnsSong = parser.Process(WaveSabreConvert.Properties.Resources.RenoiseTemplate); var insTemplate = rnsSong.Instruments.Instrument[0]; instrumentTemplate = Utils.Serializer(rnsSong.Instruments.Instrument[0]); var trackTemp = (SequencerTrack)rnsSong.Tracks.Items[0]; trackTemplate = Utils.Serializer(trackTemp); var fxTemp = (AudioPluginDevice)trackTemp.FilterDevices.Devices.Items[1]; fxTemplate = Utils.Serializer(fxTemp); var insList = new List <RenoiseInstrument>(); var trkList = new List <object>(); var trkIndex = 0; foreach (var track in song.Tracks) { if (track.Events.Count > 0) { logger.WriteLine(string.Format("Converting track: {0}", track.Name)); insList.Add(CreateInstrument(track, trkIndex)); trkList.Add(CreateTrack(track)); trkIndex++; } } foreach (var t in rnsSong.Tracks.Items) { if (t.GetType() == typeof(SequencerMasterTrack)) { trkList.Add(t); break; } } rnsSong.Instruments.Instrument = insList.ToArray(); rnsSong.Tracks.Items = trkList.ToArray(); var trk = rnsSong.PatternPool.Patterns.Pattern[0].Tracks.Items[0]; var mst = rnsSong.PatternPool.Patterns.Pattern[0].Tracks.Items[1]; var patList = new List <object>(); for (var i = 0; i < trkList.Count; i++) { if (i == trkList.Count - 1) { patList.Add(mst); } else { patList.Add(trk); } } rnsSong.PatternPool.Patterns.Pattern[0].Tracks.Items = patList.ToArray(); return(rnsSong); }