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); } } }