public async void Window_Show_V3(string BNK_Name, List <List <string> > Lists) { Opacity = 0; Visibility = Visibility.Visible; Language_Left_B.Visibility = Visibility.Hidden; Language_Right_B.Visibility = Visibility.Hidden; Android_T.Visibility = Visibility.Hidden; Volume_Set_C.Visibility = Visibility.Hidden; Volume_Set_T.Visibility = Visibility.Hidden; DVPL_C.Visibility = Visibility.Hidden; DVPL_T.Visibility = Visibility.Hidden; Exit_B.Visibility = Visibility.Hidden; Default_Voice_Mode_C.Visibility = Visibility.Hidden; Default_Voice_Mode_T.Visibility = Visibility.Hidden; Save_B.Content = "保存"; Configs_Load(); SE_Dir = Voice_Set.Special_Path + "/SE"; Project_T.Text = "プロジェクト名:" + BNK_Name; for (int Number = 0; Number <= Lists.Count - 1; Number++) { string Name = Voice_Set.Get_Voice_Type_Japanese_Name_V2(Number); int Number_01 = Lists[Number].Count; Voice_Type.Add(Name); Voice_Type_Number.Add(Number_01); Voice_Lists.Items.Add(Name + ":" + Number_01 + "個"); } while (Opacity < 1 && !IsClosing) { Opacity += Sub_Code.Window_Feed_Time; await Task.Delay(1000 / 60); } }
public void Window_Show() { try { XDocument xml2 = XDocument.Load(Voice_Set.FTPClient.GetFileRead("/WoTB_Voice_Mod/" + Voice_Set.SRTTbacon_Server_Name + "/Server_Config.dat")); XElement item2 = xml2.Element("Server_Create_Config"); if (bool.Parse(item2.Element("IsEnablePassword").Value)) { Set_Password_C.IsChecked = true; Set_Password_T.Text = item2.Element("Password").Value; } R_18_C.IsChecked = bool.Parse(item2.Element("IsEnableR18").Value); Explanation_T.Text = item2.Element("Explanation").Value; } catch { System.Windows.MessageBox.Show("プロジェクトデータが破損しています。管理者(SRTTbacon#2395)へご連絡ください。"); } Project_Name_T.Text = Voice_Set.SRTTbacon_Server_Name; Message_T.Text = ""; Window_Feed_In(); string[] Voice_Files = Directory.GetFiles(Special_Path + "/Server/" + Voice_Set.SRTTbacon_Server_Name + "/Voices", "*", SearchOption.TopDirectoryOnly); foreach (string File in Voice_Files) { string Name_Only = Path.GetFileName(File); if (!Voice_Set.Voice_Name_Hide(Name_Only)) { Voice_List.Items.Add(Name_Only); } } }
//Voice_Create.xaml.csから引用 async Task BNK_Create_V2(string Voice_Dir, string Save_Dir) { if (!Directory.Exists(Voice_Dir)) { return; } Message_T.Text = "プロジェクトファイルを作成しています..."; await Task.Delay(50); FileInfo fi = new FileInfo(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Default Work Unit.wwu"); if (File.Exists(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp") && fi.Length >= 900000) { File.Copy(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp", Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Default Work Unit.wwu", true); } if (!File.Exists(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp")) { File.Copy(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Default Work Unit.wwu", Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp", true); } Wwise_Class.Wwise_Project_Create Wwise = new Wwise_Class.Wwise_Project_Create(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod"); Voice_Set.Set_SE_Change_Name(Wwise.Project_Dir + "\\Originals\\Voices\\ja"); Wwise.Sound_Add_Wwise(Voice_Dir); Wwise.Save(); if (File.Exists(Voice_Dir + "/battle_bgm_01.wav")) { Message_T.Text = ".bnkファイルを作成しています...\nBGMファイルが含まれているため時間がかかります。"; } else { Message_T.Text = ".bnkファイルを作成しています..."; } await Task.Delay(50); Wwise.Project_Build("voiceover_crew", Save_Dir + "/voiceover_crew.bnk"); await Task.Delay(500); Wwise.Project_Build("ui_battle", Save_Dir + "/ui_battle.bnk"); await Task.Delay(500); Wwise.Project_Build("ui_battle_basic", Save_Dir + "/ui_battle_basic.bnk"); await Task.Delay(500); Wwise.Project_Build("ui_chat_quick_commands", Save_Dir + "/ui_chat_quick_commands.bnk"); await Task.Delay(500); Wwise.Project_Build("reload", Save_Dir + "/reload.bnk"); Wwise.Clear(); if (File.Exists(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp")) { File.Copy(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp", Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Default Work Unit.wwu", true); } }
public void Window_Show_V2(string Project_Name, List <List <string> > Lists) { //画面を表示(オフラインモードで行った場合) Volume_Set_C.Visibility = Visibility.Visible; Volume_Set_T.Visibility = Visibility.Visible; Default_Voice_Mode_C.Visibility = Visibility.Visible; Default_Voice_Mode_T.Visibility = Visibility.Visible; Exit_B.Visibility = Visibility.Visible; Save_B.Content = "作成"; Language_Left_B.Visibility = Visibility.Visible; Language_Right_B.Visibility = Visibility.Visible; Android_T.Text = "言語:" + Languages[Select_Language]; Configs_Load(); SE_Dir = Voice_Set.Special_Path + "/SE"; Project_T.Text = "プロジェクト名:" + Project_Name; for (int Number = 0; Number < Lists.Count; Number++) { string Name = Voice_Set.Get_Voice_Type_Japanese_Name_V2(Number); int Number_01 = Lists[Number].Count; Voice_Type.Add(Name); Voice_Type_Number.Add(Number_01); Voice_Lists.Items.Add(Name + ":" + Number_01 + "個"); } }
private void Enemy_Ricochet_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("tyoudan"); }
private void Own_Fire_Stop_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("syouka"); }
private void Gun_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("housinhason"); }
private void Enemy_Fire_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("tekikasai"); }
private void Engine_Functional_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("enjinhukkyuu"); }
private void Surveying_Destroy_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("kansokutaiha"); }
private void Surveying_Functional_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("kansokuhukkyuu"); }
private void Battle_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("battle"); }
private void Surveying_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("kansokuhason"); }
private void Radioman_Kill_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("musensyu"); }
private void Radio_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("musen"); }
private void Ally_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("mikata"); }
private void Commander_Kill_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("syatyou"); }
private void Track_Destroy_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("ritaitaiha"); }
private void Driver_Kill_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("souzyuusyu"); }
private void Track_Functional_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("ritaihukkyuu"); }
private void Enemy_Kill_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("gekiha"); }
private void Ammo_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("danyaku"); }
private void Own_Fire_Start_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("kasai"); }
private void Turret_Functional_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("houtouhukkyuu"); }
private void Fuel_Tank_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("nenryou"); }
//変換 //fsbからwavファイルを抽出し、ファイル名を変更、adpcmの場合ファイルが破損しているため復元してから.bnkを作成 private async void Chnage_To_Wwise_B_Click(object sender, RoutedEventArgs e) { if (IsClosing || Opacity < 1) { return; } if (Voice_FSB_File == "") { Message_Feed_Out("FSB file is not selected."); return; } try { IsClosing = true; BetterFolderBrowser sfd = new BetterFolderBrowser() { Title = "Please specify the save destination folder.", RootFolder = Sub_Code.Get_OpenDirectory_Path(), Multiselect = false }; if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { FModChannel.setPaused(true); await Task.Delay(50); Sub_Code.Set_Directory_Path(sfd.SelectedFolder); FSB_Details_L.Items[2] = "Output:" + sfd.SelectedFolder.Substring(sfd.SelectedFolder.LastIndexOf("\\") + 1); if (Directory.Exists(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices_TMP")) { Directory.Delete(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices_TMP", true); } if (Directory.Exists(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices")) { Directory.Delete(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices", true); } Message_T.Text = "Extracting audio from FSB file..."; await Task.Delay(50); Fmod_File_Extract_V2.FSB_Extract_To_Directory(Voice_FSB_File, Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices_TMP"); Message_T.Text = "Encoding *.wav files..."; await Task.Delay(50); await Multithread.Convert_To_Wav(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices_TMP", Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices", true); Directory.Delete(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices_TMP", true); Message_T.Text = "Renaming *.wav files..."; await Task.Delay(50); Voice_Set.Voice_BGM_Name_Change_From_FSB(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices"); string[] Reload_Files = Directory.GetFiles(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices", "reload_*", SearchOption.TopDirectoryOnly); foreach (string Reload_Now in Reload_Files) { FileInfo fi_reload = new FileInfo(Reload_Now); if (fi_reload.Length == 290340 || fi_reload.Length == 335796 || fi_reload.Length == 336036 || fi_reload.Length == 445836 || fi_reload.Length == 497268 || fi_reload.Length == 541980) { fi_reload.Delete(); } } string[] Voice_Files = Directory.GetFiles(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices", "*.wav", SearchOption.TopDirectoryOnly); //音声の場合はたいていファイル名の語尾に_01や_02と書いているため、書かれていないファイルは削除する foreach (string Voice_Now in Voice_Files) { if (!Path.GetFileNameWithoutExtension(Voice_Now).Contains("_") || !Sub_Code.IsIncludeInt_From_String(Path.GetFileNameWithoutExtension(Voice_Now), "_")) { File.Delete(Voice_Now); } } if (File.Exists(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices/lock_on.wav")) { File.Delete(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices/lock_on.wav"); } Message_T.Text = "Creating a BNK file..."; await Task.Delay(50); FileInfo fi = new FileInfo(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Default Work Unit.wwu"); if (File.Exists(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp") && fi.Length >= 800000) { File.Copy(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp", Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Default Work Unit.wwu", true); } if (!File.Exists(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp")) { File.Copy(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Default Work Unit.wwu", Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp", true); } WoTB_Voice_Mod_Creater.Wwise_Class.Wwise_Project_Create Wwise = new WoTB_Voice_Mod_Creater.Wwise_Class.Wwise_Project_Create(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod"); Wwise.Sound_Add_Wwise(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices"); Wwise.Save(); Directory.Delete(Voice_Set.Special_Path + "/Wwise/FSB_Extract_Voices", true); Wwise.Project_Build("voiceover_crew", sfd.SelectedFolder + "/voiceover_crew.bnk"); /*await Task.Delay(500); * Wwise.Project_Build("ui_battle", sfd.SelectedFolder + "/ui_battle.bnk"); * await Task.Delay(500); * Wwise.Project_Build("ui_chat_quick_commands", sfd.SelectedFolder + "/ui_chat_quick_commands.bnk"); * await Task.Delay(500); * Wwise.Project_Build("reload", sfd.SelectedFolder + "/reload.bnk");*/ Wwise.Clear(); if (File.Exists(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp")) { File.Copy(Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Backup.tmp", Voice_Set.Special_Path + "/Wwise/WoTB_Sound_Mod/Actor-Mixer Hierarchy/Default Work Unit.wwu", true); } if (DVPL_C.IsChecked.Value) { Message_T.Text = "Encoding to DVPL format..."; await Task.Delay(50); DVPL.DVPL_Pack(sfd.SelectedFolder + "/voiceover_crew.bnk", sfd.SelectedFolder + "/voiceover_crew.bnk.dvpl", true); /*DVPL.DVPL_Pack(sfd.SelectedFolder + "/ui_battle.bnk", sfd.SelectedFolder + "/ui_battle.bnk.dvpl", true); * DVPL.DVPL_Pack(sfd.SelectedFolder + "/ui_chat_quick_commands.bnk", sfd.SelectedFolder + "/ui_chat_quick_commands.bnk.dvpl", true); * DVPL.DVPL_Pack(sfd.SelectedFolder + "/reload.bnk", sfd.SelectedFolder + "/reload.bnk.dvpl", true);*/ } Message_Feed_Out("The operation is complete. If the bnk file is extremely small in size, it may have failed."); } } catch (Exception e1) { Sub_Code.Error_Log_Write(e1.Message); Message_Feed_Out("An error has occurred. See Log.txt for details."); } IsClosing = false; Position_Change(); }
private void Gun_Destroy_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("housintaiha"); }
private void Enemy_Crit_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("tokusyu"); }
private void Enemy_Enable_Damage_B_Click(object sender, System.Windows.RoutedEventArgs e) { Voice_Set.Voice_Set_Name("kantuu"); }
//PC版WoTの音声ファイルを指定 private async void Open_File_B_Click(object sender, RoutedEventArgs e) { if (IsClosing || IsBusy) { return; } OpenFileDialog ofd = new OpenFileDialog() { Title = "BNKファイルを選択してください。", Multiselect = false, Filter = "BNKファイル(*.bnk)|*.bnk" }; if (ofd.ShowDialog() == DialogResult.OK) { string PCK_File_Path = Path.GetDirectoryName(ofd.FileName) + "/" + Path.GetFileNameWithoutExtension(ofd.FileName) + ".pck"; if (PCK_Mode_C.IsChecked.Value && !File.Exists(PCK_File_Path)) { Message_Feed_Out(Path.GetFileNameWithoutExtension(ofd.FileName) + ".pckが見つかりませんでした。"); IsBusy = false; return; } string XML_File_Path = Path.GetDirectoryName(ofd.FileName) + "/audio_mods.xml"; if (XML_Mode_C.IsChecked.Value && !File.Exists(XML_File_Path)) { Message_Feed_Out("audio_mods.xmlが見つかりませんでした。"); IsBusy = false; return; } Bass.BASS_ChannelStop(Stream); Bass.BASS_StreamFree(Stream); try { if (Directory.Exists(Voice_Set.Special_Path + "/Wwise/BNK_WAV")) { Directory.Delete(Voice_Set.Special_Path + "/Wwise/BNK_WAV", true); } } catch (Exception e1) { Sub_Code.Error_Log_Write(e1.Message); } IsBusy = true; try { Message_T.Text = ".bnkファイルを解析しています..."; await Task.Delay(50); Wwise_Class.BNK_Parse p = new Wwise_Class.BNK_Parse(ofd.FileName); Message_T.Text = "audio_mods.xmlからイベントIDを取得しています..."; await Task.Delay(50); if (!p.IsVoiceFile()) { Message_Feed_Out("選択されたbnkファイルは音声データではありません。"); IsBusy = false; return; } Message_T.Text = "各イベント内の音声IDを取得しています..."; await Task.Delay(50); BNK_Voices_Enable.Clear(); BNK_Voices = p.Get_Voices(false); if (XML_Mode_C.IsChecked.Value) { p.Get_Event_ID_From_XML(XML_File_Path); List <List <string> > Temp = p.Get_Voices(false); for (int Number = 0; Number < Temp.Count; Number++) { if (BNK_Voices[Number].Count == 0) { BNK_Voices[Number] = Temp[Number]; } } } List <string> Need_Files = new List <string>(); foreach (List <string> Types in BNK_Voices) { BNK_Voices_Enable.Add(new List <bool>()); foreach (string File_Now in Types) { Need_Files.Add(File_Now); BNK_Voices_Enable[BNK_Voices_Enable.Count - 1].Add(true); } } if (Need_Files.Count == 0) { BNK_Voices_Enable.Clear(); Message_T.Text = "移植できるファイルが見つからなかったため、特殊な方法で解析しています..."; await Task.Delay(50); p.SpecialBNKFileMode = 1; BNK_Voices = p.Get_Voices(false); foreach (List <string> Types in BNK_Voices) { BNK_Voices_Enable.Add(new List <bool>()); foreach (string File_Now in Types) { Need_Files.Add(File_Now); BNK_Voices_Enable[BNK_Voices_Enable.Count - 1].Add(true); } } if (Need_Files.Count == 0) { p.Clear(); BNK_Voices.Clear(); BNK_Voices_Enable.Clear(); Message_Feed_Out("移植できる音声が見つかりませんでした。"); IsBusy = false; return; } } p.Clear(); Get_Available_Voice_Count(); Voices_L.Items.Clear(); Voice_Type_L.Items.Clear(); for (int Number = 0; Number < BNK_Voices.Count; Number++) { Voices_L.Items.Add(Voice_Set.Get_Voice_Type_Japanese_Name_V2(Number) + " : " + BNK_Voices[Number].Count + "個"); } BGM_Count_Change(); if (PCK_Mode_C.IsChecked.Value) { Message_T.Text = ".wemファイルに変換しています..."; await Task.Delay(50); Wwise_PCK = new Wwise_File_Extract_V1(PCK_File_Path); Max_Stream_Count = Wwise_PCK.Wwise_Get_File_Count(); await Wwise_PCK.Async_Wwise_Extract_To_WEM_Directory(Voice_Set.Special_Path + "/Wwise/BNK_WAV"); Message_T.Text = ".wemファイルを.oggに変換しています..."; await Task.Delay(50); await Wwise_PCK.Async_Wwise_Extract_To_OGG_Directory(Voice_Set.Special_Path + "/Wwise/BNK_WAV"); } else { Message_T.Text = ".wavまたは.oggに変換しています..."; await Task.Delay(50); Wwise_BNK = new Wwise_File_Extract_V2(ofd.FileName); Max_Stream_Count = Wwise_BNK.Wwise_Get_Numbers(); Wwise_BNK.Wwise_Extract_To_WEM_Directory_V2(Voice_Set.Special_Path + "/Wwise/BNK_WAV"); } string[] Files = Directory.GetFiles(Voice_Set.Special_Path + "/Wwise/BNK_WAV", "*.wem", SearchOption.TopDirectoryOnly); foreach (string File_Now in Files) { Sub_Code.File_Delete_V2(File_Now); } Message_T.Text = "不要な音声ファイルを削除しています..."; await Task.Delay(50); string[] All_Files = Directory.GetFiles(Voice_Set.Special_Path + "/Wwise/BNK_WAV", "*", SearchOption.TopDirectoryOnly); foreach (string File_Now in All_Files) { if (!Need_Files.Contains(Path.GetFileNameWithoutExtension(File_Now))) { Sub_Code.File_Delete_V2(File_Now); } } File_Name_T.Text = Path.GetFileName(ofd.FileName); Message_Feed_Out(".bnkファイルをロードしました。"); } catch (Exception e1) { Sub_Code.Error_Log_Write(e1.Message); Message_Feed_Out("解析に失敗しました。Error_Log.txtを参照してください。"); } IsBusy = false; } }