//イベント名がなければ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); } }
//必ず実行させる //イベント情報をリストに保存 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]); } } } } }
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; }
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(); }
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; }
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; }
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(); }
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();*/ }