private async void Save_B_Click(object sender, RoutedEventArgs e) { if (IsClosing) { return; } if (Change_List.Items.Count == 0) { Message_Feed_Out("変更点が見つかりませんでした。"); return; } try { string Save_Ex; if (IsPCKFile) { Save_Ex = "*.pck"; } else { Save_Ex = "*.bnk"; } SaveFileDialog sfd = new SaveFileDialog() { Title = "保存先を指定してください。", Filter = "WoTBサウンドファイル(" + Save_Ex + ")|" + Save_Ex }; if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Border_All.Visibility = Visibility.Visible; if (Directory.Exists(Voice_Set.Special_Path + "/Wwise/Temp")) { Directory.Delete(Voice_Set.Special_Path + "/Wwise/Temp", true); } Directory.CreateDirectory(Voice_Set.Special_Path + "/Wwise/Temp"); int Number = 0; IsMessageShowing = false; Message_T.Opacity = 1; foreach (string Name in Change_List.Items) { int Index = int.Parse(Name.Substring(0, Name.IndexOf(':'))) - 1; Message_T.Text = (Index + 1) + "番目の項目をWEMファイルに変換しています..."; await Task.Delay(50); Sub_Code.File_To_WEM(Change_Sound_Full_Name[Number], Voice_Set.Special_Path + "/Wwise/Temp/" + (Index + 1) + ".wem", true); if (!IsPCKFile) { Message_T.Text = (Index + 1) + "番目の項目をBNKファイルに差し替えています..."; await Task.Delay(50); Wwise_Bnk.Bank_Edit_Sound(Index, Voice_Set.Special_Path + "/Wwise/Temp/" + (Index + 1) + ".wem", false); } Number++; } Message_T.Text = "BNKファイルを保存しています..."; await Task.Delay(50); if (IsPCKFile) { Wwise_Pck.Wwise_PCK_Save(sfd.FileName, Voice_Set.Special_Path + "/Wwise/Temp", true); } else { Wwise_Bnk.Bank_Save(sfd.FileName); } Border_All.Visibility = Visibility.Hidden; Message_Feed_Out("変更を保存しました。"); Directory.Delete(Voice_Set.Special_Path + "/Wwise/Temp", true); } } catch (Exception e1) { Sub_Code.Error_Log_Write(e1.Message); Message_Feed_Out("エラーが発生しました。"); Border_All.Visibility = Visibility.Hidden; } }
//音声ファイルの言語を変更 //例:/Data/WwiseSound/ja/voiceover_crew.bnk -> /Data/WwiseSound/en/voiceover_crew.bnk //bnk内のIDが異なるためそのままコピーすることはできません。 public static void Voice_Change_Language(string From_BNK_File, string To_BNK_File, string Set_Language) { if (!File.Exists(Voice_Set.Special_Path + "/Wwise/SoundbanksInfo.json") || !File.Exists(From_BNK_File)) { return; } try { Wwise_Class.Wwise_File_Extract_V2 Wwise_Bnk = new Wwise_Class.Wwise_File_Extract_V2(From_BNK_File); if (Directory.Exists(Voice_Set.Special_Path + "/Voice_Temp")) { Directory.Delete(Voice_Set.Special_Path + "/Voice_Temp", true); } Wwise_Bnk.Wwise_Extract_To_WEM_Directory(Voice_Set.Special_Path + "/Voice_Temp", 1); string Get_Language_ID = Wwise_Bnk.Wwise_Get_Name(0); Wwise_Bnk.Bank_Clear(); StreamReader str = new StreamReader(Voice_Set.Special_Path + "/Wwise/SoundbanksInfo.json"); string Read_Line = ""; int Number = 0; string Get_Language_Now = ""; while ((Read_Line = str.ReadLine()) != null) { if (Read_Line == " \"Id\": \"" + Get_Language_ID + "\"") { Get_Language_Now = File.ReadLines(Voice_Set.Special_Path + "/Wwise/SoundbanksInfo.json").Skip(Number + 1).First().Replace(" \"Language\": \"", "").Replace("\"", ""); } Number++; } str.Close(); if (Get_Language_Now != "") { List <string> Replace_Name_Voice = Get_Voices_ID(Get_Language_Now); foreach (string Replace_Name_Now in Replace_Name_Voice) { string Name_Only = Replace_Name_Now.Substring(0, Replace_Name_Now.IndexOf(':')); string ID_Only = Replace_Name_Now.Substring(Replace_Name_Now.IndexOf(':') + 1); File_Move(Voice_Set.Special_Path + "/Voice_Temp/" + ID_Only + ".wem", Voice_Set.Special_Path + "/Voice_Temp/" + Name_Only.Replace(".wav", ".wem"), true); } List <string> Get_Set_Language_ID = Get_Voices_ID(Set_Language); Wwise_Class.Wwise_File_Extract_V2 Wwise_Bnk_02 = new Wwise_Class.Wwise_File_Extract_V2(Voice_Set.Special_Path + "/Voice_Temp/voiceover_crew.bnk"); List <string> New_ID = Wwise_Bnk_02.Wwise_Get_Names(); for (int Number_01 = 0; Number_01 < New_ID.Count; Number_01++) { foreach (string ID in Get_Set_Language_ID) { string Name_Only = ID.Substring(0, ID.IndexOf(':')).Replace(".wav", ".wem"); string ID_Only = ID.Substring(ID.IndexOf(':') + 1); if (ID_Only == New_ID[Number_01]) { Wwise_Bnk_02.Bank_Edit_Sound(Number_01, Voice_Set.Special_Path + "/Voice_Temp/" + Name_Only, false); } } } Wwise_Bnk_02.Bank_Save(To_BNK_File); Wwise_Bnk_02.Bank_Clear(); } else { Error_Log_Write("指定された.bnkファイルは音声ファイルでない可能性があります。"); } } catch (Exception e) { Error_Log_Write(e.Message); } }