OSDN Git Service

#36057 コンフィグまわりのリファクタ(リソース不完全なので注意)
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / スコア、曲 / CSong管理.cs
index e5f8acd..f74c181 100644 (file)
@@ -45,14 +45,14 @@ namespace DTXMania
                        set;\r
                }\r
                [NonSerialized]\r
-               public List<Cスコア> listSongsDB;                                    // songs.dbから構築されるlist\r
-               public List<C曲リストノード> list曲ルート;                   // 起動時にフォルダ検索して構築されるlist\r
-               public bool bIsSuspending                                                       // 外部スレッドから、内部スレッドのsuspendを指示する時にtrueにする\r
-               {                                                                                                       // 再開時は、これをfalseにしてから、次のautoReset.Set()を実行する\r
+               public List<Cスコア> listSongsDB;          // songs.dbから構築されるlist\r
+               public List<C曲リストノード> list曲ルート;     // 起動時にフォルダ検索して構築されるlist\r
+               public bool bIsSuspending             // 外部スレッドから、内部スレッドのsuspendを指示する時にtrueにする\r
+               {                         // 再開時は、これをfalseにしてから、次のautoReset.Set()を実行する\r
                        get;\r
                        set;\r
                }\r
-               public bool bIsSlowdown                                                         // #PREMOVIE再生時に曲検索を遅くする\r
+               public bool bIsSlowdown               // #PREMOVIE再生時に曲検索を遅くする\r
                {\r
                        get;\r
                        set;\r
@@ -71,7 +71,7 @@ namespace DTXMania
                        }\r
                }\r
 \r
-               private int searchCount;                                                        // #PREMOVIE中は検索n回実行したら少しスリープする\r
+               private int searchCount;              // #PREMOVIE中は検索n回実行したら少しスリープする\r
 \r
                // コンストラクタ\r
 \r
@@ -81,8 +81,8 @@ namespace DTXMania
                        this.list曲ルート = new List<C曲リストノード>();\r
                        this.n検索された曲ノード数 = 0;\r
                        this.n検索されたスコア数 = 0;\r
-                       this.bIsSuspending = false;                                             // #27060\r
-                       this.autoReset = new AutoResetEvent(true);      // #27060\r
+                       this.bIsSuspending = false;           // #27060\r
+                       this.autoReset = new AutoResetEvent(true);  // #27060\r
                        this.searchCount = 0;\r
                }\r
 \r
@@ -143,7 +143,7 @@ namespace DTXMania
 \r
                        DirectoryInfo info = new DirectoryInfo(str基点フォルダ);\r
 \r
-                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                Trace.TraceInformation("基点フォルダ: " + str基点フォルダ);\r
 \r
                        #region [ a.フォルダ内に set.def が存在する場合 → set.def からノード作成]\r
@@ -153,14 +153,14 @@ namespace DTXMania
                        {\r
                                CSetDef def = new CSetDef(path);\r
                                new FileInfo(path);\r
-                               if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                               if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                {\r
                                        Trace.TraceInformation("set.def検出 : {0}", path);\r
                                        Trace.Indent();\r
                                }\r
                                try\r
                                {\r
-                                       SlowOrSuspendSearchTask();              // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
+                                       SlowOrSuspendSearchTask();    // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
                                        for (int i = 0; i < def.blocks.Count; i++)\r
                                        {\r
                                                CSetDef.CBlock block = def.blocks[i];\r
@@ -211,7 +211,7 @@ namespace DTXMania
                                                {\r
                                                        listノードリスト.Add(item);\r
                                                        this.n検索された曲ノード数++;\r
-                                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                                        {\r
                                                                StringBuilder builder = new StringBuilder(0x200);\r
                                                                builder.Append(string.Format("nID#{0:D3}", item.nID));\r
@@ -264,7 +264,7 @@ namespace DTXMania
                                }\r
                                finally\r
                                {\r
-                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                        {\r
                                                Trace.Unindent();\r
                                        }\r
@@ -279,7 +279,7 @@ namespace DTXMania
                        {\r
                                foreach (FileInfo fileinfo in info.GetFiles())\r
                                {\r
-                                       SlowOrSuspendSearchTask();              // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
+                                       SlowOrSuspendSearchTask();    // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
                                        string strExt = fileinfo.Extension.ToLower();\r
                                        if ((strExt.Equals(".dtx") || strExt.Equals(".gda")) || ((strExt.Equals(".g2d") || strExt.Equals(".bms")) || strExt.Equals(".bme")))\r
                                        {\r
@@ -306,7 +306,7 @@ namespace DTXMania
                                                this.n検索されたスコア数++;\r
                                                listノードリスト.Add(c曲リストノード);\r
                                                this.n検索された曲ノード数++;\r
-                                               if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                               if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                                {\r
                                                        Trace.Indent();\r
                                                        try\r
@@ -343,7 +343,7 @@ namespace DTXMania
 \r
                        foreach (DirectoryInfo infoDir in info.GetDirectories())\r
                        {\r
-                               SlowOrSuspendSearchTask();              // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
+                               SlowOrSuspendSearchTask();    // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
 \r
                                #region [ a. "dtxfiles." で始まるフォルダの場合 ]\r
                                //-----------------------------\r
@@ -420,11 +420,11 @@ namespace DTXMania
                                                        {\r
                                                                // box.defに記載されているスキン情報をコピー。末尾に必ず\をつけておくこと。\r
                                                                string s = System.IO.Path.Combine(infoDir.FullName, boxdef.SkinPath);\r
-                                                               if (s[s.Length - 1] != System.IO.Path.DirectorySeparatorChar)   // フォルダ名末尾に\を必ずつけて、CSkin側と表記を統一する\r
+                                                               if (s[s.Length - 1] != System.IO.Path.DirectorySeparatorChar) // フォルダ名末尾に\を必ずつけて、CSkin側と表記を統一する\r
                                                                {\r
                                                                        s += System.IO.Path.DirectorySeparatorChar;\r
                                                                }\r
-                                                               if (CDTXMania.app.Skin.bIsValid(s))\r
+                                                               if (CDTXMania.Instance.Skin.bIsValid(s))\r
                                                                {\r
                                                                        c曲リストノード.strSkinPath = s;\r
                                                                }\r
@@ -452,7 +452,7 @@ namespace DTXMania
                                                        c曲リストノード.nPoor範囲ms = boxdef.PoorRange;\r
                                                }\r
                                        }\r
-                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                        {\r
                                                Trace.Indent();\r
                                                try\r
@@ -519,11 +519,11 @@ namespace DTXMania
                                        {\r
                                                // box.defに記載されているスキン情報をコピー。末尾に必ず\をつけておくこと。\r
                                                string s = System.IO.Path.Combine(infoDir.FullName, boxdef.SkinPath);\r
-                                               if (s[s.Length - 1] != System.IO.Path.DirectorySeparatorChar)   // フォルダ名末尾に\を必ずつけて、CSkin側と表記を統一する\r
+                                               if (s[s.Length - 1] != System.IO.Path.DirectorySeparatorChar) // フォルダ名末尾に\を必ずつけて、CSkin側と表記を統一する\r
                                                {\r
                                                        s += System.IO.Path.DirectorySeparatorChar;\r
                                                }\r
-                                               if (CDTXMania.app.Skin.bIsValid(s))\r
+                                               if (CDTXMania.Instance.Skin.bIsValid(s))\r
                                                {\r
                                                        c曲リストノード.strSkinPath = s;\r
                                                }\r
@@ -543,7 +543,7 @@ namespace DTXMania
                                        c曲リストノード.nGood範囲ms = boxdef.GoodRange;\r
                                        c曲リストノード.nPoor範囲ms = boxdef.PoorRange;\r
                                        listノードリスト.Add(c曲リストノード);\r
-                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                        {\r
                                                Trace.TraceInformation("box.def検出 : {0}", infoDir.FullName + @"\box.def");\r
                                                Trace.Indent();\r
@@ -648,7 +648,7 @@ namespace DTXMania
                        {\r
                                while (enumerator.MoveNext())\r
                                {\r
-                                       SlowOrSuspendSearchTask();              // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
+                                       SlowOrSuspendSearchTask();    // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
 \r
                                        C曲リストノード node = enumerator.Current;\r
                                        if (node.eノード種別 == C曲リストノード.Eノード種別.BOX)\r
@@ -664,7 +664,7 @@ namespace DTXMania
                                                        {\r
                                                                if (match == null)\r
                                                                {\r
-                                                                       match = delegate(Cスコア sc)\r
+                                                                       match = delegate (Cスコア sc)\r
                                                                        {\r
                                                                                return\r
                                                                                        (\r
@@ -679,7 +679,7 @@ namespace DTXMania
                                                                if (nMatched == -1)\r
                                                                {\r
                                                                        //Trace.TraceInformation( "songs.db に存在しません。({0})", node.arスコア[ lv ].ファイル情報.ファイルの絶対パス );\r
-                                                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                                                        {\r
                                                                                Trace.TraceInformation("songs.db に存在しません。({0})", node.arスコア[lv].ファイル情報.ファイルの絶対パス);\r
                                                                        }\r
@@ -688,7 +688,7 @@ namespace DTXMania
                                                                {\r
                                                                        node.arスコア[lv].譜面情報 = this.listSongsDB[nMatched].譜面情報;\r
                                                                        node.arスコア[lv].bSongDBにキャッシュがあった = true;\r
-                                                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                                                        {\r
                                                                                Trace.TraceInformation("songs.db から転記しました。({0})", node.arスコア[lv].ファイル情報.ファイルの絶対パス);\r
                                                                        }\r
@@ -699,25 +699,23 @@ namespace DTXMania
                                                                                try\r
                                                                                {\r
                                                                                        CScoreIni scoreIni = new CScoreIni(strFileNameScoreIni);\r
-                                                                                       scoreIni.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
-                                                                                       for (int i = 0; i < 3; i++)\r
+                                                                                       for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
                                                                                        {\r
-                                                                                               int nSectionHiSkill = (i * 2) + 1;\r
-                                                                                               if (scoreIni.stセクション[nSectionHiSkill].b演奏にMIDI入力を使用した\r
-                                                                                                       || scoreIni.stセクション[nSectionHiSkill].b演奏にキーボードを使用した\r
-                                                                                                       || scoreIni.stセクション[nSectionHiSkill].b演奏にジョイパッドを使用した\r
-                                                                                                       || scoreIni.stセクション[nSectionHiSkill].b演奏にマウスを使用した)\r
+                                                                                               if (scoreIni.stセクション.HiSkill[i].b演奏にMIDI入力を使用した\r
+                                                                                                       || scoreIni.stセクション.HiSkill[i].b演奏にキーボードを使用した\r
+                                                                                                       || scoreIni.stセクション.HiSkill[i].b演奏にジョイパッドを使用した\r
+                                                                                                       || scoreIni.stセクション.HiSkill[i].b演奏にマウスを使用した)\r
                                                                                                {\r
                                                                                                        node.arスコア[lv].譜面情報.最大ランク[i] =\r
-                                                                                                               (scoreIni.stファイル.BestRank[i] != (int)CScoreIni.ERANK.UNKNOWN) ?\r
-                                                                                                               (int)scoreIni.stファイル.BestRank[i] : CScoreIni.tランク値を計算して返す(scoreIni.stセクション[nSectionHiSkill]);\r
+                                                                                                               (scoreIni.stファイル.BestRank[i] != CScoreIni.ERANK.UNKNOWN) ?\r
+                                                                                                               scoreIni.stファイル.BestRank[i] : CScoreIni.tランク値を計算して返す(scoreIni.stセクション.HiSkill[i]);\r
                                                                                                }\r
                                                                                                else\r
                                                                                                {\r
-                                                                                                       node.arスコア[lv].譜面情報.最大ランク[i] = (int)CScoreIni.ERANK.UNKNOWN;\r
+                                                                                                       node.arスコア[lv].譜面情報.最大ランク[i] = CScoreIni.ERANK.UNKNOWN;\r
                                                                                                }\r
-                                                                                               node.arスコア[lv].譜面情報.最大スキル[i] = scoreIni.stセクション[nSectionHiSkill].db演奏型スキル値;\r
-                                                                                               node.arスコア[lv].譜面情報.フルコンボ[i] = scoreIni.stセクション[nSectionHiSkill].bフルコンボである;\r
+                                                                                               node.arスコア[lv].譜面情報.最大スキル[i] = scoreIni.stセクション.HiSkill[i].db演奏型スキル値;\r
+                                                                                               node.arスコア[lv].譜面情報.フルコンボ[i] = scoreIni.stセクション.HiSkill[i].bフルコンボである;\r
                                                                                        }\r
                                                                                        node.arスコア[lv].譜面情報.演奏回数.Drums = scoreIni.stファイル.PlayCountDrums;\r
                                                                                        node.arスコア[lv].譜面情報.演奏回数.Guitar = scoreIni.stファイル.PlayCountGuitar;\r
@@ -726,7 +724,7 @@ namespace DTXMania
                                                                                        {\r
                                                                                                node.arスコア[lv].譜面情報.演奏履歴[j] = scoreIni.stファイル.History[j];\r
                                                                                        }\r
-                                                                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                                                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                                                                        {\r
                                                                                                Trace.TraceInformation("演奏記録ファイルから HiSkill 情報と演奏履歴を取得しました。({0})", strFileNameScoreIni);\r
                                                                                        }\r
@@ -763,9 +761,9 @@ namespace DTXMania
                        cスコア.譜面情報.レベル.Drums = br.ReadInt32();\r
                        cスコア.譜面情報.レベル.Guitar = br.ReadInt32();\r
                        cスコア.譜面情報.レベル.Bass = br.ReadInt32();\r
-                       cスコア.譜面情報.最大ランク.Drums = br.ReadInt32();\r
-                       cスコア.譜面情報.最大ランク.Guitar = br.ReadInt32();\r
-                       cスコア.譜面情報.最大ランク.Bass = br.ReadInt32();\r
+                       cスコア.譜面情報.最大ランク.Drums = (CScoreIni.ERANK)br.ReadInt32();\r
+                       cスコア.譜面情報.最大ランク.Guitar = (CScoreIni.ERANK)br.ReadInt32();\r
+                       cスコア.譜面情報.最大ランク.Bass = (CScoreIni.ERANK)br.ReadInt32();\r
                        cスコア.譜面情報.最大スキル.Drums = br.ReadDouble();\r
                        cスコア.譜面情報.最大スキル.Guitar = br.ReadDouble();\r
                        cスコア.譜面情報.最大スキル.Bass = br.ReadDouble();\r
@@ -784,6 +782,9 @@ namespace DTXMania
                        cスコア.譜面情報.曲種別 = (EDTX種別)br.ReadInt32();\r
                        cスコア.譜面情報.Bpm = br.ReadDouble();\r
                        cスコア.譜面情報.Duration = br.ReadInt32();\r
+                       cスコア.譜面情報.使用レーン数.Drums = br.ReadInt32();\r
+                       cスコア.譜面情報.使用レーン数.Guitar = br.ReadInt32();\r
+                       cスコア.譜面情報.使用レーン数.Bass = br.ReadInt32();\r
 \r
                        //Debug.WriteLine( "songs.db: " + cスコア.ファイル情報.ファイルの絶対パス );\r
                        return cスコア;\r
@@ -801,7 +802,7 @@ namespace DTXMania
                {\r
                        foreach (C曲リストノード c曲リストノード in ノードリスト)\r
                        {\r
-                               SlowOrSuspendSearchTask();              // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
+                               SlowOrSuspendSearchTask();    // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
 \r
                                if (c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX)\r
                                {\r
@@ -814,14 +815,14 @@ namespace DTXMania
                                        {\r
                                                if ((c曲リストノード.arスコア[i] != null) && !c曲リストノード.arスコア[i].bSongDBにキャッシュがあった)\r
                                                {\r
-                                                       #region [ DTX ファイルのヘッダだけ読み込み、Cスコア.譜面情報 を設定する ]\r
+                                                       #region [ Cスコア.譜面情報 を設定する ]\r
                                                        //-----------------\r
                                                        string path = c曲リストノード.arスコア[i].ファイル情報.ファイルの絶対パス;\r
                                                        if (File.Exists(path))\r
                                                        {\r
                                                                try\r
                                                                {\r
-                                                                       CDTX cdtx = new CDTX(c曲リストノード.arスコア[i].ファイル情報.ファイルの絶対パス, true);\r
+                                                                       CDTX cdtx = new CDTX(c曲リストノード.arスコア[i].ファイル情報.ファイルの絶対パス, false);//DTX ファイルのヘッダだけ読み込んでいたが、使用レーン数の集計の為全て読み込みに変更\r
                                                                        c曲リストノード.arスコア[i].譜面情報.タイトル = cdtx.TITLE;\r
                                                                        c曲リストノード.arスコア[i].譜面情報.アーティスト名 = cdtx.ARTIST;\r
                                                                        c曲リストノード.arスコア[i].譜面情報.コメント = cdtx.COMMENT;\r
@@ -836,13 +837,16 @@ namespace DTXMania
                                                                        c曲リストノード.arスコア[i].譜面情報.レベルを非表示にする = cdtx.HIDDENLEVEL;\r
                                                                        c曲リストノード.arスコア[i].譜面情報.曲種別 = cdtx.e種別;\r
                                                                        c曲リストノード.arスコア[i].譜面情報.Bpm = cdtx.BPM;\r
-                                                                       c曲リストノード.arスコア[i].譜面情報.Duration = 0;        //  (cdtx.listChip == null)? 0 : cdtx.listChip[ cdtx.listChip.Count - 1 ].n発声時刻ms;\r
+                                                                       c曲リストノード.arスコア[i].譜面情報.Duration = 0;  //  (cdtx.listChip == null)? 0 : cdtx.listChip[ cdtx.listChip.Count - 1 ].n発声時刻ms;\r
+                                                                       c曲リストノード.arスコア[i].譜面情報.使用レーン数.Drums = cdtx.n使用レーン数.Drums;\r
+                                                                       c曲リストノード.arスコア[i].譜面情報.使用レーン数.Guitar = cdtx.n使用レーン数.Guitar;\r
+                                                                       c曲リストノード.arスコア[i].譜面情報.使用レーン数.Bass = cdtx.n使用レーン数.Bass;\r
                                                                        this.nファイルから反映できたスコア数++;\r
                                                                        cdtx.On非活性化();\r
                                                                        //Debug.WriteLine( "★" + this.nファイルから反映できたスコア数 + " " + c曲リストノード.arスコア[ i ].譜面情報.タイトル );\r
                                                                        #region [ 曲検索ログ出力 ]\r
                                                                        //-----------------\r
-                                                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                                                        {\r
                                                                                StringBuilder sb = new StringBuilder(0x400);\r
                                                                                sb.Append(string.Format("曲データファイルから譜面情報を転記しました。({0})", path));\r
@@ -861,6 +865,9 @@ namespace DTXMania
                                                                                sb.Append(", type=" + c曲リストノード.arスコア[i].譜面情報.曲種別);\r
                                                                                sb.Append(", bpm=" + c曲リストノード.arスコア[i].譜面情報.Bpm);\r
                                                                                //      sb.Append( ", duration=" + c曲リストノード.arスコア[ i ].譜面情報.Duration );\r
+                                                                               sb.Append(", lnDr=" + c曲リストノード.arスコア[i].譜面情報.使用レーン数.Drums);\r
+                                                                               sb.Append(", lnGt=" + c曲リストノード.arスコア[i].譜面情報.使用レーン数.Guitar);\r
+                                                                               sb.Append(", lnBs=" + c曲リストノード.arスコア[i].譜面情報.使用レーン数.Bass);\r
                                                                                Trace.TraceInformation(sb.ToString());\r
                                                                        }\r
                                                                        //-----------------\r
@@ -895,9 +902,9 @@ namespace DTXMania
                public void t曲リストへ後処理を適用する()\r
                {\r
                        listStrBoxDefSkinSubfolderFullName = new List<string>();\r
-                       if (CDTXMania.app.Skin.strBoxDefSkinSubfolders != null)\r
+                       if (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders != null)\r
                        {\r
-                               foreach (string b in CDTXMania.app.Skin.strBoxDefSkinSubfolders)\r
+                               foreach (string b in CDTXMania.Instance.Skin.strBoxDefSkinSubfolders)\r
                                {\r
                                        listStrBoxDefSkinSubfolderFullName.Add(b);\r
                                }\r
@@ -906,7 +913,7 @@ namespace DTXMania
                        this.t曲リストへ後処理を適用する(this.list曲ルート);\r
 \r
                        #region [ skin名で比較して、systemスキンとboxdefスキンに重複があれば、boxdefスキン側を削除する ]\r
-                       string[] systemSkinNames = CSkin.GetSkinName(CDTXMania.app.Skin.strSystemSkinSubfolders);\r
+                       string[] systemSkinNames = CSkin.GetSkinName(CDTXMania.Instance.Skin.strSystemSkinSubfolders);\r
                        List<string> l = new List<string>(listStrBoxDefSkinSubfolderFullName);\r
                        foreach (string boxdefSkinSubfolderFullName in l)\r
                        {\r
@@ -920,7 +927,7 @@ namespace DTXMania
                        #endregion\r
                        string[] ba = listStrBoxDefSkinSubfolderFullName.ToArray();\r
                        Array.Sort(ba);\r
-                       CDTXMania.app.Skin.strBoxDefSkinSubfolders = ba;\r
+                       CDTXMania.Instance.Skin.strBoxDefSkinSubfolders = ba;\r
                }\r
                private void t曲リストへ後処理を適用する(List<C曲リストノード> ノードリスト)\r
                {\r
@@ -951,7 +958,7 @@ namespace DTXMania
 \r
                                #region [ ログ出力 ]\r
                                //-----------------------------\r
-                               if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                               if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                {\r
                                        StringBuilder sb = new StringBuilder(0x100);\r
                                        sb.Append(string.Format("nID#{0:D3}", itemRandom.nID));\r
@@ -975,7 +982,7 @@ namespace DTXMania
                        // すべてのノードについて…\r
                        foreach (C曲リストノード c曲リストノード in ノードリスト)\r
                        {\r
-                               SlowOrSuspendSearchTask();              // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
+                               SlowOrSuspendSearchTask();    // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす\r
 \r
                                #region [ BOXノードなら子リストに <<BACK を入れ、子リストに後処理を適用する ]\r
                                //-----------------------------\r
@@ -1009,7 +1016,7 @@ namespace DTXMania
 \r
                                        #region [ ログ出力 ]\r
                                        //-----------------------------\r
-                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                        {\r
                                                StringBuilder sb = new StringBuilder(0x100);\r
                                                sb.Append(string.Format("nID#{0:D3}", itemBack.nID));\r
@@ -1043,7 +1050,7 @@ namespace DTXMania
                                                {\r
                                                        c曲リストノード.strタイトル = c曲リストノード.arスコア[j].譜面情報.タイトル;\r
 \r
-                                                       if (CDTXMania.app.ConfigIni.bLog曲検索ログ出力)\r
+                                                       if (CDTXMania.Instance.ConfigIni.bLogEnumerateSongs)\r
                                                                Trace.TraceInformation("タイトルを設定しました。(nID#{0:D3}, title={1})", c曲リストノード.nID, c曲リストノード.strタイトル);\r
 \r
                                                        break;\r
@@ -1108,9 +1115,9 @@ namespace DTXMania
                                        bw.Write(node.arスコア[i].譜面情報.レベル.Drums);\r
                                        bw.Write(node.arスコア[i].譜面情報.レベル.Guitar);\r
                                        bw.Write(node.arスコア[i].譜面情報.レベル.Bass);\r
-                                       bw.Write(node.arスコア[i].譜面情報.最大ランク.Drums);\r
-                                       bw.Write(node.arスコア[i].譜面情報.最大ランク.Guitar);\r
-                                       bw.Write(node.arスコア[i].譜面情報.最大ランク.Bass);\r
+                                       bw.Write((int)node.arスコア[i].譜面情報.最大ランク.Drums);\r
+                                       bw.Write((int)node.arスコア[i].譜面情報.最大ランク.Guitar);\r
+                                       bw.Write((int)node.arスコア[i].譜面情報.最大ランク.Bass);\r
                                        bw.Write(node.arスコア[i].譜面情報.最大スキル.Drums);\r
                                        bw.Write(node.arスコア[i].譜面情報.最大スキル.Guitar);\r
                                        bw.Write(node.arスコア[i].譜面情報.最大スキル.Bass);\r
@@ -1129,6 +1136,9 @@ namespace DTXMania
                                        bw.Write((int)node.arスコア[i].譜面情報.曲種別);\r
                                        bw.Write(node.arスコア[i].譜面情報.Bpm);\r
                                        bw.Write(node.arスコア[i].譜面情報.Duration);\r
+                                       bw.Write(node.arスコア[i].譜面情報.使用レーン数.Drums);\r
+                                       bw.Write(node.arスコア[i].譜面情報.使用レーン数.Guitar);\r
+                                       bw.Write(node.arスコア[i].譜面情報.使用レーン数.Bass);\r
                                        this.nSongsDBへ出力できたスコア数++;\r
                                }\r
                        }\r
@@ -1155,7 +1165,7 @@ namespace DTXMania
                //-----------------\r
                public void t曲リストのソート1_絶対パス順(List<C曲リストノード> ノードリスト)\r
                {\r
-                       ノードリスト.Sort(delegate(C曲リストノード n1, C曲リストノード n2)\r
+                       ノードリスト.Sort(delegate (C曲リストノード n1, C曲リストノード n2)\r
                        {\r
                                #region [ 共通処理 ]\r
                                if (n1 == n2)\r
@@ -1222,9 +1232,9 @@ namespace DTXMania
                                }\r
                        }\r
                }\r
-               public void t曲リストのソート2_タイトル順(List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p)\r
+               public void t曲リストのソート2_タイトル順(List<C曲リストノード> ノードリスト, EPart part, int order, params object[] p)\r
                {\r
-                       ノードリスト.Sort(delegate(C曲リストノード n1, C曲リストノード n2)\r
+                       ノードリスト.Sort(delegate (C曲リストノード n1, C曲リストノード n2)\r
                        {\r
                                if (n1 == n2)\r
                                {\r
@@ -1251,13 +1261,13 @@ namespace DTXMania
                /// <param name="ノードリスト"></param>\r
                /// <param name="part"></param>\r
                /// <param name="order">1=Ascend -1=Descend</param>\r
-               public void t曲リストのソート3_演奏回数の多い順(List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p)\r
+               public void t曲リストのソート3_演奏回数の多い順(List<C曲リストノード> ノードリスト, EPart part, int order, params object[] p)\r
                {\r
                        order = -order;\r
                        int nL12345 = (int)p[0];\r
-                       if (part != E楽器パート.UNKNOWN)\r
+                       if (part != EPart.Unknown)\r
                        {\r
-                               ノードリスト.Sort(delegate(C曲リストノード n1, C曲リストノード n2)\r
+                               ノードリスト.Sort(delegate (C曲リストノード n1, C曲リストノード n2)\r
                                {\r
                                        #region [ 共通処理 ]\r
                                        if (n1 == n2)\r
@@ -1279,11 +1289,11 @@ namespace DTXMania
                                        //                                      {\r
                                        if (n1.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN1 += n1.arスコア[nL12345].譜面情報.演奏回数[(int)part];\r
+                                               nSumPlayCountN1 += n1.arスコア[nL12345].譜面情報.演奏回数[part];\r
                                        }\r
                                        if (n2.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN2 += n2.arスコア[nL12345].譜面情報.演奏回数[(int)part];\r
+                                               nSumPlayCountN2 += n2.arスコア[nL12345].譜面情報.演奏回数[part];\r
                                        }\r
                                        //                                      }\r
                                        num = nSumPlayCountN2 - nSumPlayCountN1;\r
@@ -1300,7 +1310,7 @@ namespace DTXMania
                                        //                                      {\r
                                        if (c曲リストノード.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN1 += c曲リストノード.arスコア[nL12345].譜面情報.演奏回数[(int)part];\r
+                                               nSumPlayCountN1 += c曲リストノード.arスコア[nL12345].譜面情報.演奏回数[part];\r
                                        }\r
                                        //                                      }\r
                                        // Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
@@ -1315,13 +1325,13 @@ namespace DTXMania
                                //                              }\r
                        }\r
                }\r
-               public void t曲リストのソート4_LEVEL順(List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p)\r
+               public void t曲リストのソート4_LEVEL順(List<C曲リストノード> ノードリスト, EPart part, int order, params object[] p)\r
                {\r
                        order = -order;\r
                        int nL12345 = (int)p[0];\r
-                       if (part != E楽器パート.UNKNOWN)\r
+                       if (part != EPart.Unknown)\r
                        {\r
-                               ノードリスト.Sort(delegate(C曲リストノード n1, C曲リストノード n2)\r
+                               ノードリスト.Sort(delegate (C曲リストノード n1, C曲リストノード n2)\r
                                {\r
                                        #region [ 共通処理 ]\r
                                        if (n1 == n2)\r
@@ -1341,11 +1351,11 @@ namespace DTXMania
                                        int nSumPlayCountN1 = 0, nSumPlayCountN2 = 0;\r
                                        if (n1.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN1 = n1.arスコア[nL12345].譜面情報.レベル[(int)part];\r
+                                               nSumPlayCountN1 = n1.arスコア[nL12345].譜面情報.レベル[part];\r
                                        }\r
                                        if (n2.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN2 = n2.arスコア[nL12345].譜面情報.レベル[(int)part];\r
+                                               nSumPlayCountN2 = n2.arスコア[nL12345].譜面情報.レベル[part];\r
                                        }\r
                                        num = nSumPlayCountN2 - nSumPlayCountN1;\r
                                        if (num != 0)\r
@@ -1359,19 +1369,19 @@ namespace DTXMania
                                        int nSumPlayCountN1 = 0;\r
                                        if (c曲リストノード.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN1 = c曲リストノード.arスコア[nL12345].譜面情報.レベル[(int)part];\r
+                                               nSumPlayCountN1 = c曲リストノード.arスコア[nL12345].譜面情報.レベル[part];\r
                                        }\r
                                        // Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
                                }\r
                        }\r
                }\r
-               public void t曲リストのソート5_BestRank順(List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p)\r
+               public void t曲リストのソート5_BestRank順(List<C曲リストノード> ノードリスト, EPart part, int order, params object[] p)\r
                {\r
                        order = -order;\r
                        int nL12345 = (int)p[0];\r
-                       if (part != E楽器パート.UNKNOWN)\r
+                       if (part != EPart.Unknown)\r
                        {\r
-                               ノードリスト.Sort(delegate(C曲リストノード n1, C曲リストノード n2)\r
+                               ノードリスト.Sort(delegate (C曲リストノード n1, C曲リストノード n2)\r
                                {\r
                                        #region [ 共通処理 ]\r
                                        if (n1 == n2)\r
@@ -1392,13 +1402,13 @@ namespace DTXMania
                                        bool isFullCombo1 = false, isFullCombo2 = false;\r
                                        if (n1.arスコア[nL12345] != null)\r
                                        {\r
-                                               isFullCombo1 = n1.arスコア[nL12345].譜面情報.フルコンボ[(int)part];\r
-                                               nSumPlayCountN1 = n1.arスコア[nL12345].譜面情報.最大ランク[(int)part];\r
+                                               isFullCombo1 = n1.arスコア[nL12345].譜面情報.フルコンボ[part];\r
+                                               nSumPlayCountN1 = (int)n1.arスコア[nL12345].譜面情報.最大ランク[part];\r
                                        }\r
                                        if (n2.arスコア[nL12345] != null)\r
                                        {\r
-                                               isFullCombo2 = n2.arスコア[nL12345].譜面情報.フルコンボ[(int)part];\r
-                                               nSumPlayCountN2 = n2.arスコア[nL12345].譜面情報.最大ランク[(int)part];\r
+                                               isFullCombo2 = n2.arスコア[nL12345].譜面情報.フルコンボ[part];\r
+                                               nSumPlayCountN2 = (int)n2.arスコア[nL12345].譜面情報.最大ランク[part];\r
                                        }\r
                                        if (isFullCombo1 ^ isFullCombo2)\r
                                        {\r
@@ -1416,19 +1426,19 @@ namespace DTXMania
                                        int nSumPlayCountN1 = 0;\r
                                        if (c曲リストノード.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN1 = c曲リストノード.arスコア[nL12345].譜面情報.最大ランク[(int)part];\r
+                                               nSumPlayCountN1 = (int)c曲リストノード.arスコア[nL12345].譜面情報.最大ランク[part];\r
                                        }\r
                                        // Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
                                }\r
                        }\r
                }\r
-               public void t曲リストのソート6_SkillPoint順(List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p)\r
+               public void t曲リストのソート6_SkillPoint順(List<C曲リストノード> ノードリスト, EPart part, int order, params object[] p)\r
                {\r
                        order = -order;\r
                        int nL12345 = (int)p[0];\r
-                       if (part != E楽器パート.UNKNOWN)\r
+                       if (part != EPart.Unknown)\r
                        {\r
-                               ノードリスト.Sort(delegate(C曲リストノード n1, C曲リストノード n2)\r
+                               ノードリスト.Sort(delegate (C曲リストノード n1, C曲リストノード n2)\r
                                {\r
                                        #region [ 共通処理 ]\r
                                        if (n1 == n2)\r
@@ -1448,11 +1458,11 @@ namespace DTXMania
                                        double nSumPlayCountN1 = 0, nSumPlayCountN2 = 0;\r
                                        if (n1.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN1 = n1.arスコア[nL12345].譜面情報.最大スキル[(int)part];\r
+                                               nSumPlayCountN1 = n1.arスコア[nL12345].譜面情報.最大スキル[part];\r
                                        }\r
                                        if (n2.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN2 = n2.arスコア[nL12345].譜面情報.最大スキル[(int)part];\r
+                                               nSumPlayCountN2 = n2.arスコア[nL12345].譜面情報.最大スキル[part];\r
                                        }\r
                                        double d = nSumPlayCountN2 - nSumPlayCountN1;\r
                                        if (d != 0)\r
@@ -1466,18 +1476,18 @@ namespace DTXMania
                                        double nSumPlayCountN1 = 0;\r
                                        if (c曲リストノード.arスコア[nL12345] != null)\r
                                        {\r
-                                               nSumPlayCountN1 = c曲リストノード.arスコア[nL12345].譜面情報.最大スキル[(int)part];\r
+                                               nSumPlayCountN1 = c曲リストノード.arスコア[nL12345].譜面情報.最大スキル[part];\r
                                        }\r
                                        // Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
                                }\r
                        }\r
                }\r
-               public void t曲リストのソート7_更新日時順(List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p)\r
+               public void t曲リストのソート7_更新日時順(List<C曲リストノード> ノードリスト, EPart part, int order, params object[] p)\r
                {\r
                        int nL12345 = (int)p[0];\r
-                       if (part != E楽器パート.UNKNOWN)\r
+                       if (part != EPart.Unknown)\r
                        {\r
-                               ノードリスト.Sort(delegate(C曲リストノード n1, C曲リストノード n2)\r
+                               ノードリスト.Sort(delegate (C曲リストノード n1, C曲リストノード n2)\r
                                {\r
                                        #region [ 共通処理 ]\r
                                        if (n1 == n2)\r
@@ -1522,10 +1532,10 @@ namespace DTXMania
                                }\r
                        }\r
                }\r
-               public void t曲リストのソート8_アーティスト名順(List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p)\r
+               public void t曲リストのソート8_アーティスト名順(List<C曲リストノード> ノードリスト, EPart part, int order, params object[] p)\r
                {\r
                        int nL12345 = (int)p[0];\r
-                       ノードリスト.Sort(delegate(C曲リストノード n1, C曲リストノード n2)\r
+                       ノードリスト.Sort(delegate (C曲リストノード n1, C曲リストノード n2)\r
                        {\r
                                #region [ 共通処理 ]\r
                                if (n1 == n2)\r
@@ -1584,13 +1594,13 @@ namespace DTXMania
                        // 事前チェック。\r
 \r
                        if (song == null)\r
-                               return n現在のアンカ難易度レベル;   // 曲がまったくないよ\r
+                               return n現在のアンカ難易度レベル; // 曲がまったくないよ\r
 \r
                        if (song.arスコア[n現在のアンカ難易度レベル] != null)\r
-                               return n現在のアンカ難易度レベル;   // 難易度ぴったりの曲があったよ\r
+                               return n現在のアンカ難易度レベル; // 難易度ぴったりの曲があったよ\r
 \r
                        if ((song.eノード種別 == C曲リストノード.Eノード種別.BOX) || (song.eノード種別 == C曲リストノード.Eノード種別.BACKBOX))\r
-                               return 0;                                                               // BOX と BACKBOX は関係無いよ\r
+                               return 0;               // BOX と BACKBOX は関係無いよ\r
 \r
 \r
                        // 現在のアンカレベルから、難易度上向きに検索開始。\r
@@ -1600,9 +1610,9 @@ namespace DTXMania
                        for (int i = 0; i < 5; i++)\r
                        {\r
                                if (song.arスコア[n最も近いレベル] != null)\r
-                                       break;  // 曲があった。\r
+                                       break;  // 曲があった。\r
 \r
-                               n最も近いレベル = (n最も近いレベル + 1) % 5;      // 曲がなかったので次の難易度レベルへGo。(5以上になったら0に戻る。)\r
+                               n最も近いレベル = (n最も近いレベル + 1) % 5;  // 曲がなかったので次の難易度レベルへGo。(5以上になったら0に戻る。)\r
                        }\r
 \r
 \r
@@ -1618,9 +1628,9 @@ namespace DTXMania
                                for (int i = 0; i < 5; i++)\r
                                {\r
                                        if (song.arスコア[n最も近いレベル] != null)\r
-                                               break;  // 曲があった。\r
+                                               break;  // 曲があった。\r
 \r
-                                       n最も近いレベル = ((n最も近いレベル - 1) + 5) % 5;        // 曲がなかったので次の難易度レベルへGo。(0未満になったら4に戻る。)\r
+                                       n最も近いレベル = ((n最も近いレベル - 1) + 5) % 5;  // 曲がなかったので次の難易度レベルへGo。(0未満になったら4に戻る。)\r
                                }\r
                        }\r
 \r
@@ -1649,7 +1659,7 @@ namespace DTXMania
                                        {\r
                                                return order * n1.arスコア[ 0 ].ファイル情報.フォルダの絶対パス.CompareTo( n2.arスコア[ 0 ].ファイル情報.フォルダの絶対パス );\r
                                        }\r
-                                       #endregion\r
+               #endregion\r
                                        double dBPMn1 = 0.0, dBPMn2 = 0.0;\r
                                        if ( n1.arスコア[ nL12345 ] != null )\r
                                        {\r
@@ -1690,46 +1700,44 @@ Debug.WriteLine( dBPM + ":" + c曲リストノード.strタイトル );
                        try\r
                        {\r
                                var ini = new CScoreIni(strScoreIniファイルパス);\r
-                               ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
 \r
-                               for (int n楽器番号 = 0; n楽器番号 < 3; n楽器番号++)\r
+                               for (EPart inst = EPart.Drums; inst <= EPart.Bass; inst++)\r
                                {\r
-                                       int n = (n楽器番号 * 2) + 1;        // n = 0~5\r
-\r
-                                       #region socre.譜面情報.最大ランク[ n楽器番号 ] = ...\r
                                        //-----------------\r
-                                       if (ini.stセクション[n].b演奏にMIDI入力を使用した ||\r
-                                               ini.stセクション[n].b演奏にキーボードを使用した ||\r
-                                               ini.stセクション[n].b演奏にジョイパッドを使用した ||\r
-                                               ini.stセクション[n].b演奏にマウスを使用した)\r
+                                       if (\r
+                                               ini.stセクション.HiSkill[inst].b演奏にMIDI入力を使用した ||\r
+                                               ini.stセクション.HiSkill[inst].b演奏にキーボードを使用した ||\r
+                                               ini.stセクション.HiSkill[inst].b演奏にジョイパッドを使用した ||\r
+                                               ini.stセクション.HiSkill[inst].b演奏にマウスを使用した)\r
                                        {\r
                                                // (A) 全オートじゃないようなので、演奏結果情報を有効としてランクを算出する。\r
 \r
-                                               score.譜面情報.最大ランク[n楽器番号] =\r
+                                               score.譜面情報.最大ランク[inst] =\r
                                                        CScoreIni.tランク値を計算して返す(\r
-                                                               ini.stセクション[n].n全チップ数,\r
-                                                               ini.stセクション[n].nPerfect数,\r
-                                                               ini.stセクション[n].nGreat数,\r
-                                                               ini.stセクション[n].nGood数,\r
-                                                               ini.stセクション[n].nPoor数,\r
-                                                               ini.stセクション[n].nMiss数);\r
+                                                               ini.stセクション.HiSkill[inst].n全チップ数,\r
+                                                               ini.stセクション.HiSkill[inst].nPerfect数,\r
+                                                               ini.stセクション.HiSkill[inst].nGreat数,\r
+                                                               ini.stセクション.HiSkill[inst].nGood数,\r
+                                                               ini.stセクション.HiSkill[inst].nPoor数,\r
+                                                               ini.stセクション.HiSkill[inst].nMiss数);\r
                                        }\r
                                        else\r
                                        {\r
                                                // (B) 全オートらしいので、ランクは無効とする。\r
 \r
-                                               score.譜面情報.最大ランク[n楽器番号] = (int)CScoreIni.ERANK.UNKNOWN;\r
+                                               score.譜面情報.最大ランク[inst] = CScoreIni.ERANK.UNKNOWN;\r
                                        }\r
                                        //-----------------\r
-                                       #endregion\r
-                                       score.譜面情報.最大スキル[n楽器番号] = ini.stセクション[n].db演奏型スキル値;\r
-                                       score.譜面情報.フルコンボ[n楽器番号] = ini.stセクション[n].bフルコンボである;\r
+                                       score.譜面情報.最大スキル[inst] = ini.stセクション.HiSkill[inst].db演奏型スキル値;\r
+                                       score.譜面情報.フルコンボ[inst] = ini.stセクション.HiSkill[inst].bフルコンボである;\r
                                }\r
                                score.譜面情報.演奏回数.Drums = ini.stファイル.PlayCountDrums;\r
                                score.譜面情報.演奏回数.Guitar = ini.stファイル.PlayCountGuitar;\r
                                score.譜面情報.演奏回数.Bass = ini.stファイル.PlayCountBass;\r
                                for (int i = 0; i < 5; i++)\r
+                               {\r
                                        score.譜面情報.演奏履歴[i] = ini.stファイル.History[i];\r
+                               }\r
                        }\r
                        catch\r
                        {\r
@@ -1781,11 +1789,11 @@ Debug.WriteLine( dBPM + ":" + c曲リストノード.strタイトル );
                /// </summary>\r
                private void SlowOrSuspendSearchTask()\r
                {\r
-                       if (this.bIsSuspending)         // #27060 中断要求があったら、解除要求が来るまで待機\r
+                       if (this.bIsSuspending)   // #27060 中断要求があったら、解除要求が来るまで待機\r
                        {\r
                                autoReset.WaitOne();\r
                        }\r
-                       if (this.bIsSlowdown && ++this.searchCount > 10)                        // #27060 #PREMOVIE再生中は検索負荷を下げる\r
+                       if (this.bIsSlowdown && ++this.searchCount > 10)      // #27060 #PREMOVIE再生中は検索負荷を下げる\r
                        {\r
                                Thread.Sleep(100);\r
                                this.searchCount = 0;\r