Ejemplo n.º 1
0
        private AdxKeyConfidence GetReencodeConfidence(CriAdxKey key, string filename)
        {
            CriAdxFormat adx;

            using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                var reader = new AdxReader {
                    EncryptionKey = key
                };
                adx = (CriAdxFormat)reader.ReadFormat(stream);
            }

            Pcm16Format  pcm  = adx.ToPcm16();
            CriAdxFormat adx2 = new CriAdxFormat().EncodeFromPcm16(pcm);

            var confidence = new AdxKeyConfidence();

            int toCompareFull  = adx.Channels[0].Audio.Length;
            int toCompareShort = Math.Min(adx.FrameSize * 100, toCompareFull);

            for (int i = 0; i < adx.ChannelCount; i++)
            {
                confidence.TotalBytesFull      += toCompareFull;
                confidence.TotalBytesShort     += toCompareShort;
                confidence.IdenticalBytesFull  += Common.DiffArrays(adx.Channels[i].Audio, adx2.Channels[i].Audio, toCompareFull);
                confidence.IdenticalBytesShort += Common.DiffArrays(adx.Channels[i].Audio, adx2.Channels[i].Audio, toCompareShort);
            }

            return(confidence);
        }
Ejemplo n.º 2
0
        public static void AdxToWav(FileInfo input, FileInfo output)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }
            if (output == null)
            {
                throw new ArgumentNullException(nameof(output));
            }

            try
            {
                var data = new AdxReader().Read(input.OpenRead());
                using var os = output.Open(FileMode.Create, FileAccess.Write, FileShare.Delete);
                new WaveWriter().WriteToStream(data, os);
            }
            catch (Exception)
            {
                var data = new AdxReader {
                    EncryptionKey = new CriAdxKey(0x0030D9E8)
                }.Read(input.OpenRead());
                using var os = output.Open(FileMode.Create, FileAccess.Write, FileShare.Delete);
                new WaveWriter().WriteToStream(data, os);
            }
        }
Ejemplo n.º 3
0
        private int LoadFiles(params string[] files)
        {
            int type = 0;

            foreach (string file in files)
            {
                using (var stream = new FileStream(file, FileMode.Open, FileAccess.Read))
                {
                    var adx = new AdxReader().ReadMetadata(stream);
                    if (type == 0)
                    {
                        type = adx.Revision;
                    }
                    if (adx.Revision != type)
                    {
                        continue;
                    }

                    var audioData = new byte[adx.AudioDataLength];
                    stream.Position = adx.HeaderSize + 4;
                    stream.Read(audioData, 0, adx.AudioDataLength);
                    Files.Add(new AdxFile(adx, audioData, file));
                }
            }

            return(type);
        }
Ejemplo n.º 4
0
        private void ConvertDAT(string filename)
        {
            // Load file
            WriteLog("Opening file: " + filename);
            byte[] file = File.ReadAllBytes(filename);
            switch (System.Text.Encoding.ASCII.GetString(file, 0, 0x10))
            {
            case "archive  V2.2\0\0\0":
                is2010 = false;
                WriteLog("Bank " + Path.GetFileName(filename) + " is already in the 2004 format.");
                return;

            case "archive  V2.DMZ\0":
                is2010 = true;
                break;

            default:
                WriteLog("Bank " + Path.GetFileName(filename) + "error: Unknown archive version/type");
                return;
            }
            int count = BitConverter.ToInt32(file, 0x10);

            files = new List <FENTRY>(count);
            for (int i = 0; i < count; i++)
            {
                files.Add(new FENTRY(file, 0x14 + (i * 0xC)));
            }
            // Convert
            WriteLog("Converting soundbank " + Path.GetFileName(filename) + "...");
            List <FENTRY> list = new List <FENTRY>(files);

            foreach (FENTRY item in list)
            {
                byte[] waveFile = Compress.ProcessBuffer(item.file);
                if (is2010)
                {
                    AudioData audio = new AdxReader().Read(waveFile);
                    item.file = new WaveWriter().GetFile(audio);
                }
            }
            WriteLog("Saving DAT file: " + filename + "...");
            int fsize = 0x14;
            int hloc  = fsize;

            fsize += files.Count * 0xC;
            int tloc = fsize;

            foreach (FENTRY item in files)
            {
                fsize += item.name.Length + 1;
            }
            int floc = fsize;

            foreach (FENTRY item in files)
            {
                fsize += item.file.Length;
            }
            byte[] datfile = new byte[fsize];
            System.Text.Encoding.ASCII.GetBytes("archive  V2.2").CopyTo(datfile, 0);
            BitConverter.GetBytes(files.Count).CopyTo(datfile, 0x10);
            foreach (FENTRY item in files)
            {
                BitConverter.GetBytes(tloc).CopyTo(datfile, hloc);
                hloc += 4;
                System.Text.Encoding.ASCII.GetBytes(item.name).CopyTo(datfile, tloc);
                tloc += item.name.Length + 1;
                BitConverter.GetBytes(floc).CopyTo(datfile, hloc);
                hloc += 4;
                item.file.CopyTo(datfile, floc);
                floc += item.file.Length;
                BitConverter.GetBytes(item.file.Length).CopyTo(datfile, hloc);
                hloc += 4;
            }
            File.WriteAllBytes(filename, datfile);
            progressBar1.Value += 1;
        }