Пример #1
0
        //イベント名がなければShortIDから作成する
        public static async Task Set_Name(System.Windows.Controls.TextBlock Message_T)
        {
            if (Event_ShortID.Count > 0)
            {
                foreach (uint ShortID_Now in Event_ShortID)
                {
                    int RTPC_Info_Number = -1;
                    for (int Number = 0; Number < Event_Info.Count; Number++)
                    {
                        if (Event_Info[Number].ShortID == ShortID_Now && Event_Info[Number].Name == null)
                        {
                            RTPC_Info_Number = Number;
                            break;
                        }
                    }
                    Message_T.Text = ShortID_Now + "を対応する文字列へ変換しています...";
                    await Task.Delay(50);

                    if (RTPC_Info_Number != -1)
                    {
                        string Name = Get_Config.Get_Hash_Name_From_ShortID(ShortID_Now);
                        Event_Info[RTPC_Info_Number].Name = Name;
                    }
                }
                Message_T.Text = "Eventsを適応しました。";
                await Task.Delay(50);
            }
        }
Пример #2
0
 //必ず実行させる
 //イベント情報をリストに保存
 public static void Init()
 {
     foreach (List <string> Temp in BNK_Info.ID_Line)
     {
         if (Temp[2] == "CAkEvent")
         {
             uint Parent_ShortID = uint.Parse(Temp[0]);
             if (!Event_ShortID.Contains(Parent_ShortID))
             {
                 Event_ShortID.Add(Parent_ShortID);
             }
             List <Event_Action> Actions = new List <Event_Action>();
             for (int Number = int.Parse(Temp[1]); Number < BNK_Info.Read_All.Count; Number++)
             {
                 if (BNK_Info.Read_All[Number].Contains("type=\"u8\" name=\"eHircType\"") || BNK_Info.Read_All[Number].Contains("</list>"))
                 {
                     break;
                 }
                 if (BNK_Info.Read_All[Number].Contains("type=\"tid\" name=\"ulActionID\""))
                 {
                     uint Action_ShortID = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number]));
                     foreach (List <string> Temp_01 in BNK_Info.ID_Line)
                     {
                         if (Temp_01[2] == "CAkActionPlay" && uint.Parse(Temp_01[0]) == Action_ShortID)
                         {
                             Actions.Add(new Event_Action(uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number])), int.Parse(Temp_01[1])));
                             break;
                         }
                     }
                 }
             }
             Event_Info.Add(new Event_Parent(Parent_ShortID, Actions));
         }
     }
     for (int Number_00 = 0; Number_00 < Event_Info.Count; Number_00++)
     {
         for (int Number = 0; Number < Event_Info[Number_00].Action.Count; Number++)
         {
             for (int Line = Event_Info[Number_00].Action[Number].Line; Line < BNK_Info.Read_All.Count; Line++)
             {
                 if (BNK_Info.Read_All[Line].Contains("type=\"u8\" name=\"eHircType\""))
                 {
                     break;
                 }
                 else if (BNK_Info.Read_All[Line].Contains("type=\"u16\" name=\"ulActionType\""))
                 {
                     Event_Info[Number_00].Action[Number].Mode = Change_Name_To_Mode(Get_Config.Get_Value_FMT(BNK_Info.Read_All[Line]));
                 }
                 else if (BNK_Info.Read_All[Line].Contains("type=\"tid\" name=\"idExt\""))
                 {
                     Event_Info[Number_00].Action[Number].Target_ShortID = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Line]));
                 }
                 else if (BNK_Info.Read_All[Line].Contains("type=\"tid\" name=\"bankID\""))
                 {
                     Event_Info[Number_00].Action[Number].SoundBank = Get_Config.Get_HashName(BNK_Info.Read_All[Line]);
                 }
             }
         }
     }
 }
Пример #3
0
        public static void Init()
        {
            List <int>  Switch_Numbers = new List <int>();
            List <uint> Temp           = new List <uint>();

            for (int Number = 0; Number < BNK_Info.ID_Line.Count; Number++)
            {
                if (BNK_Info.ID_Line[Number][2] == "CAkSwitchCntr")
                {
                    Switch_Numbers.Add(Number);
                }
            }
            foreach (int Number in Switch_Numbers)
            {
                //GUIDは自由に指定できます
                string My_GUID    = Guid.NewGuid().ToString().ToUpper();
                uint   My_ShortID = 0;
                List <Switch_Child_Relation> Child = new List <Switch_Child_Relation>();
                for (int Number_01 = int.Parse(BNK_Info.ID_Line[Number][1]); Number_01 < BNK_Info.Read_All.Count; Number_01++)
                {
                    string Read_Line = BNK_Info.Read_All[Number_01];
                    //Switch_GroupのShortIDを取得
                    if (Read_Line.Contains("type=\"tid\" name=\"ulGroupID\""))
                    {
                        My_ShortID = uint.Parse(Get_Config.Get_Property_Value(Read_Line));
                    }
                    if (Read_Line.Contains("type=\"sid\" name=\"ulSwitchID\""))
                    {
                        uint Child_ShortID = uint.Parse(Get_Config.Get_Property_Value(Read_Line));
                        Child.Add(new Switch_Child_Relation("", Guid.NewGuid().ToString().ToUpper(), Child_ShortID));
                    }
                    if (Read_Line.Contains("type=\"u8\" name=\"eHircType\""))
                    {
                        break;
                    }
                }
                if (!Temp.Contains(My_ShortID))
                {
                    Switch_Info.Add(new Switch_Relation("", My_GUID, My_ShortID, Child));
                    Temp.Add(My_ShortID);
                }
            }
            Temp.Clear();
            Switch_Numbers.Clear();
            IsInit = true;
        }
Пример #4
0
        public static async Task Generate_Name(TextBlock Message_T)
        {
            for (int Number_01 = 0; Number_01 < BNK_Info.RTPC_Info.Count; Number_01++)
            {
                Message_T.Text = BNK_Info.RTPC_Info[Number_01].ShortID + "を対応する文字列へ変換しています...";
                await Task.Delay(50);

                string Name = Get_Config.Get_Hash_Name_From_ShortID(BNK_Info.RTPC_Info[Number_01].ShortID);
                BNK_Info.RTPC_Info[Number_01].Name = Name;
            }
            for (int Number_01 = 0; Number_01 < Switch.Switch_Info.Count; Number_01++)
            {
                Message_T.Text = Switch.Switch_Info[Number_01].ShortID + "を対応する文字列へ変換しています...";
                await Task.Delay(50);

                string Name = Get_Config.Get_Hash_Name_From_ShortID(Switch.Switch_Info[Number_01].ShortID);
                Switch.Switch_Info[Number_01].Name = Name;
            }
            for (int Number_01 = 0; Number_01 < Events.Event_Info.Count; Number_01++)
            {
                Message_T.Text = Events.Event_Info[Number_01].ShortID + "を対応する文字列へ変換しています...";
                await Task.Delay(50);

                string Name = Get_Config.Get_Hash_Name_From_ShortID(Events.Event_Info[Number_01].ShortID);
                Events.Event_Info[Number_01].Name = Name;
            }
            for (int Number_01 = 0; Number_01 < State.State_All_Info.Count; Number_01++)
            {
                Message_T.Text = State.State_All_Info[Number_01].Short_ID + "を対応する文字列へ変換しています...";
                await Task.Delay(50);

                string Name = Get_Config.Get_Hash_Name_From_ShortID(State.State_All_Info[Number_01].Short_ID);
                State.State_All_Info[Number_01].Name = Name;
            }
            for (int Number_01 = 0; Number_01 < State.State_Child_Info.Count; Number_01++)
            {
                Message_T.Text = State.State_Child_Info[Number_01].Short_ID + "を対応する文字列へ変換しています...";
                await Task.Delay(50);

                string Name = Get_Config.Get_Hash_Name_From_ShortID(State.State_Child_Info[Number_01].Short_ID);
                State.State_Child_Info[Number_01].Name = Name;
            }
        }
        void Wwise_Project_Change_Name(string From_File, string To_File)
        {
            List <string> ShortIDs = new List <string>();
            List <string> Names    = new List <string>();

            string[] From_Actor = File.ReadAllLines(From_File);
            foreach (string Line in From_Actor)
            {
                if (Line.Contains("Name=\"") && Line.Contains("ShortID=\""))
                {
                    ShortIDs.Add(Get_Config.Get_ShortID_Project(Line));
                    Names.Add(Get_Config.Get_Name(Line));
                }
            }
            List <string> To_Actor = new List <string>(File.ReadAllLines(To_File));

            for (int Number = 0; Number < To_Actor.Count; Number++)
            {
                if (To_Actor[Number].Contains("Name=\""))
                {
                    string Name  = Get_Config.Get_Name(To_Actor[Number]);
                    int    Index = ShortIDs.IndexOf(Name);
                    if (Index == -1)
                    {
                        continue;
                    }
                    if (To_Actor[Number].Contains("ShortID=\""))
                    {
                        string ShortID_After  = To_Actor[Number].Substring(To_Actor[Number].LastIndexOf("ShortID=\""));
                        string ShortID_Before = To_Actor[Number].Substring(0, To_Actor[Number].LastIndexOf("ShortID=\""));
                        ShortID_Before   = ShortID_Before.Replace(Name, Names[Index]);
                        To_Actor[Number] = ShortID_Before + ShortID_After;
                    }
                    else
                    {
                        To_Actor[Number] = To_Actor[Number].Replace(Name, Names[Index]);
                    }
                }
            }
            File.WriteAllLines(To_File, To_Actor);
            From_Actor = null;
            To_Actor.Clear();
        }
Пример #6
0
 public static void Init()
 {
     if (BNK_Info.Read_All.Count == 0)
     {
         return;
     }
     for (int Number = 0; Number < BNK_Info.Init_Read_All.Count; Number++)
     {
         string Read_Line = BNK_Info.Init_Read_All[Number];
         if (Read_Line.Contains("type=\"sid\" name=\"ulID\" value=\""))
         {
             //イベントIDを取得
             string Name = Get_Config.Get_Property_Name(BNK_Info.Init_Read_All[Number - 3]);
             if (Name == "CAkBus")
             {
                 uint ShortID = uint.Parse(Get_Config.Get_Property_Value(Read_Line));
                 Master_Audio_Info.Add(new Master_Audio_Relation(ShortID));
             }
         }
     }
     IsInit = true;
 }
Пример #7
0
 public static void Init()
 {
     if (BNK_Info.Read_All.Count == 0)
     {
         return;
     }
     for (int Number = 0; Number < BNK_Info.Read_All.Count; Number++)
     {
         if (BNK_Info.Read_All[Number].Contains("type=\"u8\" name=\"eHircType\""))
         {
             if (BNK_Info.Read_All[Number - 1].Contains("<object name=\"CAkAttenuation\""))
             {
                 string Name;
                 string GUID = System.Guid.NewGuid().ToString().ToUpper();
                 if (BNK_Info.Attenuation_Info.Count + 1 < 10)
                 {
                     Name = "Attenuation_0" + (BNK_Info.Attenuation_Info.Count + 1);
                 }
                 else
                 {
                     Name = "Attenuation_" + (BNK_Info.Attenuation_Info.Count + 1);
                 }
                 uint        ShortID          = WwiseHash.HashString(Name);
                 int         Curve_Start_Line = 0;
                 int         Curve_End_Line   = 0;
                 List <bool> curveToUse       = new List <bool>();
                 for (int Number_02 = 0; Number_02 < 7; Number_02++)
                 {
                     curveToUse.Add(false);
                 }
                 for (int Number_01 = Number + 1; Number_01 < BNK_Info.Read_All.Count; Number_01++)
                 {
                     if (BNK_Info.Read_All[Number_01].Contains("type=\"sid\" name=\"ulID\""))
                     {
                         ShortID = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01]));
                     }
                     if (BNK_Info.Read_All[Number_01].Contains("type=\"s8\" name=\"curveToUse[0]\""))
                     {
                         curveToUse[0] = true;
                         for (int Number_02 = 1; Number_02 < 7; Number_02++)
                         {
                             int Value = int.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + Number_02]));
                             if (Value > 0)
                             {
                                 curveToUse[Number_02] = true;
                             }
                         }
                     }
                     if (BNK_Info.Read_All[Number_01].Contains("<list name=\"curves\""))
                     {
                         Curve_Start_Line = Number_01;
                     }
                     if (BNK_Info.Read_All[Number_01].Contains("<object name=\"InitialRTPC\">") || BNK_Info.Read_All[Number_01].Contains("type=\"u8\" name=\"eHircType\""))
                     {
                         Curve_End_Line = Number_01 - 1;
                         break;
                     }
                 }
                 BNK_Info.Attenuation_Info.Add(new Attenuation_Relation(Name, GUID, ShortID, Curve_Start_Line, Curve_End_Line, curveToUse));
             }
             else
             {
                 break;
             }
         }
     }
     IsInit = true;
 }
Пример #8
0
 public static void Create(string To_File)
 {
     if (!IsInit)
     {
         return;
     }
     //共通
     if (!Directory.Exists(Path.GetDirectoryName(To_File)))
     {
         Directory.CreateDirectory(Path.GetDirectoryName(To_File));
     }
     Write_All.Add("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
     Write_All.Add("<WwiseDocument Type=\"WorkUnit\" ID=\"{2A4DC1AF-DA27-4BAB-BFB5-D16386FA615E}\" SchemaVersion=\"97\">");
     Write_All.Add("<Attenuations>");
     Write_All.Add("<WorkUnit Name=\"Default Work Unit\" ID=\"{2A4DC1AF-DA27-4BAB-BFB5-D16386FA615E}\" PersistMode=\"Standalone\">");
     Write_All.Add("<ChildrenList>");
     //Attenuationの数だけ追加
     foreach (Attenuation_Relation Temp_Info in BNK_Info.Attenuation_Info)
     {
         Write_All.Add("<Attenuation Name=\"" + Temp_Info.Name + "\" ID=\"{" + Temp_Info.GUID + "}\" ShortID=\"" + Temp_Info.ShortID + "\">");
         Write_All.Add("<PropertyList>");
         int Write_Max_Value_Line = Write_All.Count;
         Write_All.Add("</PropertyList>");
         Write_All.Add("<CurveUsageInfoList>");
         int        Insert_Start_Line = Write_All.Count;
         List <int> CurveToUseOnly    = new List <int>();
         for (int Number = 0; Number < 7; Number++)
         {
             if (Temp_Info.curveToUse[Number])
             {
                 CurveToUseOnly.Add(Number);
             }
         }
         int    Curve_Number     = 0;
         bool   IsExistVolumeDry = false;
         bool   IsExistLPF       = false;
         bool   IsExistHPF       = false;
         bool   IsExistSpread    = false;
         bool   IsExistFocus     = false;
         double RTPC_Max_Value   = 0;
         for (int Number = Temp_Info.Curve_Start_Line; Number <= Temp_Info.Curve_End_Line; Number++)
         {
             if (BNK_Info.Read_All[Number].Contains("<object name=\"CAkConversionTable\""))
             {
                 bool IsEndOK        = true;
                 int  pRTPCMgr_Count = 0;
                 for (int Number_01 = Number; Number_01 <= Temp_Info.Curve_End_Line; Number_01++)
                 {
                     if (BNK_Info.Read_All[Number_01].Contains("<list name=\"pRTPCMgr\""))
                     {
                         pRTPCMgr_Count = int.Parse(Get_Config.Get_Count(BNK_Info.Read_All[Number_01]));
                         IsEndOK        = false;
                     }
                     else if (BNK_Info.Read_All[Number_01].Contains("</list>"))
                     {
                         IsEndOK = true;
                     }
                     if (BNK_Info.Read_All[Number_01].Contains("</object>") && IsEndOK)
                     {
                         break;
                     }
                 }
                 string Header_Name     = "";
                 string Curve_Name_Line = "";
                 int    Flag            = 0;
                 if (CurveToUseOnly[Curve_Number] == 0)
                 {
                     Header_Name      = "VolumeDryUsage";
                     Curve_Name_Line  = "<Curve Name=\"VolumeDry\" ID=\"{A9E42A0E-83F8-4B7D-A14F-480B0C2B51DF}\">";
                     Flag             = 3;
                     IsExistVolumeDry = true;
                 }
                 else if (CurveToUseOnly[Curve_Number] == 3)
                 {
                     Header_Name     = "LowPassFilterUsage";
                     Curve_Name_Line = "<Curve Name=\"LowPassFilter\" ID=\"{4F001EC2-9CC8-4392-8288-1EEA50989868}\">";
                     Flag            = 65537;
                     IsExistLPF      = true;
                 }
                 else if (CurveToUseOnly[Curve_Number] == 4)
                 {
                     Header_Name     = "HighPassFilterUsage";
                     Curve_Name_Line = "<Curve Name=\"HighPassFilter\" ID=\"{5B13F357-F022-4AB6-B0F0-9AB4B403F248}\">";
                     Flag            = 65537;
                     IsExistHPF      = true;
                 }
                 else if (CurveToUseOnly[Curve_Number] == 5)
                 {
                     Header_Name     = "SpreadUsage";
                     Curve_Name_Line = "<Curve Name=\"Spread\" ID=\"{67C40131-35B3-4291-A98F-1BA12172DF31}\">";
                     Flag            = 1;
                     IsExistSpread   = true;
                 }
                 else if (CurveToUseOnly[Curve_Number] == 6)
                 {
                     Header_Name     = "FocusUsage";
                     Curve_Name_Line = "<Curve Name=\"Focus\" ID=\"{6DA87678-DAE5-4A25-B176-67FC98AE4E99}\">";
                     Flag            = 1;
                     IsExistFocus    = true;
                 }
                 Write_All.Add("<" + Header_Name + ">");
                 Write_All.Add("<CurveUsageInfo Platform=\"Linked\" CurveToUse=\"Custom\">");
                 Write_All.Add(Curve_Name_Line);
                 Write_All.Add("<PropertyList>");
                 Write_All.Add("<Property Name=\"Flags\" Type=\"int32\" Value=\"" + Flag + "\"/>");
                 Write_All.Add("</PropertyList>");
                 Write_All.Add("<PointList>");
                 //RTPCの処理とほとんど同じ
                 //ただし、音量の設定のみは0で元の音量、-1で全く聞こえなくなるという感じなので45 * Y_Posにしています(45は大体の目安)
                 for (int Number_01 = Number; Number_01 <= Temp_Info.Curve_End_Line; Number_01++)
                 {
                     if (BNK_Info.Read_All[Number_01].Contains("<object name=\"AkRTPCGraphPoint\""))
                     {
                         int RTPC_Number = int.Parse(Get_Config.Get_Index(BNK_Info.Read_All[Number_01]));
                         Write_All.Add("<Point>");
                         double X_Pos  = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + 1]));
                         double Y_Pos  = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + 2]));
                         string Interp = Get_Config.Get_SegmentShape(Get_Config.Get_Value_FMT(BNK_Info.Read_All[Number_01 + 3]));
                         Write_All.Add("<XPos>" + X_Pos + "</XPos>");
                         if (CurveToUseOnly[Curve_Number] == 0)
                         {
                             Write_All.Add("<YPos>" + (int)(45 * Y_Pos) + "</YPos>");
                         }
                         else
                         {
                             Write_All.Add("<YPos>" + Y_Pos + "</YPos>");
                         }
                         if (RTPC_Number == 0)
                         {
                             Write_All.Add("<Flags>5</Flags>");
                         }
                         else if (RTPC_Number + 1 == pRTPCMgr_Count)
                         {
                             Write_All.Add("<Flags>37</Flags>");
                         }
                         else
                         {
                             Write_All.Add("<Flags>0</Flags>");
                         }
                         if (RTPC_Max_Value < X_Pos)
                         {
                             RTPC_Max_Value = X_Pos;
                         }
                         if (Interp != "")
                         {
                             Write_All.Add("<SegmentShape>" + Interp + "</SegmentShape>");
                         }
                         Write_All.Add("</Point>");
                     }
                     if (BNK_Info.Read_All[Number_01].Contains("</list>"))
                     {
                         break;
                     }
                 }
                 //RTPCの設定より前に記述する必要があるため、Insertで無理やりねじ込む
                 Write_All.Add("</PointList>");
                 Write_All.Add("</Curve>");
                 Write_All.Add("</CurveUsageInfo>");
                 Write_All.Add("</" + Header_Name + ">");
                 //音量の設定のみ以下の文字列が必要
                 if (CurveToUseOnly[Curve_Number] == 0)
                 {
                     Write_All.Add("<VolumeWetGameUsage>");
                     Write_All.Add("<CurveUsageInfo Platform=\"Linked\" CurveToUse=\"UseVolumeDry\"/>");
                     Write_All.Add("</VolumeWetGameUsage>");
                     Write_All.Add("<VolumeWetUserUsage>");
                     Write_All.Add("<CurveUsageInfo Platform=\"Linked\" CurveToUse=\"UseVolumeDry\"/>");
                     Write_All.Add("</VolumeWetUserUsage>");
                 }
                 Curve_Number++;
             }
         }
         CurveToUseOnly.Clear();
         Write_All.Insert(Write_Max_Value_Line, "<Property Name=\"RadiusMax\" Type=\"Real64\" Value=\"" + RTPC_Max_Value + "\"/>");
         //以下の設定がない場合、設定がないことを記述
         //よくよく考えたら必要ないことに気が付いた
         if (!IsExistVolumeDry)
         {
             Add_Not_Use_Property("VolumeDryUsage", Insert_Start_Line);
         }
         if (!IsExistLPF)
         {
             Add_Not_Use_Property("LowPassFilterUsage", Insert_Start_Line);
         }
         if (!IsExistHPF)
         {
             Add_Not_Use_Property("HighPassFilterUsage", Insert_Start_Line);
         }
         if (!IsExistSpread)
         {
             Add_Not_Use_Property("SpreadUsage", Insert_Start_Line);
         }
         if (!IsExistFocus)
         {
             Add_Not_Use_Property("FocusUsage", Insert_Start_Line);
         }
         Write_All.Add("</CurveUsageInfoList>");
         Write_All.Add("</Attenuation>");
     }
     Write_All.Add("</ChildrenList>");
     Write_All.Add("</WorkUnit>");
     Write_All.Add("</Attenuations>");
     Write_All.Add("</WwiseDocument>");
     //ファイルに書き込んでメモリを解放
     File.WriteAllLines(To_File, Write_All);
     Write_All.Clear();
 }
Пример #9
0
        public static void Init()
        {
            for (int Number = 0; Number < BNK_Info.Init_Read_All.Count; Number++)
            {
                if (BNK_Info.Init_Read_All[Number].Contains("<object name=\"AkStateGroup\""))
                {
                    uint   Parent_Short_ID       = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Init_Read_All[Number + 1]));
                    double DefaultTransitionTime = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Init_Read_All[Number + 2]));
                    Number += 2;
                    List <State_Child> Child = new List <State_Child>();
                    for (int Number_01 = Number + 3; Number_01 < BNK_Info.Init_Read_All.Count; Number_01++)
                    {
                        if (BNK_Info.Init_Read_All[Number_01].Contains("object name=\"AkStateTransition\""))
                        {
                            uint From        = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Init_Read_All[Number_01 + 1]));
                            uint To          = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Init_Read_All[Number_01 + 2]));
                            bool IsFromExist = false;
                            bool IsToExist   = false;
                            for (int Number_02 = 0; Number_02 < State_Child_Info.Count; Number_02++)
                            {
                                if (State_Child_Info[Number_02].Short_ID == From)
                                {
                                    IsFromExist = true;
                                }
                                else if (State_Child_Info[Number_02].Short_ID == To)
                                {
                                    IsToExist = true;
                                }
                            }
                            if (!IsFromExist)
                            {
                                State_Child_Info.Add(new State_Child_Relation(From));
                            }
                            if (!IsToExist)
                            {
                                State_Child_Info.Add(new State_Child_Relation(To));
                            }
                            double Time = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Init_Read_All[Number_01 + 3]));
                            Child.Add(new State_Child(From, To, Time));
                            Number_01 += 2;
                            Number    += 3;
                        }
                        else if (BNK_Info.Init_Read_All[Number_01].Contains("</list>"))
                        {
                            break;
                        }
                    }
                    State_All_Info.Add(new State_Parent(Parent_Short_ID, DefaultTransitionTime, Child));
                }
            }
            List <int> State_Numbers = new List <int>();

            for (int Number = 0; Number < BNK_Info.ID_Line.Count; Number++)
            {
                if (BNK_Info.ID_Line[Number][2] == "CAkState")
                {
                    State_Numbers.Add(Number);
                }
            }
            foreach (int Number in State_Numbers)
            {
                double Volume     = 0;
                double Pitch      = 0;
                double LPF        = 0;
                double HPF        = 0;
                double MakeUpGain = 0;
                for (int Number_01 = int.Parse(BNK_Info.ID_Line[Number][1]); Number_01 < BNK_Info.Read_All.Count; Number_01++)
                {
                    string Read_Line = BNK_Info.Read_All[Number_01];
                    //Switch_GroupのShortIDを取得
                    if (Read_Line.Contains("valuefmt=\"0x00[Volume]\""))
                    {
                        Volume = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + 1]));
                    }
                    else if (Read_Line.Contains("valuefmt=\"0x02 [Pitch]\""))
                    {
                        Pitch = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + 1]));
                    }
                    else if (Read_Line.Contains("valuefmt=\"0x03 [LPF]\""))
                    {
                        LPF = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + 1]));
                    }
                    else if (Read_Line.Contains("valuefmt=\"0x04 [HPF]\""))
                    {
                        HPF = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + 1]));
                    }
                    else if (Read_Line.Contains("valuefmt=\"0x07 [StatePropNum/Priority]\""))
                    {
                        MakeUpGain = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + 1]));
                    }
                    if (Read_Line.Contains("</list>"))
                    {
                        break;
                    }
                }
                State_Value_Info.Add(new State_Relation(uint.Parse(BNK_Info.ID_Line[Number][0]), Volume, Pitch, LPF, HPF, MakeUpGain));
            }
            State_Numbers.Clear();
            IsInited = true;
        }
        public static void Init()
        {
            if (BNK_Info.Read_All.Count == 0)
            {
                return;
            }
            List <int> Switch_Numbers = new List <int>();

            //Blend Containerのみを抽出
            for (int Number = 0; Number < BNK_Info.ID_Line.Count; Number++)
            {
                if (BNK_Info.ID_Line[Number][2] == "CAkLayerCntr")
                {
                    Switch_Numbers.Add(Number);
                }
            }
            foreach (int Number in Switch_Numbers)
            {
                uint Parent_ShortID = uint.Parse(BNK_Info.ID_Line[Number][0]);
                int  Start_Line     = -1;
                //特定の文字がある行までスキップ
                for (int Number_01 = int.Parse(BNK_Info.ID_Line[Number][1]); Number_01 < BNK_Info.Read_All.Count; Number_01++)
                {
                    if (BNK_Info.Read_All[Number_01].Contains("<list name=\"pLayers\""))
                    {
                        Start_Line = Number_01;
                        break;
                    }
                    if (BNK_Info.Read_All[Number_01].Contains("type=\"u8\" name=\"eHircType\""))
                    {
                        break;
                    }
                }
                if (Start_Line == -1)
                {
                    break;
                }
                //レイヤー1つ1つの中の情報をリストに保存
                for (int Number_01 = Start_Line; Number_01 < BNK_Info.Read_All.Count; Number_01++)
                {
                    if (BNK_Info.Read_All[Number_01].Contains("<object name=\"CAkLayer\""))
                    {
                        uint Layer_ShortID = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_01 + 1]));
                        uint RTPC_ShortID  = 0;
                        for (int Number_02 = Number_01; Number_02 < BNK_Info.Read_All.Count; Number_02++)
                        {
                            if (BNK_Info.Read_All[Number_02].Contains("type=\"tid\" name=\"rtpcID\""))
                            {
                                RTPC_ShortID = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_02]));
                                break;
                            }
                            if (BNK_Info.Read_All[Number_01].Contains("type=\"u8\" name=\"eHircType\""))
                            {
                                break;
                            }
                        }
                        if (RTPC_ShortID != 0)
                        {
                            List <Layer_CrossFade> CrossFades = new List <Layer_CrossFade>();
                            for (int Number_02 = Number_01 + 1; Number_02 < BNK_Info.Read_All.Count; Number_02++)
                            {
                                if (BNK_Info.Read_All[Number_02].Contains("<object name=\"CAssociatedChildData\""))
                                {
                                    uint   Target_ShortID  = uint.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_02 + 1]));
                                    int    RTPC_Count      = int.Parse(Get_Config.Get_Count(BNK_Info.Read_All[Number_02 + 3]));
                                    int    Next_Index      = 0;
                                    int    Next_Index_Plus = 2;
                                    double Start_From      = 0;
                                    double Start_To        = 0;
                                    double End_From        = 0;
                                    double End_To          = 0;
                                    bool   IsEnd           = false;
                                    for (int Number_03 = Number_02; Number_03 < BNK_Info.Read_All.Count; Number_03++)
                                    {
                                        if (BNK_Info.Read_All[Number_03].Contains("</list>") || BNK_Info.Read_All[Number_03].Contains("type=\"u8\" name=\"eHircType\""))
                                        {
                                            break;
                                        }
                                        if (BNK_Info.Read_All[Number_03].Contains("<object name=\"AkRTPCGraphPoint\""))
                                        {
                                            int Index_Now = int.Parse(Get_Config.Get_Index(BNK_Info.Read_All[Number_03]));
                                            if (Index_Now == Next_Index)
                                            {
                                                Start_From = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_03 + 1]));
                                                Start_To   = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_03 + 2]));
                                                if (Start_To == 1)
                                                {
                                                    Next_Index_Plus = 2;
                                                }
                                                else
                                                {
                                                    Next_Index_Plus = 3;
                                                }
                                            }
                                            else if (Index_Now == Next_Index + Next_Index_Plus || Index_Now == RTPC_Count - 1)
                                            {
                                                End_From   = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_03 + 1]));
                                                End_To     = double.Parse(Get_Config.Get_Property_Value(BNK_Info.Read_All[Number_03 + 2]));
                                                Next_Index = Index_Now + 1;
                                                IsEnd      = true;
                                            }
                                        }
                                        if (IsEnd)
                                        {
                                            CrossFades.Add(new Layer_CrossFade(Target_ShortID, Start_From, Start_To, End_From, End_To));
                                            Start_From = 0;
                                            Start_To   = 0;
                                            End_From   = 0;
                                            End_To     = 0;
                                            IsEnd      = false;
                                        }
                                    }
                                }
                                else if (BNK_Info.Read_All[Number_02].Contains("type=\"u8\" name=\"eHircType\"") || BNK_Info.Read_All[Number_02].Contains("<object name=\"CAkLayer\""))
                                {
                                    break;
                                }
                            }
                            Layer_Info.Add(new Layer_Relation(Parent_ShortID, Layer_ShortID, RTPC_ShortID, Number_01, CrossFades));
                        }
                    }
                    else if (BNK_Info.Read_All[Number_01].Contains("type=\"u8\" name=\"eHircType\""))
                    {
                        break;
                    }
                }
            }
            Switch_Numbers.Clear();
            //情報を視覚的にするためファイルに保存

            /*List<string> Test = new List<string>();
             * foreach (Layer_Relation Temp_01 in Layer_Info)
             * {
             *  Test.Add("ShortID:" + Temp_01.ShortID);
             *  Test.Add("Parent_ShortID:" + Temp_01.Parent_ShortID);
             *  Test.Add("RTPC_ShortID:" + Temp_01.RTPC_ShortID);
             *  Test.Add("GUID:" + Temp_01.GUID);
             *  foreach (Layer_CrossFade Temp_02 in Temp_01.Children)
             *  {
             *      Test.Add("    Target_ShortID:" + Temp_02.Target_ShortID);
             *      Test.Add("    Start_From:" + Temp_02.Start_From);
             *      Test.Add("    Start_To:" + Temp_02.Start_To);
             *      Test.Add("    End_From:" + Temp_02.End_From);
             *      Test.Add("    End_To:" + Temp_02.End_To);
             *  }
             * }
             * File.WriteAllLines(Voice_Set.Special_Path + "/Test.txt", Test);
             * Test.Clear();*/
        }