コード例 #1
0
ファイル: Program.cs プロジェクト: easyaspi314/midfix4agb
        static void Main(string[] args)
        {
            Stopwatch timer = new Stopwatch();

            timer.Start();
            string inputFile    = "";
            string outputFile   = "";
            double modScale     = 0.5;
            byte   modt         = 0;
            bool   fixAgbEvents = true;
            bool   fixVolScale  = true;
            bool   fixLoop      = true;

            // do an argument loop
            int isInputFile = 0;

            if (args.Length == 0)
            {
                showUsage();
            }

            for (int i = 0; i < args.Length; i++)
            {
                string[] splitArg = args[i].Split('=');
                if (splitArg.Length == 1)
                {
                    if (isInputFile == 0)
                    {
                        inputFile = splitArg[0];
                        isInputFile++;
                    }
                    else if (isInputFile == 1)
                    {
                        outputFile = splitArg[0];
                        isInputFile++;
                    }
                    else
                    {
                        showUsage();
                        return;
                    }
                }
                else if (splitArg.Length == 2)  // if regular argument
                {
                    switch (splitArg[0])
                    {
                    case "modscale":
                        modScale = Convert.ToDouble(splitArg[1]);
                        if (modScale < 0)
                        {
                            showUsage();
                            Console.WriteLine("The Mod Scale must not be negative!");
                            return;
                        }
                        break;

                    case "modt":
                        modt = Convert.ToByte(splitArg[1]);
                        if (modt > 2)
                        {
                            showUsage();
                            Console.WriteLine("The MODT must be 0, 1 or 2!");
                            return;
                        }
                        break;

                    case "fixloop":
                        fixLoop = Convert.ToBoolean(splitArg[1]);
                        break;

                    case "fixvolscale":
                        fixVolScale = Convert.ToBoolean(splitArg[1]);
                        break;

                    case "addagbevents":
                        fixAgbEvents = Convert.ToBoolean(splitArg[1]);
                        break;

                    default:
                        Console.WriteLine("Unknown argument: " + splitArg[0]);
                        showUsage();
                        break;
                    }
                }
            }

            // automatically name new outfile name if none is specified

            if (inputFile != "")
            {
                inputFile = Path.GetFullPath(inputFile);
            }

            if (inputFile != "" && outputFile == "")
            {
                outputFile = Path.GetFileNameWithoutExtension(inputFile) + "_FINAL.mid";
                outputFile = Path.Combine(Path.GetDirectoryName(inputFile), outputFile);
            }
            else
            {
                outputFile = Path.GetFullPath(outputFile);
            }

            Console.WriteLine("Inputfile:");
            Console.WriteLine(inputFile);
            Console.WriteLine("Outputfile:");
            Console.WriteLine(outputFile);

            csmidi.MidiFile midiFile = new csmidi.MidiFile();
            midiFile.loadMidiFromFile(inputFile);

            if (fixAgbEvents)
            {
                MidiFixer.addAgbCompatibleEvents(midiFile, modt);
            }
            if (fixVolScale)
            {
                MidiFixer.combineVolumeAndExpression(midiFile);
            }
            MidiFixer.addModulationScale(midiFile, modScale);
            if (fixVolScale)
            {
                MidiFixer.addExponentialScale(midiFile);
            }
            if (fixLoop)
            {
                MidiFixer.fixLoopCarryBack(midiFile);
            }

            midiFile.saveMidiToFile(outputFile);
            timer.Stop();

            Console.WriteLine("Fixed midi in : " + timer.ElapsedMilliseconds.ToString() + "ms");
        }