Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }