Ejemplo n.º 1
0
        private static async Task DecryptCpkFile(FileInfo file, DirectoryInfo outputfolder)
        {
            Console.WriteLine("解包音频: " + file.Name);
            var acbFilename = "";
            await Task.Run(() =>
            {
                try
                {
                    acbFilename = FGOAudioDecoder.UnpackCpkFiles(file, outputfolder);
                }
                catch (Exception)
                {
                    //ignore
                }
            });

            if (acbFilename == "")
            {
                Console.WriteLine("该文件不是cpk类型文件.请重试.");
                return;
            }

            await Task.Run(() => { FGOAudioDecoder.DecodeAcbFiles(new FileInfo(acbFilename), outputfolder); });

            Thread.Sleep(1500);
        }
Ejemplo n.º 2
0
        private static async Task DisplayMenu()
        {
            Console.Clear();
            try
            {
                int arg;
                Console.WriteLine(
                    "------FGOAudioDecoder------\n" +
                    "1: cpk2wav(单文件)\t" +
                    "2: cpk2wav(选择文件夹批量转换)\n" +
                    "3: Usm2(m2v+wav)(单文件)\t" +
                    "4: Usm2(m2v+wav)(选择文件夹批量转换)\n" +
                    "999: 退出程序\n" +
                    "请选择功能..."
                    );

                if (arguments == null)
                {
                    try
                    {
                        arg = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (Exception)
                    {
                        arg = -1;
                    }
                }
                else
                {
                    arg = Convert.ToInt32(arguments[1]);
                    Console.WriteLine(arg);
                }

                switch (arg)
                {
                case 1:
                    while (arguments == null)
                    {
                        Console.WriteLine("请将cpk文件拖入窗口内获取路径,并按回车键:");
                        var filepath     = Console.ReadLine().Replace("\"", "");
                        var file         = new FileInfo(filepath);
                        var outputfolder = file.DirectoryName;
                        var output       = new DirectoryInfo(outputfolder);
                        await Task.Run(async() => { await DecryptCpkFile(file, output); });

                        Thread.Sleep(1000);
                        Console.WriteLine("解包完成,点击任意键继续...");
                        Console.ReadKey(true);
                        await DisplayMenu();
                    }

                    break;

                case 2:
                    while (arguments == null)
                    {
                        Console.WriteLine("请将放有cpk文件的文件夹目录拖入窗口内获取路径,并按回车键:");
                        var cpkfolderpath = Console.ReadLine().Replace("\"", "");
                        var cpkfolder     = new DirectoryInfo(cpkfolderpath);
                        foreach (var cpkfile in cpkfolder.GetFiles("*.cpk.bytes", SearchOption.AllDirectories))
                        {
                            await Task.Run(async() => { await DecryptCpkFile(cpkfile, cpkfolder); });
                        }
                        Thread.Sleep(1000);
                        Console.WriteLine("解包完成,点击任意键继续...");
                        Console.ReadKey(true);
                        await DisplayMenu();

                        break;
                    }

                    Console.WriteLine("请将放有cpk文件的文件夹目录拖入窗口内获取路径,并按回车键:");
                    var cpkfolderpathquick = arguments[0];
                    Console.WriteLine(cpkfolderpathquick);
                    var cpkfolderquick = new DirectoryInfo(cpkfolderpathquick);
                    foreach (var cpkfile2 in cpkfolderquick.GetFiles("*.cpk.bytes", SearchOption.AllDirectories))
                    {
                        await Task.Run(async() => { await DecryptCpkFile(cpkfile2, cpkfolderquick); });
                    }
                    Thread.Sleep(1000);
                    Console.WriteLine("解包完成,点击任意键继续...");
                    break;

                case 3:
                    while (arguments == null)
                    {
                        Console.WriteLine("请将Usm文件拖入窗口内获取路径,并按回车键:");
                        var filepathusm = Console.ReadLine().Replace("\"", "");
                        var fileusm     = new FileInfo(filepathusm);
                        FGOAudioDecoder.DecodeUsmFiles(fileusm);
                        Thread.Sleep(1000);
                        Console.WriteLine("解包完成,点击任意键继续...");
                        Console.ReadKey(true);
                        await DisplayMenu();
                    }

                    break;

                case 4:
                    while (arguments == null)
                    {
                        Console.WriteLine("请将放有Usm文件的文件夹目录拖入窗口内获取路径,并按回车键:");
                        var usmfolderpath = Console.ReadLine().Replace("\"", "");
                        var usmfolder     = new DirectoryInfo(usmfolderpath);
                        foreach (var usmfile in usmfolder.GetFiles("*.usm", SearchOption.AllDirectories))
                        {
                            FGOAudioDecoder.DecodeUsmFiles(usmfile);
                        }
                        Thread.Sleep(1000);
                        Console.WriteLine("解包完成,点击任意键继续...");
                        Console.ReadKey(true);
                        await DisplayMenu();

                        break;
                    }

                    Console.WriteLine("请将放有Usm文件的文件夹目录拖入窗口内获取路径,并按回车键:");
                    var usmfolderpathQuick = arguments[0];
                    Console.WriteLine(usmfolderpathQuick);
                    var usmfolderQuick = new DirectoryInfo(usmfolderpathQuick);
                    foreach (var usmfile2 in usmfolderQuick.GetFiles("*.usm", SearchOption.AllDirectories))
                    {
                        FGOAudioDecoder.DecodeUsmFiles(usmfile2);
                    }
                    Thread.Sleep(1000);
                    Console.WriteLine("解包完成,点击任意键继续...");
                    break;

                case 999:
                    return;

                default:
                    Console.WriteLine("请输入一个有效选项,点击任意键重新选择...");
                    Console.ReadKey(true);
                    await DisplayMenu();

                    break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine("遇到错误,点击任意键重新开始...");
                Console.ReadKey(true);
                await DisplayMenu();
            }
        }