Ejemplo n.º 1
0
        public override void Perform()
        {
            var chain = new Transformer <WaveBank>();

            string inputName = Path.GetFileName(mInputFile);

            mareep.WriteMessage("Opening input file '{0}'...\n", inputName);

            using (var instream = mareep.OpenFile(mInputFile)) {
                mareep.WriteMessage("Creating output file '{0}'...\n", Path.GetFileName(mOutputFile));

                using (var outstream = mareep.CreateFile(mOutputFile)) {
                    mareep.WriteMessage("Linking deserializer...\n");

                    switch (mInputFormat)
                    {
                    case IOFormat.Xml: chain.AppendLink(new XmlWaveBankDeserializer(CreateXmlInput(instream).Root, inputName)); break;

                    case IOFormat.LE: chain.AppendLink(new BinaryWaveBankDeserializer(CreateLittleBinaryInput(instream), inputName)); break;

                    case IOFormat.BE: chain.AppendLink(new BinaryWaveBankDeserializer(CreateBigBinaryInput(instream), inputName)); break;
                    }

                    mareep.WriteMessage("Linking wave transferer...\n");
                    var inputDirectory  = Path.GetDirectoryName(Path.GetFullPath(mInputFile));
                    var outputDirectory = Path.GetDirectoryName(Path.GetFullPath(mOutputFile));
                    var bankDirectory   = Path.Combine(inputDirectory, mBankPath);
                    var waveDirectory   = Path.Combine(outputDirectory, mWavePath);

                    if (mInputFormat == IOFormat.Xml && IsFormatBinary(mOutputFormat))
                    {
                        chain.AppendLink(new WaveArchivePacker(bankDirectory, waveDirectory, mMixerMode));
                    }
                    else if (IsFormatBinary(mInputFormat) && mOutputFormat == IOFormat.Xml)
                    {
                        chain.AppendLink(new WaveArchiveExtractor(bankDirectory, waveDirectory, mExtractWav));
                    }

                    mareep.WriteMessage("Linking serializer...\n");

                    switch (mOutputFormat)
                    {
                    case IOFormat.Xml: chain.AppendLink(new XmlWaveBankSerializer(CreateXmlOutput(outstream))); break;

                    case IOFormat.LE: chain.AppendLink(new BinaryWaveBankSerializer(CreateLittleBinaryOutput(outstream))); break;

                    case IOFormat.BE: chain.AppendLink(new BinaryWaveBankSerializer(CreateBigBinaryOutput(outstream))); break;

                    case IOFormat.SoundFont: chain.AppendLink(new SoundFontWaveBankSerializer(CreateLittleBinaryOutput(outstream), inputDirectory)); break;
                    }

                    mareep.WriteMessage("Calling transform chain...\n");
                    chain.Transform(null);
                }
            }
        }