private async void DVPL_Create_Dir_B_Click(object sender, RoutedEventArgs e) { if (IsBusy || IsOpenDialog) { return; } IsOpenDialog = true; BetterFolderBrowser bfb = new BetterFolderBrowser() { Title = ".dvplファイルが存在するフォルダを選択してください。", RootFolder = Sub_Code.Get_OpenDirectory_Path(), Multiselect = false, }; if (bfb.ShowDialog() == DialogResult.OK) { IsBusy = true; Sub_Code.Set_Directory_Path(bfb.SelectedFolder); uint Dir_Files = 0; List <string> Add_Files = new List <string>(); foreach (string file in Directory.EnumerateFiles(bfb.SelectedFolder, "*", SearchOption.AllDirectories)) { if (Dir_Files >= 100000) { Message_Feed_Out("フォルダ内のファイル数が多すぎます。"); Add_Files.Clear(); IsBusy = false; IsOpenDialog = false; return; } if (Path.GetExtension(file) != ".dvpl") { Add_Files.Add(file); } Dir_Files++; } if (Add_Files.Count == 0) { Message_Feed_Out("ファイルが見つかりませんでした。"); IsBusy = false; IsOpenDialog = false; return; } IsMessageShowing = false; Message_T.Text = "ファイルを変換しています..."; await Task.Delay(50); await Multithread.DVPL_Pack(Add_Files, DVPL_Delete_C.IsChecked.Value); Message_Feed_Out(Add_Files.Count + "個のファイルを変換しました。"); } bfb.Dispose(); IsBusy = false; IsOpenDialog = false; }
private async void Save_File_Create_B_Click(object sender, RoutedEventArgs e) { if (Selected_File == "" || BNK_FSB_Voices.Count == 0) { Message_Feed_Out("音声ファイルが選択されていません。"); return; } if (Project_Name_T.Text == "") { Message_Feed_Out("プロジェクト名が設定されていません。"); return; } if (Project_Name_T.Text.Contains(" ")) { Message_Feed_Out("プロジェクト名に空白を連続で使用することはできません。"); return; } try { Directory.CreateDirectory(Voice_Set.Special_Path + "/Temp/" + Project_Name_T.Text); Directory.Delete(Voice_Set.Special_Path + "/Temp", true); if (Project_Name_T.Text.Contains("/") || Project_Name_T.Text.Contains("\\")) { throw new Exception("プロジェクト名に'/'を付けることはできません。"); } } catch (Exception e1) { Message_Feed_Out("プロジェクト名に不適切な文字が含まれています。"); Sub_Code.Error_Log_Write(e1.Message); return; } System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog() { Title = "セーブファイルの保存先を指定してください。", Filter = "セーブファイル(*.wvs)|*.wvs", InitialDirectory = Directory.GetCurrentDirectory() }; if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { IsBusy = true; try { string Ex = Path.GetExtension(Selected_File); if (Ex == ".fsb") { Message_T.Text = "音声ファイルを抽出しています..."; await Task.Delay(50); Fmod_File_Extract_V2.FSB_Extract_To_Directory(Selected_File, Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices_Temp"); Message_T.Text = ".wavファイルをエンコードしています..."; await Task.Delay(50); await Multithread.Convert_To_Wav(Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices_Temp", Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices", true, true, false, false); Directory.Delete(Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices_Temp", true); } else if (Ex == ".bnk") { Message_T.Text = ".wavまたは.oggに変換しています..."; await Task.Delay(50); if (IsPCKMode) { Wwise_File_Extract_V1 Wwise_PCK = new Wwise_File_Extract_V1(Selected_File); await Wwise_PCK.Async_Wwise_Extract_To_WEM_Directory(Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices"); await Wwise_PCK.Async_Wwise_Extract_To_OGG_Directory(Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices"); Wwise_PCK.Pck_Clear(); } else { Wwise_File_Extract_V2 Wwise_BNK = new Wwise_File_Extract_V2(Selected_File); Wwise_BNK.Wwise_Extract_To_WEM_Directory_V2(Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices"); Wwise_BNK.Bank_Clear(); } Message_T.Text = "不要な音声ファイルを削除しています..."; await Task.Delay(50); string[] All_Files = Directory.GetFiles(Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices", "*", SearchOption.TopDirectoryOnly); foreach (string File_Now in All_Files) { if (!Need_Files.Contains(Path.GetFileNameWithoutExtension(File_Now))) { Sub_Code.File_Delete_V2(File_Now); } } string[] Files = Directory.GetFiles(Voice_Set.Local_Path + "/Projects/" + Project_Name_T.Text + "/All_Voices", "*.wem", SearchOption.TopDirectoryOnly); foreach (string File_Now in Files) { Sub_Code.File_Delete_V2(File_Now); } } StreamWriter stw = File.CreateText(sfd.FileName + ".tmp"); stw.WriteLine(Project_Name_T.Text + "|IsNotChangeProjectNameMode=true"); for (int Number = 0; Number < BNK_FSB_Voices.Count; Number++) { foreach (string Name in BNK_FSB_Voices[Number]) { stw.WriteLine(Number + "|" + Sub_Code.File_Get_FileName_No_Extension(Voice_Set.Local_Path + "\\Projects\\" + Project_Name_T.Text + "\\All_Voices\\" + Name)); } } stw.Close(); Sub_Code.File_Encrypt(sfd.FileName + ".tmp", sfd.FileName, "SRTTbacon_Create_Voice_Save", true); Message_Feed_Out("保存しました。\nProjectsフォルダに該当する音声が入っています。"); Flash.Flash_Start(); } catch (Exception e1) { Sub_Code.Error_Log_Write(e1.Message); Message_Feed_Out("エラーが発生しました。"); } IsBusy = false; } sfd.Dispose(); }