示例#1
0
        private void Open_File_B_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            if (IsClosing)
            {
                return;
            }
            OpenFileDialog ofd = new OpenFileDialog()
            {
                Title       = "サウンドファイルを選択してください。",
                Filter      = "サウンドファイル(*.bnk;*.pck)|*.bnk;*.pck",
                Multiselect = false
            };

            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    string Ex = Path.GetExtension(ofd.FileName);
                    Sound_List.Items.Clear();
                    Change_List.Items.Clear();
                    Change_Sound_Full_Name.Clear();
                    if (Wwise_Bnk != null)
                    {
                        Wwise_Bnk.Bank_Clear();
                    }
                    if (Wwise_Pck != null)
                    {
                        Wwise_Pck.Pck_Clear();
                    }
                    if (Ex == ".bnk")
                    {
                        Wwise_Bnk = new Wwise_File_Extract_V2(ofd.FileName);
                        foreach (string Name_ID in Wwise_Bnk.Wwise_Get_Names())
                        {
                            Sound_List.Items.Add((Sound_List.Items.Count + 1) + ":" + Name_ID);
                        }
                        IsPCKFile = false;
                    }
                    else if (Ex == ".pck")
                    {
                        Wwise_Pck = new Wwise_File_Extract_V1(ofd.FileName);
                        foreach (string Name_ID in Wwise_Pck.Wwise_Get_Banks_ID())
                        {
                            Sound_List.Items.Add((Sound_List.Items.Count + 1) + ":" + Name_ID);
                        }
                        IsPCKFile = true;
                    }
                }
                catch (Exception e1)
                {
                    Sub_Code.Error_Log_Write(e1.Message);
                    Message_Feed_Out("エラー:ファイルを読み取れませんでした。");
                }
            }
        }
示例#2
0
        private void Content_Load_B_Click(object sender, RoutedEventArgs e)
        {
            if (IsClosing)
            {
                return;
            }
            OpenFileDialog ofd = new OpenFileDialog()
            {
                Title  = ".wbeファイルを選択してください。",
                Filter = ".wbeファイル(*.wbe)|*.wbe"
            };

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    StreamReader str       = Sub_Code.File_Decrypt_To_Stream(ofd.FileName, "Bank_Editor_Change_Sound_Save");
                    string       Open_File = str.ReadLine();
                    if (Path.GetExtension(Open_File) == ".bnk")
                    {
                        Sound_List.Items.Clear();
                        Wwise_Bnk = new Wwise_File_Extract_V2(Open_File);
                        foreach (string Name_ID in Wwise_Bnk.Wwise_Get_Names())
                        {
                            Sound_List.Items.Add((Sound_List.Items.Count + 1) + ":" + Name_ID);
                        }
                        IsPCKFile = false;
                    }
                    else if (Path.GetExtension(Open_File) == ".pck")
                    {
                        Sound_List.Items.Clear();
                        Wwise_Pck = new Wwise_File_Extract_V1(Open_File);
                        foreach (string Name_ID in Wwise_Pck.Wwise_Get_Banks_ID())
                        {
                            Sound_List.Items.Add((Sound_List.Items.Count + 1) + ":" + Name_ID);
                        }
                        IsPCKFile = true;
                    }
                    else
                    {
                        throw new Exception("ファイル形式が違います。対応しているファイル形式は.bnk、または.pckのみです。");
                    }
                    Change_List.Items.Clear();
                    Change_Sound_Full_Name.Clear();
                    string line;
                    while ((line = str.ReadLine()) != null)
                    {
                        int    Index     = int.Parse(line.Substring(0, line.IndexOf(':')));
                        string File_Name = line.Substring(line.IndexOf(':') + 1);
                        Change_List.Items.Add(Sound_List.Items[Index]);
                        Change_Sound_Full_Name.Add(File_Name);
                    }
                    str.Close();
                }
                catch (Exception e1)
                {
                    Sub_Code.Error_Log_Write(e1.Message);
                    Message_Feed_Out("正常に読み込めませんでした。");
                }
            }
        }
示例#3
0
 //音声ファイルの言語を変更
 //例:/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);
     }
 }
示例#4
0
        private async void Open_File_B_Click(object sender, RoutedEventArgs e)
        {
            if (IsClosing || IsBusy)
            {
                return;
            }
            OpenFileDialog ofd = new OpenFileDialog()
            {
                Title       = "WoTBの音声Modを選択してください。",
                Multiselect = false,
                Filter      = "WoTB音声(*.fsb;*.bnk)|*.fsb;*.bnk"
            };

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                IsBusy = true;
                try
                {
                    string To_Dir = Voice_Set.Special_Path + "/Wwise/BNK_WAV_WoT";
                    try
                    {
                        if (Directory.Exists(To_Dir))
                        {
                            Directory.Delete(To_Dir, true);
                        }
                    }
                    catch (Exception e1)
                    {
                        Sub_Code.Error_Log_Write(e1.Message);
                    }
                    for (int Number = 0; Number < 34; Number++)
                    {
                        BNK_FSB_Enable.Add(new List <bool>());
                    }
                    if (Path.GetExtension(ofd.FileName) == ".bnk")
                    {
                        Message_T.Text = ".bnkファイルを解析しています...";
                        await Task.Delay(50);

                        Wwise_Class.BNK_Parse p = new Wwise_Class.BNK_Parse(ofd.FileName);
                        if (!p.IsVoiceFile(true))
                        {
                            Message_Feed_Out("選択されたbnkファイルは音声データではありません。");
                            IsBusy = false;
                            return;
                        }
                        BNK_FSB_Voices = p.Get_Voices(true);
                        List <string> Need_Files = new List <string>();
                        foreach (List <string> Types in BNK_FSB_Voices)
                        {
                            foreach (string File_Now in Types)
                            {
                                Need_Files.Add(File_Now);
                            }
                        }
                        if (Need_Files.Count == 0)
                        {
                            Message_T.Text = "移植できるファイルが見つからなかったため、特殊な方法で解析しています...";
                            await Task.Delay(50);

                            p.SpecialBNKFileMode = 1;
                            BNK_FSB_Voices       = p.Get_Voices(true);
                            foreach (List <string> Types in BNK_FSB_Voices)
                            {
                                foreach (string File_Now in Types)
                                {
                                    Need_Files.Add(File_Now);
                                }
                            }
                            if (Need_Files.Count == 0)
                            {
                                p.Clear();
                                BNK_FSB_Voices.Clear();
                                Message_Feed_Out("移植できる音声が見つかりませんでした。");
                                IsBusy = false;
                                return;
                            }
                        }
                        p.Clear();
                        Voices_L.Items.Clear();
                        Content_L.Items.Clear();
                        Now_Stream_Count = 0;
                        Message_T.Text   = ".wavまたは.oggに変換しています...";
                        await Task.Delay(50);

                        Wwise_File_Extract_V2 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(To_Dir);
                        Wwise_BNK.Bank_Clear();
                        Message_T.Text = "不要な音声ファイルを削除しています...";
                        await Task.Delay(50);

                        string[] All_Files = Directory.GetFiles(To_Dir, "*", 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(To_Dir, "*.wem", SearchOption.TopDirectoryOnly);
                        foreach (string File_Now in Files)
                        {
                            Sub_Code.File_Delete_V2(File_Now);
                        }
                        Message_T.Text = ".oggファイルを.wavファイルに変換しています...";
                        await Task.Delay(50);

                        await Multithread.Convert_To_Wav(Directory.GetFiles(To_Dir, "*.ogg", SearchOption.TopDirectoryOnly), To_Dir, true, true);

                        File_Name_T.Text = Path.GetFileName(ofd.FileName);
                        Message_Feed_Out(".bnkファイルをロードしました。SEが含まれている場合は無効化してください。");
                    }
                    else
                    {
                        Message_T.Text = ".fsbファイルを解析しています...";
                        await Task.Delay(50);

                        bool          IsVoiceExist = false;
                        List <string> Voices       = Fmod_Class.FSB_GetNames(ofd.FileName);
                        foreach (string File_Now in Voices)
                        {
                            string File_Now_01 = File_Now.Replace(" ", "");
                            if (File_Now_01.Contains("battle_01") || File_Now_01.Contains("battle_02") || File_Now_01.Contains("battle_03") || File_Now_01.Contains("start_battle_01"))
                            {
                                IsVoiceExist = true;
                                break;
                            }
                        }
                        if (!IsVoiceExist)
                        {
                            Message_Feed_Out("指定したFSBファイルは対応していません。");
                            IsBusy = false;
                            return;
                        }
                        Voices.Clear();
                        Message_T.Text = "FSBファイルからファイルを抽出しています...";
                        await Task.Delay(50);

                        Max_Stream_Count = Fmod_Class.FSB_GetLength(ofd.FileName);
                        Fmod_File_Extract_V2.FSB_Extract_To_Directory(ofd.FileName, To_Dir + "_TMP");
                        Message_T.Text = ".wavファイルを修正しています...";
                        await Task.Delay(50);

                        await Multithread.Convert_To_Wav(To_Dir + "_TMP", To_Dir, true, true, false, false);

                        Directory.Delete(To_Dir + "_TMP", true);
                        Message_T.Text = "ファイル名からリストに配置しています...";
                        await Task.Delay(50);

                        BNK_FSB_Voices = Voice_Set.Voice_BGM_Name_Change_From_FSB_To_Index(To_Dir);
                        Voices_L.Items.Clear();
                        Content_L.Items.Clear();
                        Now_Stream_Count = 0;
                        Message_T.Text   = "不要なファイルを削除しています...";
                        await Task.Delay(50);

                        foreach (string File_Name in Directory.GetFiles(To_Dir, "*", SearchOption.TopDirectoryOnly))
                        {
                            string Name_Only = Path.GetFileNameWithoutExtension(File_Name);
                            bool   IsExsist  = false;
                            for (int Number = 0; Number < BNK_FSB_Voices.Count; Number++)
                            {
                                foreach (string Name_Now in BNK_FSB_Voices[Number])
                                {
                                    if (Name_Only == Name_Now)
                                    {
                                        IsExsist = true;
                                        break;
                                    }
                                }
                                if (IsExsist)
                                {
                                    break;
                                }
                            }
                            if (!IsExsist)
                            {
                                Sub_Code.File_Delete_V2(File_Name);
                            }
                        }
                        File_Name_T.Text = Path.GetFileName(ofd.FileName);
                        Message_Feed_Out(".fsbファイルをロードしました。");
                    }
                    if (BNK_FSB_Voices[5].Count == 0 && BNK_FSB_Voices[2].Count > 0)
                    {
                        BNK_FSB_Voices[5] = new List <string>(BNK_FSB_Voices[2]);
                    }
                    if (BNK_FSB_Voices[4].Count == 0 && BNK_FSB_Voices[3].Count > 0)
                    {
                        BNK_FSB_Voices[4] = new List <string>(BNK_FSB_Voices[3]);
                    }
                    for (int Number = 0; Number < 34; Number++)
                    {
                        Now_Stream_Count += BNK_FSB_Voices[Number].Count;
                        Voices_L.Items.Add(Voice_Set.Get_Voice_Type_Japanese_Name_V2(Number) + " : " + BNK_FSB_Voices[Number].Count + "個");
                    }
                    for (int Number_01 = 0; Number_01 < BNK_FSB_Voices.Count; Number_01++)
                    {
                        for (int Number_02 = 0; Number_02 < BNK_FSB_Voices[Number_01].Count; Number_02++)
                        {
                            BNK_FSB_Enable[Number_01].Add(true);
                        }
                    }
                }
                catch (Exception e1)
                {
                    IsBusy = false;
                    Sub_Code.Error_Log_Write(e1.Message);
                    BNK_FSB_Clear(false);
                    Message_Feed_Out("エラーが発生しました。Error_Log.txtを参照してください。");
                }
            }
            IsBusy = false;
        }
示例#5
0
        private async void Open_BNK_B_Click(object sender, RoutedEventArgs e)
        {
            if (IsClosing || IsBusy)
            {
                return;
            }
            System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog()
            {
                Title       = ".bnkファイルを選択してください。",
                Multiselect = false,
                Filter      = ".bnkファイル(*.bnk)|*.bnk"
            };
            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    IsBusy = true;
                    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;
                    }
                    Bass.BASS_ChannelStop(Stream);
                    Bass.BASS_StreamFree(Stream);
                    if (Directory.Exists(Voice_Set.Special_Path + "/Wwise/BNK_WAV_Special"))
                    {
                        Sub_Code.Directory_Delete(Voice_Set.Special_Path + "/Wwise/BNK_WAV_Special");
                    }
                    Message_T.Text = ".bnkファイルを解析しています...";
                    await Task.Delay(50);

                    p = new Wwise_Class.BNK_Parse(ofd.FileName);
                    List <uint> Event_List = p.Get_BNK_Event_ID();
                    Event_Type_L.Items.Clear();
                    Sound_L.Items.Clear();
                    foreach (uint ID in Event_List)
                    {
                        Event_Type_L.Items.Add((Event_Type_L.Items.Count + 1) + ":" + ID);
                    }
                    Event_List.Clear();
                    if (PCK_Mode_C.IsChecked.Value)
                    {
                        Wwise_PCK = new Wwise_File_Extract_V1(PCK_File_Path);
                        IsPCKMode = true;
                    }
                    else
                    {
                        Wwise_BNK = new Wwise_File_Extract_V2(ofd.FileName);
                        IsPCKMode = false;
                    }
                    if (!Directory.Exists(Voice_Set.Special_Path + "/Wwise/BNK_WAV_Special"))
                    {
                        Directory.CreateDirectory(Voice_Set.Special_Path + "/Wwise/BNK_WAV_Special");
                    }
                    File_Name_T.Text = Path.GetFileName(ofd.FileName);
                    Message_Feed_Out(".bnkファイルをロードしました。");
                }
                catch (Exception e1)
                {
                    Sub_Code.Error_Log_Write(e1.Message);
                    if (Wwise_PCK != null)
                    {
                        Wwise_PCK.Pck_Clear();
                    }
                    if (Wwise_BNK != null)
                    {
                        Wwise_BNK.Bank_Clear();
                    }
                    if (p != null)
                    {
                        p.Clear();
                    }
                    Wwise_PCK        = null;
                    Wwise_BNK        = null;
                    p                = null;
                    IsPCKMode        = false;
                    File_Name_T.Text = "";
                    Event_Type_L.Items.Clear();
                    Sound_L.Items.Clear();
                    Message_Feed_Out("エラーが発生しました。詳しくはError_Log.txtを参照してください。");
                }
            }
            IsBusy = false;
        }