OSDN Git Service

Merge branch 'feature/37178_プロジェクトとソリューションファイルの英語化' into develop
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / スコア、曲 / CDTXInput.cs
diff --git a/DTXManiaプロジェクト/コード/スコア、曲/CDTXInput.cs b/DTXManiaプロジェクト/コード/スコア、曲/CDTXInput.cs
deleted file mode 100644 (file)
index 848aab6..0000000
+++ /dev/null
@@ -1,2831 +0,0 @@
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Runtime.InteropServices;\r
-using System.Drawing;\r
-using System.Diagnostics;\r
-using System.IO;\r
-using System.Security.Cryptography;\r
-using System.Reflection;\r
-using System.Globalization;\r
-using System.Threading;\r
-using FDK;\r
-\r
-namespace DTXMania\r
-{\r
-       public partial class CDTX\r
-       {\r
-               public void t入力(string strファイル名, bool bヘッダのみ)\r
-               {\r
-                       this.t入力(strファイル名, bヘッダのみ, 1.0, 0);\r
-               }\r
-               public void t入力(string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust)\r
-               {\r
-                       this.bヘッダのみ = bヘッダのみ;\r
-                       this.strファイル名の絶対パス = Path.GetFullPath(strファイル名);\r
-                       this.strファイル名 = Path.GetFileName(this.strファイル名の絶対パス);\r
-                       this.strフォルダ名 = Path.GetDirectoryName(this.strファイル名の絶対パス) + @"\";\r
-                       string ext = Path.GetExtension(this.strファイル名).ToLower();\r
-                       if (ext != null)\r
-                       {\r
-                               if (!(ext == ".dtx"))\r
-                               {\r
-                                       if (ext == ".gda")\r
-                                       {\r
-                                               this.e種別 = EDTX種別.GDA;\r
-                                       }\r
-                                       else if (ext == ".g2d")\r
-                                       {\r
-                                               this.e種別 = EDTX種別.G2D;\r
-                                       }\r
-                                       else if (ext == ".bms")\r
-                                       {\r
-                                               this.e種別 = EDTX種別.BMS;\r
-                                       }\r
-                                       else if (ext == ".bme")\r
-                                       {\r
-                                               this.e種別 = EDTX種別.BME;\r
-                                       }\r
-                                       else if (ext == ".mid")\r
-                                       {\r
-                                               this.e種別 = EDTX種別.SMF;\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       this.e種別 = EDTX種別.DTX;\r
-                               }\r
-                       }\r
-                       if (this.e種別 != EDTX種別.SMF)\r
-                       {\r
-                               try\r
-                               {\r
-                                       //DateTime timeBeginLoad = DateTime.Now;\r
-                                       //TimeSpan span;\r
-\r
-                                       StreamReader reader = new StreamReader(strファイル名, Encoding.GetEncoding("Shift_JIS"));\r
-                                       string str2 = reader.ReadToEnd();\r
-                                       reader.Close();\r
-                                       //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                       //Trace.TraceInformation( "DTXfileload時間:          {0}", span.ToString() );\r
-\r
-                                       this.t入力_全入力文字列から(str2, db再生速度, nBGMAdjust);\r
-                               }\r
-                               catch\r
-                               {\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               Trace.TraceWarning("SMF の演奏は未対応です。(検討中)");\r
-                       }\r
-               }\r
-               public void t入力_全入力文字列から(string str全入力文字列)\r
-               {\r
-                       this.t入力_全入力文字列から(str全入力文字列, 1.0, 0);\r
-               }\r
-               public unsafe void t入力_全入力文字列から(string str全入力文字列, double db再生速度, int nBGMAdjust)\r
-               {\r
-                       //DateTime timeBeginLoad = DateTime.Now;\r
-                       //TimeSpan span;\r
-\r
-                       if (!string.IsNullOrEmpty(str全入力文字列))\r
-                       {\r
-                               #region [ 改行カット ]\r
-                               this.db再生速度 = db再生速度;\r
-                               str全入力文字列 = str全入力文字列.Replace(Environment.NewLine, "\n");\r
-                               str全入力文字列 = str全入力文字列.Replace('\t', ' ');\r
-                               str全入力文字列 = str全入力文字列 + "\n";\r
-                               #endregion\r
-                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                               //Trace.TraceInformation( "改行カット時間:           {0}", span.ToString() );\r
-                               //timeBeginLoad = DateTime.Now;\r
-                               #region [ 初期化 ]\r
-                               for (int j = 0; j < 36 * 36; j++)\r
-                               {\r
-                                       this.n無限管理WAV[j] = -j;\r
-                                       this.n無限管理BPM[j] = -j;\r
-                                       this.n無限管理VOL[j] = -j;\r
-                                       this.n無限管理PAN[j] = -10000 - j;\r
-                                       this.n無限管理SIZE[j] = -j;\r
-                               }\r
-                               this.n内部番号WAV1to = 1;\r
-                               this.n内部番号BPM1to = 1;\r
-                               this.bstackIFからENDIFをスキップする = new Stack<bool>();\r
-                               this.bstackIFからENDIFをスキップする.Push(false);\r
-                               this.n現在の乱数 = 0;\r
-                               for (int k = 0; k < 7; k++)\r
-                               {\r
-                                       this.nRESULTIMAGE用優先順位[k] = 0;\r
-                                       this.nRESULTMOVIE用優先順位[k] = 0;\r
-                                       this.nRESULTSOUND用優先順位[k] = 0;\r
-                               }\r
-                               #endregion\r
-                               #region [ 入力/行解析 ]\r
-                               CharEnumerator ce = str全入力文字列.GetEnumerator();\r
-                               if (ce.MoveNext())\r
-                               {\r
-                                       this.n現在の行数 = 1;\r
-                                       do\r
-                                       {\r
-                                               if (!this.t入力_空白と改行をスキップする(ref ce))\r
-                                               {\r
-                                                       break;\r
-                                               }\r
-                                               if (ce.Current == '#')\r
-                                               {\r
-                                                       if (ce.MoveNext())\r
-                                                       {\r
-                                                               StringBuilder builder = new StringBuilder(0x20);\r
-                                                               if (this.t入力_コマンド文字列を抜き出す(ref ce, ref builder))\r
-                                                               {\r
-                                                                       StringBuilder builder2 = new StringBuilder(0x400);\r
-                                                                       if (this.t入力_パラメータ文字列を抜き出す(ref ce, ref builder2))\r
-                                                                       {\r
-                                                                               StringBuilder builder3 = new StringBuilder(0x400);\r
-                                                                               if (this.t入力_コメント文字列を抜き出す(ref ce, ref builder3))\r
-                                                                               {\r
-                                                                                       this.t入力_行解析(ref builder, ref builder2, ref builder3);\r
-                                                                                       this.n現在の行数++;\r
-                                                                                       continue;\r
-                                                                               }\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                                       break;\r
-                                               }\r
-                                       }\r
-                                       while (this.t入力_コメントをスキップする(ref ce));\r
-                                       #endregion\r
-                                       //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                       //Trace.TraceInformation( "抜き出し時間:             {0}", span.ToString() );\r
-                                       //timeBeginLoad = DateTime.Now;\r
-                                       this.n無限管理WAV = null;\r
-                                       this.n無限管理BPM = null;\r
-                                       this.n無限管理VOL = null;\r
-                                       this.n無限管理PAN = null;\r
-                                       this.n無限管理SIZE = null;\r
-                                       if (!this.bヘッダのみ)\r
-                                       {\r
-                                               #region [ BPM/BMP初期化 ]\r
-                                               CBPM cbpm = null;\r
-                                               foreach (CBPM cbpm2 in this.listBPM.Values)\r
-                                               {\r
-                                                       if (cbpm2.n表記上の番号 == 0)\r
-                                                       {\r
-                                                               cbpm = cbpm2;\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-                                               if (cbpm == null)\r
-                                               {\r
-                                                       cbpm = new CBPM();\r
-                                                       cbpm.n内部番号 = this.n内部番号BPM1to++;\r
-                                                       cbpm.n表記上の番号 = 0;\r
-                                                       cbpm.dbBPM値 = 120.0;\r
-                                                       this.listBPM.Add(cbpm.n内部番号, cbpm);\r
-                                                       CChip chip = new CChip(0, 0, cbpm.n内部番号, EChannel.BPMEx);\r
-                                                       this.listChip.Insert(0, chip);\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       CChip chip = new CChip(0, 0, cbpm.n内部番号, EChannel.BPMEx);\r
-                                                       this.listChip.Insert(0, chip);\r
-                                               }\r
-                                               if (this.listBMP.ContainsKey(0))\r
-                                               {\r
-                                                       CChip chip = new CChip(0, 0, 0, EChannel.BGALayer1);\r
-                                                       this.listChip.Insert(0, chip);\r
-                                               }\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "前準備完了時間:           {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ CWAV初期化 ]\r
-                                               foreach (CWAV cwav in this.listWAV.Values)\r
-                                               {\r
-                                                       if (cwav.nチップサイズ < 0)\r
-                                                       {\r
-                                                               cwav.nチップサイズ = 100;\r
-                                                       }\r
-                                                       if (cwav.n位置 <= -10000)\r
-                                                       {\r
-                                                               cwav.n位置 = 0;\r
-                                                       }\r
-                                                       if (cwav.n音量 < 0)\r
-                                                       {\r
-                                                               cwav.n音量 = 100;\r
-                                                       }\r
-                                               }\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "CWAV前準備時間:           {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ チップ倍率設定 ]                                               // #28145 2012.4.22 yyagi 二重ループを1重ループに変更して高速化)\r
-                                               //foreach ( CWAV cwav in this.listWAV.Values )\r
-                                               //{\r
-                                               //    foreach( CChip chip in this.listChip )\r
-                                               //    {\r
-                                               //        if( chip.n整数値・内部番号 == cwav.n内部番号 )\r
-                                               //        {\r
-                                               //            chip.dbチップサイズ倍率 = ( (double) cwav.nチップサイズ ) / 100.0;\r
-                                               //            if (chip.nチャンネル番号 == 0x01 ) // BGMだったら\r
-                                               //            {\r
-                                               //                cwav.bIsOnBGMLane = true;\r
-                                               //            }\r
-                                               //        }\r
-                                               //    }\r
-                                               //}\r
-                                               foreach (CChip chip in this.listChip)\r
-                                               {\r
-                                                       if (this.listWAV.ContainsKey(chip.n整数値_内部番号))\r
-                                                       //foreach ( CWAV cwav in this.listWAV.Values )\r
-                                                       {\r
-                                                               CWAV cwav = this.listWAV[chip.n整数値_内部番号];\r
-                                                               //      if ( chip.n整数値・内部番号 == cwav.n内部番号 )\r
-                                                               //      {\r
-                                                               chip.SetDBChipSizeFactor(((double)cwav.nチップサイズ) / 100.0);\r
-                                                               //if ( chip.nチャンネル番号 == 0x01 )    // BGMだったら\r
-                                                               //{\r
-                                                               //      cwav.bIsOnBGMLane = true;\r
-                                                               //}\r
-                                                               //      }\r
-                                                       }\r
-                                               }\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "CWAV全準備時間:           {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ 必要に応じて空打ち音を0小節に定義する ]\r
-                                               //for ( int m = 0xb1; m <= 0xbc; m++ )                  // #28146 2012.4.21 yyagi; bb -> bc\r
-                                               //{\r
-                                               //    foreach ( CChip chip in this.listChip )\r
-                                               //    {\r
-                                               //        if ( chip.nチャンネル番号 == m )\r
-                                               //        {\r
-                                               //            CChip c = new CChip();\r
-                                               //            c.n発声位置 = 0;\r
-                                               //            c.nチャンネル番号 = chip.nチャンネル番号;\r
-                                               //            c.n整数値 = chip.n整数値;\r
-                                               //            c.n整数値・内部番号 = chip.n整数値・内部番号;\r
-                                               //            this.listChip.Insert( 0, c );\r
-                                               //            break;\r
-                                               //        }\r
-                                               //    }\r
-                                               //}\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "空打確認時間:             {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ 拍子・拍線の挿入と、クリック音の挿入 ]\r
-                                               if (this.listChip.Count > 0)\r
-                                               {\r
-                                                       this.listChip.Sort();   // 高速化のためにはこれを削りたいが、listChipの最後がn発声位置の終端である必要があるので、\r
-                                                                                                                                                       // 保守性確保を優先してここでのソートは残しておく\r
-                                                                                                                                                       // なお、093時点では、このソートを削除しても動作するようにはしてある。\r
-                                                                                                                                                       // (ここまでの一部チップ登録を、listChip.Add(c)から同Insert(0,c)に変更してある)\r
-                                                                                                                                                       // これにより、数ms程度ながらここでのソートも高速化されている。\r
-                                                       double barlength = 1.0;\r
-                                                       int nEndOfSong = (this.listChip[this.listChip.Count - 1].n発声位置 + 384) - (this.listChip[this.listChip.Count - 1].n発声位置 % 384);\r
-                                                       bool bClickOffBeat = (CDTXMania.Instance.ConfigIni.eClickType == EClickType.OffBeat);           // 裏拍でメトロノーム再生\r
-                                                       for (int tick384 = 0; tick384 <= nEndOfSong; tick384 += 384)  // 小節線の挿入 (後に出てくる拍子線とループをまとめようとするなら、forループの終了条件の微妙な違いに注意が必要)\r
-                                                       {\r
-                                                               CChip chip = new CChip(tick384, 36 * 36 - 1, EChannel.BarLine);\r
-                                                               this.listChip.Add(chip);\r
-                                                       }\r
-                                                       //this.listChip.Sort();                         // ここでのソートは不要。ただし最後にソートすること\r
-                                                       int nChipNo_BarLength = 0;\r
-                                                       int nChipNo_C1 = 0;\r
-                                                       for (int tick384 = 0; tick384 < nEndOfSong; tick384 += 384)\r
-                                                       {\r
-                                                               int n発声位置_C1_同一小節内 = 0;\r
-                                                               while ((nChipNo_C1 < this.listChip.Count) && (this.listChip[nChipNo_C1].n発声位置 < (tick384 + 384)))\r
-                                                               {\r
-                                                                       if (this.listChip[nChipNo_C1].eチャンネル番号 == EChannel.BeatLineShift)       // 拍線シフトの検出\r
-                                                                       {\r
-                                                                               n発声位置_C1_同一小節内 = this.listChip[nChipNo_C1].n発声位置 - tick384;\r
-                                                                       }\r
-                                                                       nChipNo_C1++;\r
-                                                               }\r
-                                                               if ((this.e種別 == EDTX種別.BMS) || (this.e種別 == EDTX種別.BME))\r
-                                                               {\r
-                                                                       barlength = 1.0;\r
-                                                               }\r
-                                                               while ((nChipNo_BarLength < this.listChip.Count) && (this.listChip[nChipNo_BarLength].n発声位置 <= tick384))\r
-                                                               {\r
-                                                                       if (this.listChip[nChipNo_BarLength].eチャンネル番号 == EChannel.BarLength)    // bar lengthの検出\r
-                                                                       {\r
-                                                                               barlength = this.listChip[nChipNo_BarLength].db実数値;\r
-                                                                       }\r
-                                                                       nChipNo_BarLength++;\r
-                                                               }\r
-\r
-                                                               // 小節線上のクリック音の挿入\r
-                                                               int deltaOffBeat = (int) ( 384.0 / 8 / barlength );\r
-                                                               if ( !bClickOffBeat )                                                                                                                           // 裏拍でのメトロノーム再生の設定でなければ(Off設定であっても)\r
-                                                               {\r
-                                                                       this.listChip.Add( new CChip( tick384, 1, EChannel.Click ) );                                   // 小節線上に、表拍のクリック音を挿入\r
-                                                               }\r
-                                                               else if ( tick384 + 384 / 8 <= nEndOfSong )                                                                                     // 裏拍設定で、かつ曲長内に収まるなら\r
-                                                               {\r
-                                                                       this.listChip.Add( new CChip( tick384 + deltaOffBeat, 1, EChannel.Click ) );    // 小節線から8分音符だけ後に、裏拍のクリック音を挿入\r
-                                                               }\r
-\r
-\r
-                                                               for (int i = 0; i < 100; i++)               // 拍線の挿入\r
-                                                               {\r
-                                                                       int tickBeat = (int)(((double)(384 * i)) / (4.0 * barlength));\r
-                                                                       if ((tickBeat + n発声位置_C1_同一小節内) >= 384)\r
-                                                                       {\r
-                                                                               break;\r
-                                                                       }\r
-                                                                       if (((tickBeat + n発声位置_C1_同一小節内) % 384) != 0)\r
-                                                                       {\r
-                                                                               CChip chip = new CChip(tick384 + (tickBeat + n発声位置_C1_同一小節内), 36 * 36 - 1, EChannel.BeatLine);\r
-                                                                               this.listChip.Add(chip);\r
-                                                                               if ( !bClickOffBeat )                   // メトロノーム設定が裏拍設定でなければ、拍音を挿入\r
-                                                                               {\r
-                                                                                       this.listChip.Add( new CChip( tick384 + ( tickBeat + n発声位置_C1_同一小節内 ), 2, EChannel.Click ) );\r
-                                                                               }\r
-                                                                               else if ( ( tickBeat + deltaOffBeat + n発声位置_C1_同一小節内 ) < 384 )        // 裏拍設定、かつ小節内に収まっていれば、拍音を挿入\r
-                                                                               {\r
-                                                                                       this.listChip.Add( new CChip( tick384 + ( tickBeat + deltaOffBeat + n発声位置_C1_同一小節内 ), 2, EChannel.Click ) );\r
-                                                                               }\r
-                                                                               \r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                                       this.listChip.Sort();\r
-                                               }\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "拍子・拍線挿入時間:       {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ C2 [拍線・小節線表示指定] の処理 ]               // #28145 2012.4.21 yyagi; 2重ループをほぼ1重にして高速化\r
-                                               bool bShowBeatBarLine = true;\r
-                                               for (int i = 0; i < this.listChip.Count; i++)\r
-                                               {\r
-                                                       bool bChangedBeatBarStatus = false;\r
-                                                       if ((this.listChip[i].eチャンネル番号 == EChannel.BeatLineDisplay))\r
-                                                       {\r
-                                                               if (this.listChip[i].n整数値 == 1)       // BAR/BEAT LINE = ON\r
-                                                               {\r
-                                                                       bShowBeatBarLine = true;\r
-                                                                       bChangedBeatBarStatus = true;\r
-                                                               }\r
-                                                               else if (this.listChip[i].n整数値 == 2)      // BAR/BEAT LINE = OFF\r
-                                                               {\r
-                                                                       bShowBeatBarLine = false;\r
-                                                                       bChangedBeatBarStatus = true;\r
-                                                               }\r
-                                                       }\r
-                                                       int startIndex = i;\r
-                                                       if (bChangedBeatBarStatus)              // C2チップの前に50/51チップが来ている可能性に配慮\r
-                                                       {\r
-                                                               while (startIndex > 0 && this.listChip[startIndex].n発声位置 == this.listChip[i].n発声位置)\r
-                                                               {\r
-                                                                       startIndex--;\r
-                                                               }\r
-                                                               startIndex++; // 1つ小さく過ぎているので、戻す\r
-                                                       }\r
-                                                       for (int j = startIndex; j <= i; j++)\r
-                                                       {\r
-                                                               if (((this.listChip[j].eチャンネル番号 == EChannel.BarLine) || (this.listChip[j].eチャンネル番号 == EChannel.BeatLine)) &&\r
-                                                                       (this.listChip[j].n整数値 == (36 * 36 - 1)))\r
-                                                               {\r
-                                                                       this.listChip[j].b可視 = bShowBeatBarLine;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "C2 [拍線・小節線表示指定]:  {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ 発声時刻の計算 ]\r
-                                               double bpm = 120.0;\r
-                                               double dbBarLength = 1.0;\r
-                                               int nPlayPosition = 0;\r
-                                               int ms = 0;\r
-                                               int nBar = 0;\r
-                                               foreach (CChip chip in this.listChip)\r
-                                               {\r
-                                                       chip.CalculatePlayPositionMs(e種別, BASEBPM, listBPM, listAVIPAN, listBGAPAN,\r
-                                                               ref bpm, ref dbBarLength, ref nPlayPosition, ref ms, ref nBar);\r
-                                               }\r
-                                               if (this.db再生速度 > 0.0)\r
-                                               {\r
-                                                       double _db再生速度 = (CDTXMania.Instance.DTXVmode.Enabled) ? this.dbDTXVPlaySpeed : this.db再生速度;\r
-                                                       foreach (CChip chip in this.listChip)\r
-                                                       {\r
-                                                               chip.ApplyPlaySpeed(_db再生速度);\r
-                                                       }\r
-                                               }\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "発声時刻計算:             {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               this.nBGMAdjust = 0;\r
-                                               this.t各自動再生音チップの再生時刻を変更する(nBGMAdjust);\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "再生時刻変更:             {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ 可視チップ数カウント ]\r
-                                               for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)\r
-                                               {\r
-                                                       this.n可視チップ数[inst] = 0;\r
-                                               }\r
-                                               foreach (CChip chip in this.listChip)\r
-                                               {\r
-                                                       if (chip.bDrums可視チップ && !chip.b空打ちチップである)\r
-                                                       {\r
-                                                               this.n可視チップ数.Drums++;\r
-                                                       }\r
-                                                       if (chip.bGuitar可視チップ)\r
-                                                       {\r
-                                                               this.n可視チップ数.Guitar++;\r
-                                                       }\r
-                                                       if (chip.bBass可視チップ)\r
-                                                       {\r
-                                                               this.n可視チップ数.Bass++;\r
-                                                       }\r
-                                               }\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "可視チップ数カウント      {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ チップの種類を分類し、対応するフラグを立てる ]\r
-                                               foreach (CChip chip in this.listChip)\r
-                                               {\r
-                                                       if ((\r
-                                                               chip.bWAVを使うチャンネルである &&\r
-                                                               this.listWAV.ContainsKey(chip.n整数値_内部番号)) &&\r
-                                                               !this.listWAV[chip.n整数値_内部番号].listこのWAVを使用するチャンネル番号の集合.Contains(chip.eチャンネル番号))\r
-                                                       {\r
-                                                               this.listWAV[chip.n整数値_内部番号].listこのWAVを使用するチャンネル番号の集合.Add(chip.eチャンネル番号);\r
-\r
-                                                               switch (chip.ESoundChipTypeを得る)\r
-                                                               {\r
-                                                                       case ESoundChipType.Drums:\r
-                                                                               if (!chip.b空打ちチップである)\r
-                                                                               {\r
-                                                                                       this.listWAV[chip.n整数値_内部番号].bIsDrumsSound = true;\r
-                                                                               }\r
-                                                                               break;\r
-                                                                       case ESoundChipType.Guitar:\r
-                                                                               this.listWAV[chip.n整数値_内部番号].bIsGuitarSound = true; break;\r
-                                                                       case ESoundChipType.Bass:\r
-                                                                               this.listWAV[chip.n整数値_内部番号].bIsBassSound = true; break;\r
-                                                                       case ESoundChipType.SE:\r
-                                                                               this.listWAV[chip.n整数値_内部番号].bIsSESound = true; break;\r
-                                                                       case ESoundChipType.BGM:\r
-                                                                               this.listWAV[chip.n整数値_内部番号].bIsBGMSound = true; break;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                               #endregion\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "ch番号集合確認:           {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ hash値計算 ]\r
-                                               byte[] buffer = null;\r
-                                               try\r
-                                               {\r
-                                                       FileStream stream = new FileStream(this.strファイル名の絶対パス, FileMode.Open, FileAccess.Read);\r
-                                                       buffer = new byte[stream.Length];\r
-                                                       stream.Read(buffer, 0, (int)stream.Length);\r
-                                                       stream.Close();\r
-                                               }\r
-                                               catch (Exception exception)\r
-                                               {\r
-                                                       Trace.TraceError(exception.Message);\r
-                                                       Trace.TraceError("DTXのハッシュの計算に失敗しました。({0})", this.strファイル名の絶対パス);\r
-                                               }\r
-                                               if (buffer != null)\r
-                                               {\r
-                                                       byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash(buffer);\r
-                                                       StringBuilder sb = new StringBuilder();\r
-                                                       foreach (byte b in buffer2)\r
-                                                       {\r
-                                                               sb.Append(b.ToString("x2"));\r
-                                                       }\r
-                                                       this.strハッシュofDTXファイル = sb.ToString();\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       this.strハッシュofDTXファイル = "00000000000000000000000000000000";\r
-                                               }\r
-                                               #endregion\r
-\r
-                                               // #36177 使用レーン数の表示 add ikanick 16.03.20\r
-                                               #region [ 使用レーン数カウント ]\r
-\r
-                                               for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)\r
-                                               {\r
-                                                       this.n使用レーン数[inst] = EUseLanes.Other;\r
-                                               }\r
-                                               foreach (CChip chip in this.listChip)\r
-                                               {\r
-                                                       int ch = (int)chip.eチャンネル番号;\r
-                                                       if (chip.bDrums可視チップ)\r
-                                                       {\r
-                                                               if (this.n使用レーン数.Drums == EUseLanes.Other) this.n使用レーン数.Drums = EUseLanes.Dr_6;\r
-                                                               if ( ( this.n使用レーン数.Drums != EUseLanes.Dr_10 ) && ( this.n使用レーン数.Drums != EUseLanes.Dr_12 ) )\r
-                                                               {\r
-                                                                       if ((chip.eチャンネル番号 == EChannel.FloorTom)\r
-                                                                       || (chip.eチャンネル番号 == EChannel.HiHatOpen)\r
-                                                                       || (chip.eチャンネル番号 == EChannel.RideCymbal)\r
-                                                                       || (chip.eチャンネル番号 == EChannel.LeftCymbal))\r
-                                                                       {\r
-                                                                               this.n使用レーン数.Drums = EUseLanes.Dr_10;\r
-                                                                       }\r
-                                                               }\r
-                                                               if (this.n使用レーン数.Drums != EUseLanes.Dr_12)\r
-                                                               {\r
-                                                                       if ((chip.eチャンネル番号 == EChannel.LeftPedal)\r
-                                                                       || (chip.eチャンネル番号 == EChannel.LeftBassDrum))\r
-                                                                       {\r
-                                                                               this.n使用レーン数.Drums = EUseLanes.Dr_12;\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                                       if (chip.bGuitar可視チップ)\r
-                                                       {\r
-                                                               // 5レーン未対応\r
-                                                               if ( this.n使用レーン数.Guitar == EUseLanes.Other ) this.n使用レーン数.Guitar = EUseLanes.GB_3;\r
-                                                       }\r
-                                                       if (chip.bBass可視チップ)\r
-                                                       {\r
-                                                               // 5レーン未対応\r
-                                                               if ( this.n使用レーン数.Bass == EUseLanes.Other ) this.n使用レーン数.Bass = EUseLanes.GB_3;\r
-                                                       }\r
-                                               }\r
-                                               Trace.TraceInformation( "LeftPedal使用=" + this.bチップがある.LeftPedal );\r
-                                               Trace.TraceInformation( "LeftBass使用 =" + this.bチップがある.LeftBassDrum );\r
-                                               Trace.TraceInformation( "Lane Type    =" + this.n使用レーン数.Drums );\r
-                                               #endregion\r
-\r
-                                               //span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
-                                               //Trace.TraceInformation( "hash計算:                 {0}", span.ToString() );\r
-                                               //timeBeginLoad = DateTime.Now;\r
-                                               #region [ bLogDTX詳細ログ出力 ]\r
-                                               if (CDTXMania.Instance.ConfigIni.bLogDTX)\r
-                                               {\r
-                                                       foreach (CWAV cwav in this.listWAV.Values)\r
-                                                       {\r
-                                                               Trace.TraceInformation(cwav.ToString());\r
-                                                       }\r
-                                                       foreach (CAVI cavi in this.listAVI.Values)\r
-                                                       {\r
-                                                               Trace.TraceInformation(cavi.ToString());\r
-                                                       }\r
-                                                       foreach (CAVIPAN cavipan in this.listAVIPAN.Values)\r
-                                                       {\r
-                                                               Trace.TraceInformation(cavipan.ToString());\r
-                                                       }\r
-                                                       foreach (CBGA cbga in this.listBGA.Values)\r
-                                                       {\r
-                                                               Trace.TraceInformation(cbga.ToString());\r
-                                                       }\r
-                                                       foreach (CBGAPAN cbgapan in this.listBGAPAN.Values)\r
-                                                       {\r
-                                                               Trace.TraceInformation(cbgapan.ToString());\r
-                                                       }\r
-                                                       foreach (CBMP cbmp in this.listBMP.Values)\r
-                                                       {\r
-                                                               Trace.TraceInformation(cbmp.ToString());\r
-                                                       }\r
-                                                       foreach (CBMPTEX cbmptex in this.listBMPTEX.Values)\r
-                                                       {\r
-                                                               Trace.TraceInformation(cbmptex.ToString());\r
-                                                       }\r
-                                                       foreach (CBPM cbpm3 in this.listBPM.Values)\r
-                                                       {\r
-                                                               Trace.TraceInformation(cbpm3.ToString());\r
-                                                       }\r
-                                                       foreach (CChip chip in this.listChip)\r
-                                                       {\r
-                                                               Trace.TraceInformation(chip.ToString());\r
-                                                       }\r
-                                               }\r
-                                               #endregion\r
-\r
-\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-\r
-               /// <summary>\r
-               /// #34016 LP/LBD使用譜面の吸収\r
-               /// </summary>\r
-               public void ReassignLP()\r
-               {\r
-                       if ( this.bチップがある.LeftPedal )\r
-                       {\r
-                               if ( this.bチップがある.LeftBassDrum )\r
-                               {       // LP かつ LBDがある場合\r
-                                       // → * LBDはBDに割り当て\r
-                                       //    * LPは、HO(foot splash)に割り当て。あるいは、HO(foot splash)とHC(close)のいずれかに割り当てる。\r
-                                       //      BPMから4分音符の長さを計算し、それより長いかどうかでHO/HCの仕分けを決定。 \r
-                                       //    * チップ音にサウンドファイルが割り当てられていない場合は、HCに割り当て \r
-                                       //    * HO未使用の譜面の場合は、HCに割り当て\r
-\r
-                                       double bpm = this.BPM + this.BASEBPM;\r
-                                       double dbBarLength = 1.0;\r
-                                       double nLen4thNoteMs = (int) ( ( 60.0 / bpm / dbBarLength ) * 10 * 10 * 10 );\r
-\r
-                                       for ( int i = 0; i < this.listChip.Count; i++ )\r
-                                       {\r
-                                               // switch-caseにすると、listchip[i]の書き換えができないので、if-elseで記述\r
-                                               if ( this.listChip[ i ].eチャンネル番号 == EChannel.LeftBassDrum )\r
-                                               {\r
-                                                       this.listChip[ i ].eチャンネル番号 = EChannel.BassDrum;\r
-                                               }\r
-                                               else if ( this.listChip[ i ].eチャンネル番号 == EChannel.LeftPedal )\r
-                                               {\r
-                                                       int len = this.listChip[ i ].GetDuration();             // WAV未割当の場合は0が返る\r
-                                                                                                                                                       // HHOpen未使用の譜面であれば、無条件にHHCloseに落としこむ\r
-                                                       this.listChip[ i ].eチャンネル番号 = ( len < nLen4thNoteMs || !this.bチップがある.HHOpen ) ? EChannel.HiHatClose : EChannel.HiHatOpen;\r
-                                               }\r
-                                               else if ( this.listChip[ i ].eチャンネル番号 == EChannel.BPM )\r
-                                               {\r
-                                                       bpm = this.BPM + this.BASEBPM;\r
-                                                       nLen4thNoteMs = (int) ( ( 60.0 / bpm / dbBarLength / 2 ) * 10 * 10 * 10 );\r
-                                               }\r
-                                               else if ( this.listChip[ i ].eチャンネル番号 == EChannel.BPMEx )\r
-                                               {\r
-                                                       int n内部番号 = listChip[ i ].n整数値_内部番号;\r
-                                                       if ( listBPM.ContainsKey( n内部番号 ) )\r
-                                                       {\r
-                                                               bpm = ( ( listBPM[ n内部番号 ].n表記上の番号 == 0 ) ? 0.0 : this.BASEBPM ) + listBPM[ n内部番号 ].dbBPM値;\r
-                                                       }\r
-                                               }\r
-                                               else if ( this.listChip[ i ].eチャンネル番号 == EChannel.BarLength )\r
-                                               {\r
-                                                       dbBarLength = this.listChip[ i ].db実数値;\r
-                                               }\r
-                                       }\r
-                               }\r
-                               else\r
-                               {       // LPしかない場合\r
-                                       // → LPを、BD, HO, HCに割り当てる必要がある。\r
-                                       //    * BDへの割り当ては、BDレーンで同じ音を使っているかどうかで決定 \r
-                                       //    * HO, HCへの割り当ては、(BDの可能性を除いた後) HOにアサイン、あるいはチップの長さを見てHC/HOにアサイン\r
-                                       //    * チップ音にサウンドファイルが割り当てられていない場合は、HCに割り当て \r
-                                       //    * HO未使用の譜面の場合は、HCに割り当て\r
-\r
-                                       double bpm = this.BPM + this.BASEBPM;\r
-                                       double dbBarLength = 1.0;\r
-                                       double nLen4thNoteMs = (int) ( ( 60.0 / bpm / dbBarLength ) * 10 * 10 * 10 );\r
-\r
-                                       #region [ BassDrumのファイル名一覧を作成 ]\r
-                                       List<string> listBDFilenames = new List<string>();\r
-                                       foreach ( CChip chip in listChip )\r
-                                       {\r
-                                               if (chip.eチャンネル番号 == EChannel.BassDrum)\r
-                                               {\r
-                                                       string s = chip.GetSoundFilename();\r
-                                                       if (s != null && !listBDFilenames.Contains(s))\r
-                                                       {\r
-                                                               listBDFilenames.Add(s);\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                                       #endregion\r
-\r
-                                       for ( int i = 0; i < this.listChip.Count; i++ )\r
-                                       {\r
-                                               if ( this.listChip[ i ].eチャンネル番号 == EChannel.LeftPedal )\r
-                                               {\r
-                                                       string s = listChip[i].GetSoundFilename();\r
-                                                       if (listBDFilenames.Contains(s))\r
-                                                       {\r
-                                                               this.listChip[i].eチャンネル番号 = EChannel.BassDrum;\r
-                                                       }\r
-                                                       else\r
-                                                       {\r
-                                                               int len = this.listChip[ i ].GetDuration();             // WAV未割当の場合は0が返る\r
-                                                                                                                                                               // HHOpen未使用の譜面であれば、無条件にHHCloseに落としこむ\r
-                                                               this.listChip[ i ].eチャンネル番号 = ( len < nLen4thNoteMs || !this.bチップがある.HHOpen ) ? EChannel.HiHatClose : EChannel.HiHatOpen;\r
-                                                       }\r
-                                               }\r
-                                               else if ( this.listChip[ i ].eチャンネル番号 == EChannel.BPM )\r
-                                               {\r
-                                                       bpm = this.BPM + this.BASEBPM;\r
-                                                       nLen4thNoteMs = (int) ( ( 60.0 / bpm / dbBarLength / 2 ) * 10 * 10 * 10 );\r
-                                               }\r
-                                               else if ( this.listChip[ i ].eチャンネル番号 == EChannel.BPMEx )\r
-                                               {\r
-                                                       int n内部番号 = listChip[ i ].n整数値_内部番号;\r
-                                                       if ( listBPM.ContainsKey( n内部番号 ) )\r
-                                                       {\r
-                                                               bpm = ( ( listBPM[ n内部番号 ].n表記上の番号 == 0 ) ? 0.0 : this.BASEBPM ) + listBPM[ n内部番号 ].dbBPM値;\r
-                                                       }\r
-                                               }\r
-                                               else if ( this.listChip[ i ].eチャンネル番号 == EChannel.BarLength )\r
-                                               {\r
-                                                       dbBarLength = this.listChip[ i ].db実数値;\r
-                                               }\r
-                                       }\r
-                                       listBDFilenames.Clear();\r
-                                       listBDFilenames = null;\r
-                               }\r
-                       }\r
-                       else if ( this.bチップがある.LeftBassDrum )\r
-                       {       // LBDのみがある場合\r
-                               // → そのままBDに割り当て\r
-                               for ( int i = 0; i < this.listChip.Count; i++ )\r
-                               {\r
-                                       if ( this.listChip[ i ].eチャンネル番号 == EChannel.LeftBassDrum )\r
-                                       {\r
-                                               this.listChip[ i ].eチャンネル番号 = EChannel.BassDrum;\r
-                                       }\r
-                               }\r
-                       }\r
-                       else\r
-                       {       // LPもLBDもない場合\r
-                               // → 何もしない\r
-                       }\r
-               }\r
-               private bool t入力_コマンド文字列を抜き出す(ref CharEnumerator ce, ref StringBuilder sb文字列)\r
-               {\r
-                       if (!this.t入力_空白をスキップする(ref ce))\r
-                               return false; // 文字が尽きた\r
-\r
-                       #region [ コマンド終端文字(':')、半角空白、コメント開始文字(';')、改行のいずれかが出現するまでをコマンド文字列と見なし、sb文字列 にコピーする。]\r
-                       //-----------------\r
-                       while (ce.Current != ':' && ce.Current != ' ' && ce.Current != ';' && ce.Current != '\n')\r
-                       {\r
-                               sb文字列.Append(ce.Current);\r
-\r
-                               if (!ce.MoveNext())\r
-                                       return false; // 文字が尽きた\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ コマンド終端文字(':')で終端したなら、その次から空白をスキップしておく。]\r
-                       //-----------------\r
-                       if (ce.Current == ':')\r
-                       {\r
-                               if (!ce.MoveNext())\r
-                                       return false; // 文字が尽きた\r
-\r
-                               if (!this.t入力_空白をスキップする(ref ce))\r
-                                       return false; // 文字が尽きた\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_コメントをスキップする(ref CharEnumerator ce)\r
-               {\r
-                       // 改行が現れるまでをコメントと見なしてスキップする。\r
-\r
-                       while (ce.Current != '\n')\r
-                       {\r
-                               if (!ce.MoveNext())\r
-                                       return false; // 文字が尽きた\r
-                       }\r
-\r
-                       // 改行の次の文字へ移動した結果を返す。\r
-\r
-                       return ce.MoveNext();\r
-               }\r
-               private bool t入力_コメント文字列を抜き出す(ref CharEnumerator ce, ref StringBuilder sb文字列)\r
-               {\r
-                       if (ce.Current != ';')    // コメント開始文字(';')じゃなければ正常帰還。\r
-                               return true;\r
-\r
-                       if (!ce.MoveNext())   // ';' の次で文字列が終わってたら終了帰還。\r
-                               return false;\r
-\r
-                       #region [ ';' の次の文字から '\n' の1つ前までをコメント文字列と見なし、sb文字列にコピーする。]\r
-                       //-----------------\r
-                       while (ce.Current != '\n')\r
-                       {\r
-                               sb文字列.Append(ce.Current);\r
-\r
-                               if (!ce.MoveNext())\r
-                                       return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private void t入力_パラメータ食い込みチェック(string strコマンド名, ref string strコマンド, ref string strパラメータ)\r
-               {\r
-                       if ((strコマンド.Length > strコマンド名.Length) && strコマンド.StartsWith(strコマンド名, StringComparison.OrdinalIgnoreCase))\r
-                       {\r
-                               strパラメータ = strコマンド.Substring(strコマンド名.Length).Trim();\r
-                               strコマンド = strコマンド.Substring(0, strコマンド名.Length);\r
-                       }\r
-               }\r
-               private bool t入力_パラメータ文字列を抜き出す(ref CharEnumerator ce, ref StringBuilder sb文字列)\r
-               {\r
-                       if (!this.t入力_空白をスキップする(ref ce))\r
-                               return false; // 文字が尽きた\r
-\r
-                       #region [ 改行またはコメント開始文字(';')が出現するまでをパラメータ文字列と見なし、sb文字列 にコピーする。]\r
-                       //-----------------\r
-                       while (ce.Current != '\n' && ce.Current != ';')\r
-                       {\r
-                               sb文字列.Append(ce.Current);\r
-\r
-                               if (!ce.MoveNext())\r
-                                       return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_空白と改行をスキップする(ref CharEnumerator ce)\r
-               {\r
-                       // 空白と改行が続く間はこれらをスキップする。\r
-\r
-                       while (ce.Current == ' ' || ce.Current == '\n')\r
-                       {\r
-                               if (ce.Current == '\n')\r
-                                       this.n現在の行数++;    // 改行文字では行番号が増える。\r
-\r
-                               if (!ce.MoveNext())\r
-                                       return false; // 文字が尽きた\r
-                       }\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_空白をスキップする(ref CharEnumerator ce)\r
-               {\r
-                       // 空白が続く間はこれをスキップする。\r
-\r
-                       while (ce.Current == ' ')\r
-                       {\r
-                               if (!ce.MoveNext())\r
-                                       return false; // 文字が尽きた\r
-                       }\r
-\r
-                       return true;\r
-               }\r
-               private void t入力_行解析(ref StringBuilder sbコマンド, ref StringBuilder sbパラメータ, ref StringBuilder sbコメント)\r
-               {\r
-                       string strコマンド = sbコマンド.ToString();\r
-                       string strパラメータ = sbパラメータ.ToString().Trim();\r
-                       string strコメント = sbコメント.ToString();\r
-\r
-                       // 行頭コマンドの処理\r
-\r
-                       #region [ IF ]\r
-                       //-----------------\r
-                       if (strコマンド.StartsWith("IF", StringComparison.OrdinalIgnoreCase))\r
-                       {\r
-                               this.t入力_パラメータ食い込みチェック("IF", ref strコマンド, ref strパラメータ);\r
-\r
-                               if (this.bstackIFからENDIFをスキップする.Count == 255)\r
-                               {\r
-                                       Trace.TraceWarning("#IF の入れ子の数が 255 を超えました。この #IF を無視します。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               }\r
-                               else if (this.bstackIFからENDIFをスキップする.Peek())\r
-                               {\r
-                                       this.bstackIFからENDIFをスキップする.Push(true); // 親が true ならその入れ子も問答無用で true 。\r
-                               }\r
-                               else                          // 親が false なら入れ子はパラメータと乱数を比較して結果を判断する。\r
-                               {\r
-                                       int n数値 = 0;\r
-\r
-                                       if (!int.TryParse(strパラメータ, out n数値))\r
-                                               n数値 = 1;\r
-\r
-                                       this.bstackIFからENDIFをスキップする.Push(n数値 != this.n現在の乱数);   // 乱数と数値が一致したら true 。\r
-                               }\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ ENDIF ]\r
-                       //-----------------\r
-                       else if (strコマンド.StartsWith("ENDIF", StringComparison.OrdinalIgnoreCase))\r
-                       {\r
-                               this.t入力_パラメータ食い込みチェック("ENDIF", ref strコマンド, ref strパラメータ);\r
-\r
-                               if (this.bstackIFからENDIFをスキップする.Count > 1)\r
-                               {\r
-                                       this.bstackIFからENDIFをスキップする.Pop();    // 入れ子を1つ脱出。\r
-                               }\r
-                               else\r
-                               {\r
-                                       Trace.TraceWarning("#ENDIF に対応する #IF がありません。この #ENDIF を無視します。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               }\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       else if (!this.bstackIFからENDIFをスキップする.Peek())   // IF~ENDIF をスキップするなら以下はすべて無視。\r
-                       {\r
-                               #region [ PATH_WAV ]\r
-                               //-----------------\r
-                               if (strコマンド.StartsWith("PATH_WAV", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("PATH_WAV", ref strコマンド, ref strパラメータ);\r
-                                       this.PATH_WAV = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ TITLE ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("TITLE", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("TITLE", ref strコマンド, ref strパラメータ);\r
-                                       this.TITLE = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ ARTIST ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("ARTIST", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("ARTIST", ref strコマンド, ref strパラメータ);\r
-                                       this.ARTIST = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ COMMENT ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("COMMENT", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("COMMENT", ref strコマンド, ref strパラメータ);\r
-                                       this.COMMENT = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ DLEVEL, PLAYLEVEL ]\r
-                               //-----------------\r
-                               else if (\r
-                                       strコマンド.StartsWith("DLEVEL", StringComparison.OrdinalIgnoreCase) ||\r
-                                       strコマンド.StartsWith("PLAYLEVEL", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("DLEVEL", ref strコマンド, ref strパラメータ);\r
-                                       this.t入力_パラメータ食い込みチェック("PLAYLEVEL", ref strコマンド, ref strパラメータ);\r
-\r
-                                       int dlevel;\r
-                                       if (int.TryParse(strパラメータ, out dlevel))\r
-                                       {\r
-                                               this.LEVEL.Drums = Math.Min(Math.Max(dlevel, 0), 100);  // 0~100 に丸める\r
-                                       }\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ GLEVEL ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("GLEVEL", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("GLEVEL", ref strコマンド, ref strパラメータ);\r
-\r
-                                       int glevel;\r
-                                       if (int.TryParse(strパラメータ, out glevel))\r
-                                       {\r
-                                               this.LEVEL.Guitar = Math.Min(Math.Max(glevel, 0), 100);   // 0~100 に丸める\r
-                                       }\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ BLEVEL ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("BLEVEL", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("BLEVEL", ref strコマンド, ref strパラメータ);\r
-\r
-                                       int blevel;\r
-                                       if (int.TryParse(strパラメータ, out blevel))\r
-                                       {\r
-                                               this.LEVEL.Bass = Math.Min(Math.Max(blevel, 0), 100);   // 0~100 に丸める\r
-                                       }\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-#if TEST_NOTEOFFMODE\r
-                               else if (str.StartsWith("SUPRESSNOTEOFF_HIHAT", StringComparison.OrdinalIgnoreCase)) {\r
-                                       this.t入力・パラメータ食い込みチェック("SUPRESSNOTEOFF_HIHAT", ref str, ref str2);\r
-                                       this.bHH演奏で直前のHHを消音する = !str2.ToLower().Equals("on");\r
-                               } \r
-                               else if (str.StartsWith("SUPRESSNOTEOFF_GUITAR", StringComparison.OrdinalIgnoreCase)) {\r
-                                       this.t入力・パラメータ食い込みチェック("SUPRESSNOTEOFF_GUITAR", ref str, ref str2);\r
-                                       this.bGUITAR演奏で直前のGUITARを消音する = !str2.ToLower().Equals("on");\r
-                               }\r
-                               else if (str.StartsWith("SUPRESSNOTEOFF_BASS", StringComparison.OrdinalIgnoreCase)) {\r
-                                       this.t入力・パラメータ食い込みチェック("SUPRESSNOTEOFF_BASS", ref str, ref str2);\r
-                                       this.bBASS演奏で直前のBASSを消音する = !str2.ToLower().Equals("on");\r
-                               }\r
-#endif\r
-                               #region [ GENRE ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("GENRE", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("GENRE", ref strコマンド, ref strパラメータ);\r
-                                       this.GENRE = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ HIDDENLEVEL ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("HIDDENLEVEL", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("HIDDENLEVEL", ref strコマンド, ref strパラメータ);\r
-                                       this.HIDDENLEVEL = strパラメータ.ToLower().Equals("on");\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ STAGEFILE ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("STAGEFILE", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("STAGEFILE", ref strコマンド, ref strパラメータ);\r
-                                       this.STAGEFILE = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ PREVIEW ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("PREVIEW", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("PREVIEW", ref strコマンド, ref strパラメータ);\r
-                                       this.PREVIEW = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ PREIMAGE ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("PREIMAGE", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("PREIMAGE", ref strコマンド, ref strパラメータ);\r
-                                       this.PREIMAGE = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ PREMOVIE ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("PREMOVIE", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("PREMOVIE", ref strコマンド, ref strパラメータ);\r
-                                       this.PREMOVIE = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ USE 556 x 710 BGAAVI ]\r
-\r
-                               else if (strコマンド.StartsWith("USE556X710BGAAVI", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("USE556X710BGAAVI", ref strコマンド, ref strパラメータ);\r
-                                       this.bUse556x710BGAAVI = strパラメータ == "1" ? true : false;\r
-                               }\r
-                               #endregion\r
-                               #region [ BACKGROUND_GR ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("BACKGROUND_GR", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("BACKGROUND_GR", ref strコマンド, ref strパラメータ);\r
-                                       this.BACKGROUND_GR = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ BACKGROU}ND, WALL ]\r
-                               //-----------------\r
-                               else if (\r
-                                       strコマンド.StartsWith("BACKGROUND", StringComparison.OrdinalIgnoreCase) ||\r
-                                       strコマンド.StartsWith("WALL", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("BACKGROUND", ref strコマンド, ref strパラメータ);\r
-                                       this.t入力_パラメータ食い込みチェック("WALL", ref strコマンド, ref strパラメータ);\r
-                                       this.BACKGROUND = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ RANDOM ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("RANDOM", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("RANDOM", ref strコマンド, ref strパラメータ);\r
-\r
-                                       int n数値 = 1;\r
-                                       if (!int.TryParse(strパラメータ, out n数値))\r
-                                               n数値 = 1;\r
-\r
-                                       this.n現在の乱数 = CDTXMania.Instance.Random.Next(n数値) + 1;    // 1~数値 までの乱数を生成。\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ SOUND_NOWLOADING ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("SOUND_NOWLOADING", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("SOUND_NOWLOADING", ref strコマンド, ref strパラメータ);\r
-                                       this.SOUND_NOWLOADING = strパラメータ;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ BPM ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("BPM", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_行解析_BPM_BPMzz(strコマンド, strパラメータ, strコメント);\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               #region [ DTXVPLAYSPEED ]\r
-                               //-----------------\r
-                               else if (strコマンド.StartsWith("DTXVPLAYSPEED", StringComparison.OrdinalIgnoreCase))\r
-                               {\r
-                                       this.t入力_パラメータ食い込みチェック("DTXVPLAYSPEED", ref strコマンド, ref strパラメータ);\r
-\r
-                                       double dtxvplayspeed = 0.0;\r
-                                       if (TryParse(strパラメータ, out dtxvplayspeed) && dtxvplayspeed > 0.0)\r
-                                       {\r
-                                               this.dbDTXVPlaySpeed = dtxvplayspeed;\r
-                                       }\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                               else if (!this.bヘッダのみ)    // ヘッダのみの解析の場合、以下は無視。\r
-                               {\r
-                                       #region [ PANEL ]\r
-                                       //-----------------\r
-                                       if (strコマンド.StartsWith("PANEL", StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               this.t入力_パラメータ食い込みチェック("PANEL", ref strコマンド, ref strパラメータ);\r
-\r
-                                               int dummyResult;                // #23885 2010.12.12 yyagi: not to confuse "#PANEL strings (panel)" and "#PANEL int (panpot of EL)"\r
-                                               if (!int.TryParse(strパラメータ, out dummyResult))\r
-                                               {   // 数値じゃないならPANELとみなす\r
-                                                       this.PANEL = strパラメータ;              //\r
-                                                       goto EOL;                 //\r
-                                               }                       // 数値ならPAN ELとみなす\r
-\r
-                                       }\r
-                                       //-----------------\r
-                                       #endregion\r
-                                       #region [ MIDIFILE ]\r
-                                       //-----------------\r
-                                       else if (strコマンド.StartsWith("MIDIFILE", StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               this.t入力_パラメータ食い込みチェック("MIDIFILE", ref strコマンド, ref strパラメータ);\r
-                                               this.MIDIFILE = strパラメータ;\r
-                                       }\r
-                                       //-----------------\r
-                                       #endregion\r
-                                       #region [ MIDINOTE ]\r
-                                       //-----------------\r
-                                       else if (strコマンド.StartsWith("MIDINOTE", StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               this.t入力_パラメータ食い込みチェック("MIDINOTE", ref strコマンド, ref strパラメータ);\r
-                                               this.MIDINOTE = strパラメータ.ToLower().Equals("on");\r
-                                       }\r
-                                       //-----------------\r
-                                       #endregion\r
-                                       #region [ BLACKCOLORKEY ]\r
-                                       //-----------------\r
-                                       else if (strコマンド.StartsWith("BLACKCOLORKEY", StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               this.t入力_パラメータ食い込みチェック("BLACKCOLORKEY", ref strコマンド, ref strパラメータ);\r
-                                               this.BLACKCOLORKEY = strパラメータ.ToLower().Equals("on");\r
-                                       }\r
-                                       //-----------------\r
-                                       #endregion\r
-                                       #region [ BASEBPM ]\r
-                                       //-----------------\r
-                                       else if (strコマンド.StartsWith("BASEBPM", StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               this.t入力_パラメータ食い込みチェック("BASEBPM", ref strコマンド, ref strパラメータ);\r
-\r
-                                               double basebpm = 0.0;\r
-                                               //if( double.TryParse( str2, out num6 ) && ( num6 > 0.0 ) )\r
-                                               if (TryParse(strパラメータ, out basebpm) && basebpm > 0.0) // #23880 2010.12.30 yyagi: alternative TryParse to permit both '.' and ',' for decimal point\r
-                                               {                         // #24204 2011.01.21 yyagi: Fix the condition correctly\r
-                                                       this.BASEBPM = basebpm;\r
-                                               }\r
-                                       }\r
-                                       //-----------------\r
-                                       #endregion\r
-                                       #region [ SOUND_STAGEFAILED ]\r
-                                       //-----------------\r
-                                       else if (strコマンド.StartsWith("SOUND_STAGEFAILED", StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               this.t入力_パラメータ食い込みチェック("SOUND_STAGEFAILED", ref strコマンド, ref strパラメータ);\r
-                                               this.SOUND_STAGEFAILED = strパラメータ;\r
-                                       }\r
-                                       //-----------------\r
-                                       #endregion\r
-                                       #region [ SOUND_FULLCOMBO ]\r
-                                       //-----------------\r
-                                       else if (strコマンド.StartsWith("SOUND_FULLCOMBO", StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               this.t入力_パラメータ食い込みチェック("SOUND_FULLCOMBO", ref strコマンド, ref strパラメータ);\r
-                                               this.SOUND_FULLCOMBO = strパラメータ;\r
-                                       }\r
-                                       //-----------------\r
-                                       #endregion\r
-                                       #region [ SOUND_AUDIENCE ]\r
-                                       //-----------------\r
-                                       else if (strコマンド.StartsWith("SOUND_AUDIENCE", StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               this.t入力_パラメータ食い込みチェック("SOUND_AUDIENCE", ref strコマンド, ref strパラメータ);\r
-                                               this.SOUND_AUDIENCE = strパラメータ;\r
-                                       }\r
-                                       //-----------------\r
-                                       #endregion\r
-\r
-                                       // オブジェクト記述コマンドの処理。\r
-\r
-                                       else if (!this.t入力_行解析_WAVVOL_VOLUME(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_WAVPAN_PAN(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_WAV(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_BMPTEX(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_BMP(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_BGAPAN(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_BGA(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_AVIPAN(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_AVI_VIDEO(strコマンド, strパラメータ, strコメント) &&\r
-                                               //      !this.t入力_行解析_BPM_BPMzz( strコマンド, strパラメータ, strコメント ) &&    // bヘッダのみ==trueの場合でもチェックするよう変更\r
-                                               !this.t入力_行解析_RESULTIMAGE(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_RESULTMOVIE(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_RESULTSOUND(strコマンド, strパラメータ, strコメント) &&\r
-                                               !this.t入力_行解析_SIZE(strコマンド, strパラメータ, strコメント))\r
-                                       {\r
-                                               this.t入力_行解析_チップ配置(strコマンド, strパラメータ, strコメント);\r
-                                       }\r
-                                       EOL:\r
-                                       Debug.Assert(true);   // #23885 2010.12.12 yyagi: dummy line to exit parsing the line\r
-                                                                                                                               // 2011.8.17 from: "int xx=0;" から変更。毎回警告が出るので。\r
-                               }\r
-                               //else\r
-                               //{     // Duration測定のため、bヘッダのみ==trueでも、チップ配置は行う\r
-                               //      this.t入力・行解析・チップ配置( strコマンド, strパラメータ, strコメント );\r
-                               //}\r
-                       }\r
-               }\r
-               private bool t入力_行解析_AVI_VIDEO(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "AVI" or "VIDEO" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (strコマンド.StartsWith("AVI", StringComparison.OrdinalIgnoreCase))\r
-                               strコマンド = strコマンド.Substring(3);   // strコマンド から先頭の"AVI"文字を除去。\r
-\r
-                       else if (strコマンド.StartsWith("VIDEO", StringComparison.OrdinalIgnoreCase))\r
-                               strコマンド = strコマンド.Substring(5);   // strコマンド から先頭の"VIDEO"文字を除去。\r
-\r
-                       else\r
-                               return false;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                               return false; // AVI番号 zz がないなら無効。\r
-\r
-                       #region [ AVI番号 zz を取得する。]\r
-                       //-----------------\r
-                       int zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                       if (zz < 0 || zz >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("AVI(VIDEO)番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ AVIリストに {zz, avi} の組を登録する。 ]\r
-                       //-----------------\r
-                       var avi = new CAVI(zz, strパラメータ, strコメント, CDTXMania.Instance.ConfigIni.nPlaySpeed);\r
-\r
-                       if (this.listAVI.ContainsKey(zz)) // 既にリスト中に存在しているなら削除。後のものが有効。\r
-                               this.listAVI.Remove(zz);\r
-\r
-                       this.listAVI.Add(zz, avi);\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_AVIPAN(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "AVIPAN" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("AVIPAN", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(6); // strコマンド から先頭の"AVIPAN"文字を除去。\r
-                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                               return false; // AVIPAN番号 zz がないなら無効。\r
-\r
-                       #region [ AVIPAN番号 zz を取得する。]\r
-                       //-----------------\r
-                       int zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                       if (zz < 0 || zz >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("AVIPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       var avipan = new CAVIPAN()\r
-                       {\r
-                               n番号 = zz,\r
-                       };\r
-\r
-                       // パラメータ引数(14個)を取得し、avipan に登録していく。\r
-\r
-                       string[] strParams = strパラメータ.Split(new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries);\r
-\r
-                       #region [ パラメータ引数は全14個ないと無効。]\r
-                       //-----------------\r
-                       if (strParams.Length < 14)\r
-                       {\r
-                               Trace.TraceError("AVIPAN: 引数が足りません。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       int i = 0;\r
-                       int n値 = 0;\r
-\r
-                       #region [ 1. AVI番号 ]\r
-                       //-----------------\r
-                       if (string.IsNullOrEmpty(strParams[i]) || strParams[i].Length > 2)\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の数(AVI番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.nAVI番号 = C変換.n36進数2桁の文字列を数値に変換して返す(strParams[i]);\r
-                       if (avipan.nAVI番号 < 1 || avipan.nAVI番号 >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の数(AVI番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 2. 開始転送サイズ・幅 ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(開始転送サイズ・幅)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.sz開始サイズ.Width = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 3. 転送サイズ・高さ ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(開始転送サイズ・高さ)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.sz開始サイズ.Height = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 4. 終了転送サイズ・幅 ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.sz終了サイズ.Width = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 5. 終了転送サイズ・高さ ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(終了転送サイズ・高さ)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.sz終了サイズ.Height = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 6. 動画側開始位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(動画側開始位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.pt動画側開始位置.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 7. 動画側開始位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(動画側開始位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.pt動画側開始位置.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 8. 動画側終了位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(動画側終了位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.pt動画側終了位置.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 9. 動画側終了位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(動画側終了位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.pt動画側終了位置.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 10.表示側開始位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(表示側開始位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.pt表示側開始位置.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 11.表示側開始位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(表示側開始位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.pt表示側開始位置.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 12.表示側終了位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(表示側終了位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.pt表示側終了位置.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 13.表示側終了位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(表示側終了位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       avipan.pt表示側終了位置.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 14.移動時間 ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("AVIPAN: {2}番目の引数(移動時間)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-\r
-                       if (n値 < 0)\r
-                               n値 = 0;\r
-\r
-                       avipan.n移動時間ct = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ AVIPANリストに {zz, avipan} の組を登録する。]\r
-                       //-----------------\r
-                       if (this.listAVIPAN.ContainsKey(zz))  // 既にリスト中に存在しているなら削除。後のものが有効。\r
-                               this.listAVIPAN.Remove(zz);\r
-\r
-                       this.listAVIPAN.Add(zz, avipan);\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_BGA(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "BGA" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("BGA", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(3); // strコマンド から先頭の"BGA"文字を除去。\r
-                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                               return false; // BGA番号 zz がないなら無効。\r
-\r
-                       #region [ BGA番号 zz を取得する。]\r
-                       //-----------------\r
-                       int zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                       if (zz < 0 || zz >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("BGA番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       var bga = new CBGA()\r
-                       {\r
-                               n番号 = zz,\r
-                       };\r
-\r
-                       // パラメータ引数(7個)を取得し、bga に登録していく。\r
-\r
-                       string[] strParams = strパラメータ.Split(new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries);\r
-\r
-                       #region [ パラメータ引数は全7個ないと無効。]\r
-                       //-----------------\r
-                       if (strParams.Length < 7)\r
-                       {\r
-                               Trace.TraceError("BGA: 引数が足りません。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       int i = 0;\r
-                       int n値 = 0;\r
-\r
-                       #region [ 1.BMP番号 ]\r
-                       //-----------------\r
-                       if (string.IsNullOrEmpty(strParams[i]) || strParams[i].Length > 2)\r
-                       {\r
-                               Trace.TraceError("BGA: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bga.nBMP番号 = C変換.n36進数2桁の文字列を数値に変換して返す(strParams[i]);\r
-                       if (bga.nBMP番号 < 1 || bga.nBMP番号 >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("BGA: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 2.画像側位置1・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGA: {2}番目の引数(画像側位置1・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bga.pt画像側左上座標.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 3.画像側位置1・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGA: {2}番目の引数(画像側位置1・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bga.pt画像側左上座標.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 4.画像側位置2・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGA: {2}番目の引数(画像側位置2・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bga.pt画像側右下座標.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 5.画像側位置2・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGA: {2}番目の引数(画像側座標2・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bga.pt画像側右下座標.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 6.表示位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGA: {2}番目の引数(表示位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bga.pt表示座標.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 7.表示位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGA: {2}番目の引数(表示位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bga.pt表示座標.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ 画像側座標の正規化とクリッピング。]\r
-                       //-----------------\r
-                       if (bga.pt画像側左上座標.X > bga.pt画像側右下座標.X)\r
-                       {\r
-                               n値 = bga.pt画像側左上座標.X;\r
-                               bga.pt画像側左上座標.X = bga.pt画像側右下座標.X;\r
-                               bga.pt画像側右下座標.X = n値;\r
-                       }\r
-                       if (bga.pt画像側左上座標.Y > bga.pt画像側右下座標.Y)\r
-                       {\r
-                               n値 = bga.pt画像側左上座標.Y;\r
-                               bga.pt画像側左上座標.Y = bga.pt画像側右下座標.Y;\r
-                               bga.pt画像側右下座標.Y = n値;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ BGAリストに {zz, bga} の組を登録する。]\r
-                       //-----------------\r
-                       if (this.listBGA.ContainsKey(zz)) // 既にリスト中に存在しているなら削除。後のものが有効。\r
-                               this.listBGA.Remove(zz);\r
-\r
-                       this.listBGA.Add(zz, bga);\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_BGAPAN(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "BGAPAN" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("BGAPAN", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(6); // strコマンド から先頭の"BGAPAN"文字を除去。\r
-                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                               return false; // BGAPAN番号 zz がないなら無効。\r
-\r
-                       #region [ BGAPAN番号 zz を取得する。]\r
-                       //-----------------\r
-                       int zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                       if (zz < 0 || zz >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("BGAPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       var bgapan = new CBGAPAN()\r
-                       {\r
-                               n番号 = zz,\r
-                       };\r
-\r
-                       // パラメータ引数(14個)を取得し、bgapan に登録していく。\r
-\r
-                       string[] strParams = strパラメータ.Split(new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries);\r
-\r
-                       #region [ パラメータ引数は全14個ないと無効。]\r
-                       //-----------------\r
-                       if (strParams.Length < 14)\r
-                       {\r
-                               Trace.TraceError("BGAPAN: 引数が足りません。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       int i = 0;\r
-                       int n値 = 0;\r
-\r
-                       #region [ 1. BMP番号 ]\r
-                       //-----------------\r
-                       if (string.IsNullOrEmpty(strParams[i]) || strParams[i].Length > 2)\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.nBMP番号 = C変換.n36進数2桁の文字列を数値に変換して返す(strParams[i]);\r
-                       if (bgapan.nBMP番号 < 1 || bgapan.nBMP番号 >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 2. 開始転送サイズ・幅 ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(開始転送サイズ・幅)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.sz開始サイズ.Width = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 3. 開始転送サイズ・高さ ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(開始転送サイズ・高さ)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.sz開始サイズ.Height = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 4. 終了転送サイズ・幅 ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.sz終了サイズ.Width = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 5. 終了転送サイズ・高さ ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(終了転送サイズ・高さ)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.sz終了サイズ.Height = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 6. 画像側開始位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(画像側開始位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.pt画像側開始位置.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 7. 画像側開始位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(画像側開始位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.pt画像側開始位置.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 8. 画像側終了位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(画像側終了位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.pt画像側終了位置.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 9. 画像側終了位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(画像側終了位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.pt画像側終了位置.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 10.表示側開始位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(表示側開始位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.pt表示側開始位置.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 11.表示側開始位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(表示側開始位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.pt表示側開始位置.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 12.表示側終了位置・X ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(表示側終了位置・X)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.pt表示側終了位置.X = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 13.表示側終了位置・Y ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(表示側終了位置・Y)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-                       bgapan.pt表示側終了位置.Y = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-                       #region [ 14.移動時間 ]\r
-                       //-----------------\r
-                       n値 = 0;\r
-                       if (!int.TryParse(strParams[i], out n値))\r
-                       {\r
-                               Trace.TraceError("BGAPAN: {2}番目の引数(移動時間)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1);\r
-                               return false;\r
-                       }\r
-\r
-                       if (n値 < 0)\r
-                               n値 = 0;\r
-\r
-                       bgapan.n移動時間ct = n値;\r
-                       i++;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ BGAPANリストに {zz, bgapan} の組を登録する。]\r
-                       //-----------------\r
-                       if (this.listBGAPAN.ContainsKey(zz))  // 既にリスト中に存在しているなら削除。後のものが有効。\r
-                               this.listBGAPAN.Remove(zz);\r
-\r
-                       this.listBGAPAN.Add(zz, bgapan);\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_BMP(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "BMP" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("BMP", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(3); // strコマンド から先頭の"BMP"文字を除去。\r
-                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       int zz = 0;\r
-\r
-                       #region [ BMP番号 zz を取得する。]\r
-                       //-----------------\r
-                       if (strコマンド.Length < 2)\r
-                       {\r
-                               #region [ (A) "#BMP:" の場合 → zz = 00 ]\r
-                               //-----------------\r
-                               zz = 0;\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       else\r
-                       {\r
-                               #region [ (B) "#BMPzz:" の場合 → zz = 00 ~ ZZ ]\r
-                               //-----------------\r
-                               zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                               if (zz < 0 || zz >= 36 * 36)\r
-                               {\r
-                                       Trace.TraceError("BMP番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                                       return false;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-\r
-                       var bmp = new CBMP()\r
-                       {\r
-                               n番号 = zz,\r
-                               strファイル名 = strパラメータ,\r
-                               strコメント文 = strコメント,\r
-                       };\r
-\r
-                       #region [ BMPリストに {zz, bmp} の組を登録。]\r
-                       //-----------------\r
-                       if (this.listBMP.ContainsKey(zz)) // 既にリスト中に存在しているなら削除。後のものが有効。\r
-                               this.listBMP.Remove(zz);\r
-\r
-                       this.listBMP.Add(zz, bmp);\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_BMPTEX(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "BMPTEX" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("BMPTEX", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(6); // strコマンド から先頭の"BMPTEX"文字を除去。\r
-                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                               return false; // BMPTEX番号 zz がないなら無効。\r
-\r
-                       #region [ BMPTEX番号 zz を取得する。]\r
-                       //-----------------\r
-                       int zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                       if (zz < 0 || zz >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("BMPTEX番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       var bmptex = new CBMPTEX()\r
-                       {\r
-                               n番号 = zz,\r
-                               strファイル名 = strパラメータ,\r
-                               strコメント文 = strコメント,\r
-                       };\r
-\r
-                       #region [ BMPTEXリストに {zz, bmptex} の組を登録する。]\r
-                       //-----------------\r
-                       if (this.listBMPTEX.ContainsKey(zz))  // 既にリスト中に存在しているなら削除。後のものが有効。\r
-                               this.listBMPTEX.Remove(zz);\r
-\r
-                       this.listBMPTEX.Add(zz, bmptex);\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_BPM_BPMzz(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "BPM" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("BPM", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(3); // strコマンド から先頭の"BPM"文字を除去。\r
-                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       int zz = 0;\r
-\r
-                       #region [ BPM番号 zz を取得する。]\r
-                       //-----------------\r
-                       if (strコマンド.Length < 2)\r
-                       {\r
-                               #region [ (A) "#BPM:" の場合 → zz = 00 ]\r
-                               //-----------------\r
-                               zz = 0;\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       else\r
-                       {\r
-                               #region [ (B) "#BPMzz:" の場合 → zz = 00 ~ ZZ ]\r
-                               //-----------------\r
-                               zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                               if (zz < 0 || zz >= 36 * 36)\r
-                               {\r
-                                       Trace.TraceError("BPM番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                                       return false;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       double dbBPM = 0.0;\r
-\r
-                       #region [ BPM値を取得する。]\r
-                       //-----------------\r
-                       //if( !double.TryParse( strパラメータ, out result ) )\r
-                       if (!TryParse(strパラメータ, out dbBPM))     // #23880 2010.12.30 yyagi: alternative TryParse to permit both '.' and ',' for decimal point\r
-                               return false;\r
-\r
-                       if (dbBPM <= 0.0)\r
-                               return false;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       if (zz == 0)      // "#BPM00:" と "#BPM:" は等価。\r
-                               this.BPM = dbBPM; // この曲の代表 BPM に格納する。\r
-\r
-                       #region [ BPMリストに {内部番号, zz, dbBPM} の組を登録。]\r
-                       //-----------------\r
-                       this.listBPM.Add(\r
-                               this.n内部番号BPM1to,\r
-                               new CBPM()\r
-                               {\r
-                                       n内部番号 = this.n内部番号BPM1to,\r
-                                       n表記上の番号 = zz,\r
-                                       dbBPM値 = dbBPM,\r
-                               });\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ BPM番号が zz であるBPM未設定のBPMチップがあれば、そのサイズを変更する。無限管理に対応。]\r
-                       //-----------------\r
-                       if (this.n無限管理BPM[zz] == -zz) // 初期状態では n無限管理BPM[zz] = -zz である。この場合、#BPMzz がまだ出現していないことを意味する。\r
-                       {\r
-                               foreach (CChip chip in listChip)  // これまでに出てきたチップのうち、該当する(BPM値が未設定の)BPMチップの値を変更する(仕組み上、必ず後方参照となる)。\r
-                               {\r
-                                       chip.AdjustInfiniteManageIntInternalIndex(chip.bBPMチップである, zz, this.n内部番号BPM1to);\r
-                               }\r
-                       }\r
-                       this.n無限管理BPM[zz] = this.n内部番号BPM1to;     // 次にこの BPM番号 zz を使うBPMチップが現れたら、このBPM値が格納されることになる。\r
-                       this.n内部番号BPM1to++;   // 内部番号は単純増加連番。\r
-                                                                                                               //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_RESULTIMAGE(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "RESULTIMAGE" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("RESULTIMAGE", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(11);  // strコマンド から先頭の"RESULTIMAGE"文字を除去。\r
-                                                                                                                                                               //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-                       //     コマンドには "#RESULTIMAGE:" と "#RESULTIMAGE_SS~E" の2種類があり、パラメータの処理はそれぞれ異なる。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                       {\r
-                               #region [ (A) ランク指定がない場合("#RESULTIMAGE:") → 優先順位が設定されていないすべてのランクで同じパラメータを使用する。]\r
-                               //-----------------\r
-                               for (int i = 0; i < 7; i++)\r
-                               {\r
-                                       if (this.nRESULTIMAGE用優先順位[i] == 0)\r
-                                               this.RESULTIMAGE[i] = strパラメータ.Trim();\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       else\r
-                       {\r
-                               #region [ (B) ランク指定がある場合("#RESULTIMAGE_SS~E:") → 優先順位に従ってパラメータを記録する。]\r
-                               //-----------------\r
-                               switch (strコマンド.ToUpper())\r
-                               {\r
-                                       case "_SS":\r
-                                               this.t入力_行解析_RESULTIMAGE_ファイルを設定する(0, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_S":\r
-                                               this.t入力_行解析_RESULTIMAGE_ファイルを設定する(1, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_A":\r
-                                               this.t入力_行解析_RESULTIMAGE_ファイルを設定する(2, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_B":\r
-                                               this.t入力_行解析_RESULTIMAGE_ファイルを設定する(3, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_C":\r
-                                               this.t入力_行解析_RESULTIMAGE_ファイルを設定する(4, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_D":\r
-                                               this.t入力_行解析_RESULTIMAGE_ファイルを設定する(5, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_E":\r
-                                               this.t入力_行解析_RESULTIMAGE_ファイルを設定する(6, strパラメータ);\r
-                                               break;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-\r
-                       return true;\r
-               }\r
-               private void t入力_行解析_RESULTIMAGE_ファイルを設定する(int nランク0to6, string strファイル名)\r
-               {\r
-                       if (nランク0to6 < 0 || nランク0to6 > 6) // 値域チェック。\r
-                               return;\r
-\r
-                       // 指定されたランクから上位のすべてのランクについて、ファイル名を更新する。\r
-\r
-                       for (int i = nランク0to6; i >= 0; i--)\r
-                       {\r
-                               int n優先順位 = 7 - nランク0to6;\r
-\r
-                               // 現状より優先順位の低い RESULTIMAGE[] に限り、ファイル名を更新できる。\r
-                               //(例:#RESULTMOVIE_D が #RESULTIMAGE_A より後に出現しても、#RESULTIMAGE_A で指定されたファイル名を上書きすることはできない。しかしその逆は可能。)\r
-\r
-                               if (this.nRESULTIMAGE用優先順位[i] < n優先順位)\r
-                               {\r
-                                       this.nRESULTIMAGE用優先順位[i] = n優先順位;\r
-                                       this.RESULTIMAGE[i] = strファイル名;\r
-                               }\r
-                       }\r
-               }\r
-               private bool t入力_行解析_RESULTMOVIE(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "RESULTMOVIE" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("RESULTMOVIE", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(11);  // strコマンド から先頭の"RESULTMOVIE"文字を除去。\r
-                                                                                                                                                               //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-                       //     コマンドには "#RESULTMOVIE:" と "#RESULTMOVIE_SS~E" の2種類があり、パラメータの処理はそれぞれ異なる。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                       {\r
-                               #region [ (A) ランク指定がない場合("#RESULTMOVIE:") → 優先順位が設定されていないすべてのランクで同じパラメータを使用する。]\r
-                               //-----------------\r
-                               for (int i = 0; i < 7; i++)\r
-                               {\r
-                                       if (this.nRESULTMOVIE用優先順位[i] == 0)\r
-                                               this.RESULTMOVIE[i] = strパラメータ.Trim();\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       else\r
-                       {\r
-                               #region [ (B) ランク指定がある場合("#RESULTMOVIE_SS~E:") → 優先順位に従ってパラメータを記録する。]\r
-                               //-----------------\r
-                               switch (strコマンド.ToUpper())\r
-                               {\r
-                                       case "_SS":\r
-                                               this.t入力_行解析_RESULTMOVIE_ファイルを設定する(0, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_S":\r
-                                               this.t入力_行解析_RESULTMOVIE_ファイルを設定する(1, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_A":\r
-                                               this.t入力_行解析_RESULTMOVIE_ファイルを設定する(2, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_B":\r
-                                               this.t入力_行解析_RESULTMOVIE_ファイルを設定する(3, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_C":\r
-                                               this.t入力_行解析_RESULTMOVIE_ファイルを設定する(4, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_D":\r
-                                               this.t入力_行解析_RESULTMOVIE_ファイルを設定する(5, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_E":\r
-                                               this.t入力_行解析_RESULTMOVIE_ファイルを設定する(6, strパラメータ);\r
-                                               break;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-\r
-                       return true;\r
-               }\r
-               private void t入力_行解析_RESULTMOVIE_ファイルを設定する(int nランク0to6, string strファイル名)\r
-               {\r
-                       if (nランク0to6 < 0 || nランク0to6 > 6) // 値域チェック。\r
-                               return;\r
-\r
-                       // 指定されたランクから上位のすべてのランクについて、ファイル名を更新する。\r
-\r
-                       for (int i = nランク0to6; i >= 0; i--)\r
-                       {\r
-                               int n優先順位 = 7 - nランク0to6;\r
-\r
-                               // 現状より優先順位の低い RESULTMOVIE[] に限り、ファイル名を更新できる。\r
-                               //(例:#RESULTMOVIE_D が #RESULTMOVIE_A より後に出現しても、#RESULTMOVIE_A で指定されたファイル名を上書きすることはできない。しかしその逆は可能。)\r
-\r
-                               if (this.nRESULTMOVIE用優先順位[i] < n優先順位)\r
-                               {\r
-                                       this.nRESULTMOVIE用優先順位[i] = n優先順位;\r
-                                       this.RESULTMOVIE[i] = strファイル名;\r
-                               }\r
-                       }\r
-               }\r
-               private bool t入力_行解析_RESULTSOUND(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "RESULTSOUND" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("RESULTSOUND", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(11);  // strコマンド から先頭の"RESULTSOUND"文字を除去。\r
-                                                                                                                                                               //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-                       //     コマンドには "#RESULTSOUND:" と "#RESULTSOUND_SS~E" の2種類があり、パラメータの処理はそれぞれ異なる。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                       {\r
-                               #region [ (A) ランク指定がない場合("#RESULTSOUND:") → 優先順位が設定されていないすべてのランクで同じパラメータを使用する。]\r
-                               //-----------------\r
-                               for (int i = 0; i < 7; i++)\r
-                               {\r
-                                       if (this.nRESULTSOUND用優先順位[i] == 0)\r
-                                               this.RESULTSOUND[i] = strパラメータ.Trim();\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       else\r
-                       {\r
-                               #region [ (B) ランク指定がある場合("#RESULTSOUND_SS~E:") → 優先順位に従ってパラメータを記録する。]\r
-                               //-----------------\r
-                               switch (strコマンド.ToUpper())\r
-                               {\r
-                                       case "_SS":\r
-                                               this.t入力_行解析_RESULTSOUND_ファイルを設定する(0, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_S":\r
-                                               this.t入力_行解析_RESULTSOUND_ファイルを設定する(1, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_A":\r
-                                               this.t入力_行解析_RESULTSOUND_ファイルを設定する(2, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_B":\r
-                                               this.t入力_行解析_RESULTSOUND_ファイルを設定する(3, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_C":\r
-                                               this.t入力_行解析_RESULTSOUND_ファイルを設定する(4, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_D":\r
-                                               this.t入力_行解析_RESULTSOUND_ファイルを設定する(5, strパラメータ);\r
-                                               break;\r
-\r
-                                       case "_E":\r
-                                               this.t入力_行解析_RESULTSOUND_ファイルを設定する(6, strパラメータ);\r
-                                               break;\r
-                               }\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-\r
-                       return true;\r
-               }\r
-               private void t入力_行解析_RESULTSOUND_ファイルを設定する(int nランク0to6, string strファイル名)\r
-               {\r
-                       if (nランク0to6 < 0 || nランク0to6 > 6) // 値域チェック。\r
-                               return;\r
-\r
-                       // 指定されたランクから上位のすべてのランクについて、ファイル名を更新する。\r
-\r
-                       for (int i = nランク0to6; i >= 0; i--)\r
-                       {\r
-                               int n優先順位 = 7 - nランク0to6;\r
-\r
-                               // 現状より優先順位の低い RESULTSOUND[] に限り、ファイル名を更新できる。\r
-                               //(例:#RESULTSOUND_D が #RESULTSOUND_A より後に出現しても、#RESULTSOUND_A で指定されたファイル名を上書きすることはできない。しかしその逆は可能。)\r
-\r
-                               if (this.nRESULTSOUND用優先順位[i] < n優先順位)\r
-                               {\r
-                                       this.nRESULTSOUND用優先順位[i] = n優先順位;\r
-                                       this.RESULTSOUND[i] = strファイル名;\r
-                               }\r
-                       }\r
-               }\r
-               private bool t入力_行解析_SIZE(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "SIZE" で始まらないコマンドや、その後ろに2文字(番号)が付随してないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("SIZE", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(4); // strコマンド から先頭の"SIZE"文字を除去。\r
-\r
-                       if (strコマンド.Length < 2) // サイズ番号の指定がない場合は無効。\r
-                               return false;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ nWAV番号(36進数2桁)を取得。]\r
-                       //-----------------\r
-                       int nWAV番号 = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-\r
-                       if (nWAV番号 < 0 || nWAV番号 >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("SIZEのWAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       #region [ nサイズ値 を取得する。値は 0~100 に収める。]\r
-                       //-----------------\r
-                       int nサイズ値;\r
-\r
-                       if (!int.TryParse(strパラメータ, out nサイズ値))\r
-                               return true;  // int変換に失敗しても、この行自体の処理は終えたのでtrueを返す。\r
-\r
-                       nサイズ値 = Math.Min(Math.Max(nサイズ値, 0), 100);  // 0未満は0、100超えは100に強制変換。\r
-                                                                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ nWAV番号で示されるサイズ未設定のWAVチップがあれば、そのサイズを変更する。無限管理に対応。]\r
-                       //-----------------\r
-                       if (this.n無限管理SIZE[nWAV番号] == -nWAV番号)  // 初期状態では n無限管理SIZE[xx] = -xx である。この場合、#SIZExx がまだ出現していないことを意味する。\r
-                       {\r
-                               foreach (CWAV wav in this.listWAV.Values)   // これまでに出てきたWAVチップのうち、該当する(サイズが未設定の)チップのサイズを変更する(仕組み上、必ず後方参照となる)。\r
-                               {\r
-                                       if (wav.nチップサイズ == -nWAV番号)   // #SIZExx 行より前の行に出現した #WAVxx では、チップサイズは -xx に初期化されている。\r
-                                               wav.nチップサイズ = nサイズ値;\r
-                               }\r
-                       }\r
-                       this.n無限管理SIZE[nWAV番号] = nサイズ値;     // 次にこの nWAV番号を使うWAVチップが現れたら、負数の代わりに、このサイズ値が格納されることになる。\r
-                                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_WAV(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "WAV" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (!strコマンド.StartsWith("WAV", StringComparison.OrdinalIgnoreCase))\r
-                               return false;\r
-\r
-                       strコマンド = strコマンド.Substring(3); // strコマンド から先頭の"WAV"文字を除去。\r
-                                                                                                                                                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                               return false; // WAV番号 zz がないなら無効。\r
-\r
-                       #region [ WAV番号 zz を取得する。]\r
-                       //-----------------\r
-                       int zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                       if (zz < 0 || zz >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       var wav = new CWAV()\r
-                       {\r
-                               n内部番号 = this.n内部番号WAV1to,\r
-                               n表記上の番号 = zz,\r
-                               nチップサイズ = this.n無限管理SIZE[zz],\r
-                               n位置 = this.n無限管理PAN[zz],\r
-                               n音量 = this.n無限管理VOL[zz],\r
-                               strファイル名 = strパラメータ,\r
-                               strコメント文 = strコメント,\r
-                       };\r
-\r
-                       #region [ WAVリストに {内部番号, wav} の組を登録。]\r
-                       //-----------------\r
-                       this.listWAV.Add(this.n内部番号WAV1to, wav);\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ WAV番号が zz である内部番号未設定のWAVチップがあれば、その内部番号を変更する。無限管理対応。]\r
-                       //-----------------\r
-                       if (this.n無限管理WAV[zz] == -zz) // 初期状態では n無限管理WAV[zz] = -zz である。この場合、#WAVzz がまだ出現していないことを意味する。\r
-                       {\r
-                               foreach (CChip chip in listChip)  // これまでに出てきたチップのうち、該当する(内部番号が未設定の)WAVチップの値を変更する(仕組み上、必ず後方参照となる)。\r
-                               {\r
-                                       chip.AdjustInfiniteManageIntInternalIndex(chip.bWAVを使うチャンネルである, zz, n内部番号WAV1to);\r
-                               }\r
-                       }\r
-                       this.n無限管理WAV[zz] = this.n内部番号WAV1to;     // 次にこの WAV番号 zz を使うWAVチップが現れたら、この内部番号が格納されることになる。\r
-                       this.n内部番号WAV1to++;   // 内部番号は単純増加連番。\r
-                                                                                                               //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_WAVPAN_PAN(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "WAVPAN" or "PAN" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (strコマンド.StartsWith("WAVPAN", StringComparison.OrdinalIgnoreCase))\r
-                               strコマンド = strコマンド.Substring(6);   // strコマンド から先頭の"WAVPAN"文字を除去。\r
-\r
-                       else if (strコマンド.StartsWith("PAN", StringComparison.OrdinalIgnoreCase))\r
-                               strコマンド = strコマンド.Substring(3);   // strコマンド から先頭の"PAN"文字を除去。\r
-\r
-                       else\r
-                               return false;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                               return false; // WAV番号 zz がないなら無効。\r
-\r
-                       #region [ WAV番号 zz を取得する。]\r
-                       //-----------------\r
-                       int zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                       if (zz < 0 || zz >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("WAVPAN(PAN)のWAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ WAV番号 zz を持つWAVチップの位置を変更する。無限定義対応。]\r
-                       //-----------------\r
-                       int n位置;\r
-                       if (int.TryParse(strパラメータ, out n位置))\r
-                       {\r
-                               n位置 = Math.Min(Math.Max(n位置, -100), 100); // -100~+100 に丸める\r
-\r
-                               if (this.n無限管理PAN[zz] == (-10000 - zz)) // 初期状態では n無限管理PAN[zz] = -10000 - zz である。この場合、#WAVPANzz, #PANzz がまだ出現していないことを意味する。\r
-                               {\r
-                                       foreach (CWAV wav in this.listWAV.Values) // これまでに出てきたチップのうち、該当する(位置が未設定の)WAVチップの値を変更する(仕組み上、必ず後方参照となる)。\r
-                                       {\r
-                                               if (wav.n位置 == (-10000 - zz)) // #WAVPANzz, #PANzz 行より前の行に出現した #WAVzz では、位置は -10000-zz に初期化されている。\r
-                                                       wav.n位置 = n位置;\r
-                                       }\r
-                               }\r
-                               this.n無限管理PAN[zz] = n位置;      // 次にこの WAV番号 zz を使うWAVチップが現れたら、この位置が格納されることになる。\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_WAVVOL_VOLUME(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       #region [ "WAVCOL" or "VOLUME" で始まらないコマンドは無効。]\r
-                       //-----------------\r
-                       if (strコマンド.StartsWith("WAVVOL", StringComparison.OrdinalIgnoreCase))\r
-                               strコマンド = strコマンド.Substring(6);   // strコマンド から先頭の"WAVVOL"文字を除去。\r
-\r
-                       else if (strコマンド.StartsWith("VOLUME", StringComparison.OrdinalIgnoreCase))\r
-                               strコマンド = strコマンド.Substring(6);   // strコマンド から先頭の"VOLUME"文字を除去。\r
-\r
-                       else\r
-                               return false;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       // (2) パラメータを処理。\r
-\r
-                       if (strコマンド.Length < 2)\r
-                               return false; // WAV番号 zz がないなら無効。\r
-\r
-                       #region [ WAV番号 zz を取得する。]\r
-                       //-----------------\r
-                       int zz = C変換.n36進数2桁の文字列を数値に変換して返す(strコマンド.Substring(0, 2));\r
-                       if (zz < 0 || zz >= 36 * 36)\r
-                       {\r
-                               Trace.TraceError("WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                               return false;\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       #region [ WAV番号 zz を持つWAVチップの音量を変更する。無限定義対応。]\r
-                       //-----------------\r
-                       int n音量;\r
-                       if (int.TryParse(strパラメータ, out n音量))\r
-                       {\r
-                               n音量 = Math.Min(Math.Max(n音量, 0), 100);  // 0~100に丸める。\r
-\r
-                               if (this.n無限管理VOL[zz] == -zz) // 初期状態では n無限管理VOL[zz] = - zz である。この場合、#WAVVOLzz, #VOLUMEzz がまだ出現していないことを意味する。\r
-                               {\r
-                                       foreach (CWAV wav in this.listWAV.Values) // これまでに出てきたチップのうち、該当する(音量が未設定の)WAVチップの値を変更する(仕組み上、必ず後方参照となる)。\r
-                                       {\r
-                                               if (wav.n音量 == -zz) // #WAVVOLzz, #VOLUMEzz 行より前の行に出現した #WAVzz では、音量は -zz に初期化されている。\r
-                                                       wav.n音量 = n音量;\r
-                                       }\r
-                               }\r
-                               this.n無限管理VOL[zz] = n音量;      // 次にこの WAV番号 zz を使うWAVチップが現れたら、この音量が格納されることになる。\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       return true;\r
-               }\r
-               private bool t入力_行解析_チップ配置(string strコマンド, string strパラメータ, string strコメント)\r
-               {\r
-                       // (1) コマンドを処理。\r
-\r
-                       if (strコマンド.Length != 5)  // コマンドは必ず5文字であること。\r
-                               return false;\r
-\r
-                       #region [ n小節番号 を取得する。]\r
-                       //-----------------\r
-                       int n小節番号 = C変換.n小節番号の文字列3桁を数値に変換して返す(strコマンド.Substring(0, 3));\r
-                       if (n小節番号 < 0)\r
-                               return false;\r
-\r
-                       n小節番号++;  // 先頭に空の1小節を設ける。\r
-                                                               //-----------------\r
-                       #endregion\r
-\r
-                       #region [ nチャンネル番号 を取得する。]\r
-                       //-----------------\r
-                       EChannel tmpチャンネル番号 = EChannel.Invalid;\r
-\r
-                       // ファイルフォーマットによって処理が異なる。\r
-\r
-                       if (this.e種別 == EDTX種別.GDA || this.e種別 == EDTX種別.G2D)\r
-                       {\r
-                               #region [ (A) GDA, G2D の場合:チャンネル文字列をDTXのチャンネル番号へ置き換える。]\r
-                               //-----------------\r
-                               string strチャンネル文字列 = strコマンド.Substring(3, 2);\r
-\r
-                               foreach (STGDAPARAM param in this.stGDAParam)\r
-                               {\r
-                                       if (strチャンネル文字列.Equals(param.strGDAのチャンネル文字列, StringComparison.OrdinalIgnoreCase))\r
-                                       {\r
-                                               tmpチャンネル番号 = param.eDTXのチャンネル番号;\r
-                                               break;  // 置き換え成功\r
-                                       }\r
-                               }\r
-                               if (tmpチャンネル番号 == EChannel.Invalid)\r
-                                       return false; // 置き換え失敗\r
-                                                                                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       else\r
-                       {\r
-                               #region [ (B) その他の場合:チャンネル番号は16進数2桁。]\r
-                               //-----------------\r
-                               tmpチャンネル番号 = (EChannel)C変換.n16進数2桁の文字列を数値に変換して返す(strコマンド.Substring(3, 2));\r
-\r
-                               if (tmpチャンネル番号 < 0)\r
-                                       return false;\r
-                               //-----------------\r
-                               #endregion\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-\r
-                       // (2) Ch.02を処理。\r
-                       #region [ 小節長変更(Ch.02)は他のチャンネルとはパラメータが特殊なので、先にとっとと終わらせる。 ]\r
-                       //-----------------\r
-                       if (tmpチャンネル番号 == EChannel.BarLength)\r
-                       {\r
-                               // 小節長倍率を取得する。\r
-                               double db小節長倍率 = 1.0;\r
-                               //if( !double.TryParse( strパラメータ, out result ) )\r
-                               if (!this.TryParse(strパラメータ, out db小節長倍率))      // #23880 2010.12.30 yyagi: alternative TryParse to permit both '.' and ',' for decimal point\r
-                               {\r
-                                       Trace.TraceError("小節長倍率に不正な値を指定しました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                                       return false;\r
-                               }\r
-\r
-                               // 小節長倍率チップを一番先頭に配置する。\r
-                               this.listChip.Insert(0, new CChip(n小節番号 * 384, db小節長倍率, tmpチャンネル番号));\r
-\r
-                               return true;  // 配置終了。\r
-                       }\r
-                       //-----------------\r
-                       #endregion\r
-\r
-                       // (3) パラメータを処理。\r
-                       if (string.IsNullOrEmpty(strパラメータ))   // パラメータはnullまたは空文字列ではないこと。\r
-                               return false;\r
-\r
-                       #region [ strパラメータ にオブジェクト記述を格納し、その n文字数 をカウントする。]\r
-                       //-----------------\r
-                       int n文字数 = 0;\r
-\r
-                       var sb = new StringBuilder(strパラメータ.Length);\r
-\r
-                       // strパラメータを先頭から1文字ずつ見ながら正規化(無効文字('_')を飛ばしたり不正な文字でエラーを出したり)し、sb へ格納する。\r
-\r
-                       CharEnumerator ce = strパラメータ.GetEnumerator();\r
-                       while (ce.MoveNext())\r
-                       {\r
-                               if (ce.Current == '_')    // '_' は無視。\r
-                                       continue;\r
-\r
-                               if (C変換.str36進数文字.IndexOf(ce.Current) < 0)  // オブジェクト記述は36進数文字であること。\r
-                               {\r
-                                       Trace.TraceError("不正なオブジェクト指定があります。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数);\r
-                                       return false;\r
-                               }\r
-\r
-                               sb.Append(ce.Current);\r
-                               n文字数++;\r
-                       }\r
-\r
-                       strパラメータ = sb.ToString(); // 正規化された文字列になりました。\r
-\r
-                       if ((n文字数 % 2) != 0)    // パラメータの文字数が奇数の場合、最後の1文字を無視する。\r
-                               n文字数--;\r
-                       //-----------------\r
-                       #endregion\r
-\r
-\r
-                       // (4) パラメータをオブジェクト数値に分解して配置する。\r
-\r
-                       for (int i = 0; i < (n文字数 / 2); i++)  // 2文字で1オブジェクト数値\r
-                       {\r
-                               #region [ nオブジェクト数値 を1つ取得する。'00' なら無視。]\r
-                               //-----------------\r
-                               int nオブジェクト数値 = 0;\r
-\r
-                               if (tmpチャンネル番号 == EChannel.BPM)\r
-                               {\r
-                                       // Ch.03 のみ 16進数2桁。\r
-                                       nオブジェクト数値 = C変換.n16進数2桁の文字列を数値に変換して返す(strパラメータ.Substring(i * 2, 2));\r
-                               }\r
-                               else\r
-                               {\r
-                                       // その他のチャンネルは36進数2桁。\r
-                                       nオブジェクト数値 = C変換.n36進数2桁の文字列を数値に変換して返す(strパラメータ.Substring(i * 2, 2));\r
-                               }\r
-\r
-                               if (nオブジェクト数値 == 0x00)\r
-                                       continue;\r
-                               //-----------------\r
-                               #endregion\r
-\r
-                               // オブジェクト数値に対応するチップを生成。\r
-                               var chip = new CChip((n小節番号 * 384) + ((384 * i) / (n文字数 / 2)), nオブジェクト数値, nオブジェクト数値, tmpチャンネル番号);\r
-\r
-                               // 楽器パートの決定\r
-                               chip.DecideInstrumentPart();\r
-\r
-                               // チップがある更新\r
-                               this.bチップがある.Drums |= chip.bDrums可視チップ;\r
-                               this.bチップがある.HHOpen |= chip[EChannel.HiHatOpen];\r
-                               this.bチップがある.Ride |= chip[EChannel.RideCymbal];\r
-                               this.bチップがある.LeftCymbal |= chip[EChannel.LeftCymbal];\r
-                               this.bチップがある.LeftPedal |= chip[EChannel.LeftPedal];\r
-                               this.bチップがある.LeftBassDrum |= chip[EChannel.LeftBassDrum];\r
-                               this.bチップがある.Guitar |= chip.bGuitar可視チップ;\r
-                               this.bチップがある.OpenGuitar |= chip[EChannel.Guitar_Open];\r
-                               this.bチップがある.Bass |= chip.bBass可視チップ;\r
-                               this.bチップがある.OpenBass |= chip[EChannel.Bass_Open];\r
-                               this.bチップがある.BGA |= chip.bBGALayer;\r
-                               this.bチップがある.Movie |= chip.bMovie;\r
-                               if (chip.bMovie)\r
-                               {\r
-                                       if (chip[EChannel.MovieFull] || CDTXMania.Instance.ConfigIni.bFullAVI)\r
-                                       {\r
-                                               this.bMovieをFullscreen再生する = true;\r
-                                       }\r
-                               }\r
-\r
-                               // 空打ちチップを変換する。\r
-                               chip.ConvertNoChip();\r
-\r
-                               // 無限管理オブジェクトインデックスの割当。(もしそのチップが対象であれば)\r
-                               chip.AssignInfiniteManageWAV(this.n無限管理WAV[nオブジェクト数値]);\r
-                               chip.AssignInfiniteManageBPM(this.n無限管理BPM[nオブジェクト数値]);\r
-                               chip.AdjustPlayPositionForFillin(nオブジェクト数値);\r
-\r
-                               // チップを配置。\r
-                               this.listChip.Add(chip);\r
-                       }\r
-                       return true;\r
-               }\r
-       }\r
-}\r