コード例 #1
0
        public static string ExtractSdat(string pSdatPath)
        {
            string fullPath   = Path.GetFullPath(pSdatPath);
            string outputPath = null;
            string waveArcOutputPath;

            if (!File.Exists(fullPath))
            {
                throw new FileNotFoundException(String.Format("Cannot find file <{0}>", fullPath));
            }
            else
            {
                Swar   swar = new Swar();
                string swavOutputPath;

                using (FileStream fs = File.OpenRead(fullPath))
                {
                    Type dataType = FormatUtil.getObjectType(fs);

                    if (dataType != null && dataType.Name.Equals("Sdat"))
                    {
                        string filePrefix = Path.GetFileNameWithoutExtension(fullPath);
                        outputPath = Path.Combine(Path.GetDirectoryName(fullPath), filePrefix);

                        Sdat sdat = new Sdat();
                        sdat.Initialize(fs, fullPath);

                        sdat.ExtractBanks(fs, outputPath);
                        sdat.ExtractSseqs(fs, outputPath);
                        sdat.ExtractSeqArc(fs, outputPath);
                        sdat.ExtractStrms(fs, outputPath);
                        waveArcOutputPath = sdat.ExtractWaveArcs(fs, outputPath);

                        // extract SWAVs
                        if (!String.IsNullOrEmpty(waveArcOutputPath))
                        {
                            foreach (string f in Directory.GetFiles(waveArcOutputPath, "*" + Swar.FILE_EXTENSION))
                            {
                                using (FileStream swarFs = File.Open(f, FileMode.Open, FileAccess.Read))
                                {
                                    dataType = FormatUtil.getObjectType(swarFs);

                                    if (dataType != null && dataType.Name.Equals("Swar"))
                                    {
                                        swavOutputPath = Path.Combine(waveArcOutputPath, Path.GetFileNameWithoutExtension(f));
                                        swar.Initialize(swarFs, f);

                                        ExtractAndWriteSwavFromSwar(swarFs, swar, swavOutputPath);
                                    }
                                }
                            }
                        }

                        sdat.BuildSmap(outputPath, filePrefix);
                    }
                }
            }
            return(outputPath);
        }
コード例 #2
0
        public static void ExtractAndWriteSwavFromSwar(Stream pStream, Swar pSwar, string pOutputPath, bool includeOutputFolderInFileName)
        {
            string outputFileName;
            string outputFolderName = Path.GetFileName(pOutputPath);

            if (pSwar.SampleOffsets.Length > 0)
            {
                if (!Directory.Exists(pOutputPath))
                {
                    Directory.CreateDirectory(pOutputPath);
                }
            }

            for (int i = 0; i < pSwar.SampleOffsets.Length; i++)
            {
                if (pSwar.SampleOffsets[i] > 0)
                {
                    Swav.SwavInfo swavInfo = Swav.GetSwavInfo(pStream, pSwar.SampleOffsets[i]);
                    UInt32        fileSize = (swavInfo.LoopOffset + swavInfo.NonLoopLength) * 4;

                    if (includeOutputFolderInFileName)
                    {
                        outputFileName = Path.Combine(pOutputPath, String.Format("{0}_{1}", outputFolderName, i.ToString("X2")) + Swav.FILE_EXTENSION);
                    }
                    else
                    {
                        outputFileName = Path.Combine(pOutputPath, i.ToString("X2") + Swav.FILE_EXTENSION);
                    }

                    using (BinaryWriter bw = new BinaryWriter(File.Open(outputFileName, FileMode.Create, FileAccess.Write)))
                    {
                        bw.Write(Swav.ASCII_SIGNATURE);
                        bw.Write(BitConverter.GetBytes(fileSize + 0x10 + 0x08 + Swav.SWAV_INFO_SIZE));
                        bw.Write(BitConverter.GetBytes((UInt16)0x10));
                        bw.Write(BitConverter.GetBytes((UInt16)0x01));

                        bw.Write(Swav.DATA_SIGNATURE);
                        bw.Write(BitConverter.GetBytes(fileSize + 0x08 + Swav.SWAV_INFO_SIZE));
                        bw.Write(ParseFile.ParseSimpleOffset(pStream, pSwar.SampleOffsets[i], (int)Swav.SWAV_INFO_SIZE));
                        bw.Write(ParseFile.ParseSimpleOffset(pStream, pSwar.SampleOffsets[i] + Swav.SWAV_INFO_SIZE, (int)fileSize));
                    }
                }
            }
        }
コード例 #3
0
 public static void ExtractAndWriteSwavFromSwar(Stream pStream, Swar pSwar, string pOutputPath)
 {
     ExtractAndWriteSwavFromSwar(pStream, pSwar, pOutputPath, false);
 }