OSDN Git Service

6cef230160ef3824dc1bc7b8ca1e95e7a8a9df1e
[dtxmania/dtxmania.git] / DTXCreatorプロジェクト / コード / 00.全体 / CDTX入出力.cs
1 using System;\r
2 using System.Collections;\r
3 using System.Collections.Generic;\r
4 using System.Globalization;\r
5 using System.Text;\r
6 using System.IO;\r
7 using System.Windows.Forms;\r
8 using System.Drawing;\r
9 using DTXCreator.Properties;\r
10 using DTXCreator.譜面;\r
11 using DTXCreator.UndoRedo;\r
12 using DTXCreator.WAV_BMP_AVI;\r
13 using FDK;\r
14 using System.Diagnostics;\r
15 \r
16 namespace DTXCreator\r
17 {\r
18         internal class CDTX入出力\r
19         {\r
20                 internal CDTX入出力( Cメインフォーム mf )\r
21                 {\r
22                         this._Form = mf;\r
23                 }\r
24                 public void tDTX出力( StreamWriter sw )\r
25                 {\r
26                         this.tDTX出力( sw, false );\r
27                 }\r
28                 public void tDTX出力( StreamWriter sw, bool bBGMのみ出力 )\r
29                 {\r
30                         sw.WriteLine( "; Created by DTXCreator " + Resources.DTXC_VERSION );\r
31                         this.tDTX出力・タイトルと製作者とコメントその他( sw );\r
32                         this.tDTX出力・自由入力欄( sw );\r
33                         this.tDTX出力・WAVリスト( sw, bBGMのみ出力 );\r
34                         this.tDTX出力・BMPリスト( sw );\r
35                         this.tDTX出力・AVIリスト( sw );\r
36                         this.tDTX出力・小節長倍率( sw );\r
37                         this.tDTX出力・BPxリスト( sw );\r
38                         this.tDTX出力・全チップ( sw );\r
39                         sw.WriteLine();\r
40                         this.tDTX出力・レーン割付チップ( sw );\r
41                         this.tDTX出力・WAVリスト色設定( sw );\r
42                         this.tDTX出力・BMPリスト色設定( sw );\r
43                         this.tDTX出力・AVIリスト色設定( sw );\r
44                         this.tDTX出力・チップパレット( sw );\r
45                 }\r
46                 public void tDTX入力( E種別 e種別, ref string str全入力文字列 )\r
47                 {\r
48                         this.e種別 = e種別;\r
49                         if( str全入力文字列.Length != 0 )\r
50                         {\r
51                                 this.dic小節長倍率 = new Dictionary<int, float>();\r
52                                 this.listチップパレット = new List<int>();\r
53                                 this.nBGMWAV番号 = -1;\r
54                                 this.nLastBarConverted = -1;\r
55                                 this.eDTXbgmChs = DTXbgmChs.GetEnumerator();\r
56                                 this._Form.listViewWAVリスト.BeginUpdate();\r
57                                 this._Form.listViewBMPリスト.BeginUpdate();\r
58                                 this._Form.listViewAVIリスト.BeginUpdate();\r
59                                 str全入力文字列 = str全入力文字列.Replace( Environment.NewLine, "\n" );\r
60                                 str全入力文字列 = str全入力文字列.Replace( '\t', ' ' );\r
61                                 StringBuilder builder = new StringBuilder();\r
62                                 CharEnumerator ce = str全入力文字列.GetEnumerator();\r
63                                 if( ce.MoveNext() )\r
64                                 {\r
65                                         do\r
66                                         {\r
67                                                 if( !this.tDTX入力・空白と改行をスキップする( ref ce ) )\r
68                                                 {\r
69                                                         break;\r
70                                                 }\r
71                                                 if( ce.Current == '#' )\r
72                                                 {\r
73                                                         if( ce.MoveNext() )\r
74                                                         {\r
75                                                                 StringBuilder builder2 = new StringBuilder( 0x20 );\r
76                                                                 if( this.tDTX入力・コマンド文字列を抜き出す( ref ce, ref builder2 ) )\r
77                                                                 {\r
78                                                                         StringBuilder builder3 = new StringBuilder( 0x400 );\r
79                                                                         if( this.tDTX入力・パラメータ文字列を抜き出す( ref ce, ref builder3 ) )\r
80                                                                         {\r
81                                                                                 StringBuilder builder4 = new StringBuilder( 0x400 );\r
82                                                                                 if( this.tDTX入力・コメント文字列を抜き出す( ref ce, ref builder4 ) )\r
83                                                                                 {\r
84                                                                                         if( !this.tDTX入力・行解析( ref builder2, ref builder3, ref builder4 ) )\r
85                                                                                         {\r
86                                                                                                 builder.Append( string.Concat( new object[] { "#", builder2, ": ", builder3 } ) );\r
87                                                                                                 if( builder4.Length > 0 )\r
88                                                                                                 {\r
89                                                                                                         builder.Append( "\t;" + builder4 );\r
90                                                                                                 }\r
91                                                                                                 builder.Append( Environment.NewLine );\r
92                                                                                         }\r
93                                                                                         continue;\r
94                                                                                 }\r
95                                                                         }\r
96                                                                 }\r
97                                                         }\r
98                                                         break;\r
99                                                 }\r
100                                         }\r
101                                         while( this.tDTX入力・コメントをスキップする( ref ce ) );\r
102                                         CUndoRedo管理.bUndoRedoした直後 = true;\r
103                                         this._Form.textBox自由入力欄.Text = this._Form.textBox自由入力欄.Text + builder.ToString();\r
104                                         this.tDTX入力・小節内のチップリストを発声位置でソートする();\r
105                                         this.tDTX入力・小節長倍率配列を昇順ソート済みの小節リストに適用する();\r
106                                         this.tDTX入力・BPMチップにBPx数値をバインドする();\r
107                                         this.tDTX入力・キャッシュからListViewを一括構築する();\r
108                                         this.tDTX入力・チップパレットのListViewを一括構築する();\r
109                                         if( this.nBGMWAV番号 >= 0 )\r
110                                         {\r
111                                                 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( this.nBGMWAV番号 ).bBGMとして使用 = true;\r
112                                         }\r
113                                         this._Form.listViewWAVリスト.EndUpdate();\r
114                                         this._Form.listViewBMPリスト.EndUpdate();\r
115                                         this._Form.listViewAVIリスト.EndUpdate();\r
116                                 }\r
117                         }\r
118                 }\r
119 \r
120                 public enum E種別\r
121                 {\r
122                         DTX,\r
123                         GDA,\r
124                         G2D,\r
125                         BMS,\r
126                         BME\r
127                 }\r
128 \r
129                 #region [ private ]\r
130                 //-----------------\r
131                 private Cメインフォーム _Form;\r
132                 private int[] arr素数リスト = new int[] {\r
133                         2, 3, 5, 7, 11, 13, 0x11, 0x13, 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b, 0x2f, 0x35, \r
134                         0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59, 0x61, 0x65, 0x67, 0x6b, 0x6d, 0x71, 0x7f, 0x83, \r
135                         0x89, 0x8b, 0x95, 0x97, 0x9d, 0xa3, 0xa7, 0xad, 0xb3, 0xb5, 0xbf, 0xc1, 0xc5, 0xc7, 0xd3, 0xdf, \r
136                         0xe3, 0xe5, 0xe9, 0xef, 0xf1, 0xfb, 0x101, 0x107, 0x10d, 0x10f, 0x115, 0x119, 0x11b, 0x125, 0x133, 0x137, \r
137                         0x139, 0x13d, 0x14b, 0x151, 0x15b, 0x15d, 0x161, 0x167, 0x16f, 0x175, 0x17b, 0x17f\r
138                 };\r
139 #region [ #25990; for BMS/BME to DTX conversion ]\r
140                 // #25990 2011.8.12 yyagi: DTXのBGM用ch群(正確には効果音用ch群)\r
141                 private readonly int[] DTXbgmChs = new int[] {\r
142                               0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,\r
143                         0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,\r
144                         0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,\r
145                         0x90, 0x91, 0x92\r
146                 };\r
147                 // #25990 2011.8.12 yyagi: BMS/BME→DTX チャネル変換テーブル(BGMとキーを除いて、右から左にそのまま変換)\r
148                 private readonly int[] BMSgeneralChToDTXgeneralCh = {\r
149                         0x00, -1,   0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,\r
150                         0x10, -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\r
151                         0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,\r
152                         0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,\r
153                         0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,\r
154                         0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,\r
155                         0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,\r
156                         0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\r
157                         0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,\r
158                         0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,\r
159                         0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,\r
160                         0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,\r
161                         0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,\r
162                         0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,\r
163                         0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,\r
164                         0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF\r
165                 };\r
166                 // #25990 2011.8.12 yyagi: BMS→DTXの、キー関係の変換表 (5鍵ならHH~LTとCYを使用)\r
167                 private readonly int[] BMSkeyChToDTXdrumsCh = {\r
168                 //      1key    2key,   3key,   4key,   5key,   scr,    free\r
169                         0x11,   0x12,   0x13,   0x14,   0x15,   0x16,   0x53\r
170                 //      HC,             SD,             BD,             HT,             LT,             CY,             FI\r
171                 };\r
172                 // #25990 2011.8.12 yyagi: BME→DTXの、キー関係の変換表 (7鍵ならLC~FTとCYを使用)\r
173                 private readonly int[] BMEkeyChToDTXdrumsCh = {\r
174                 //      1key    2key,   3key,   4key,   5key,   scr,    free,   6key,   7key\r
175                         0x1A,   0x11,   0x12,   0x13,   0x14,   0x16,   0x53,   0x15,   0x17\r
176                 //      LC,             HC,             SD,             BD,             HT,             CY,             FI,             LT,             FT\r
177                 };\r
178                 private int nLastBarConverted = -1;     // #25990 2011.8.12 yyagi BMS/BME→DTX変換用\r
179                 private IEnumerator eDTXbgmChs;                 // #25990 2011.8.12 yyagi BMS/BME→DTX変換用\r
180 #endregion\r
181                 private Dictionary<int, float> dic小節長倍率;\r
182                 private E種別 e種別;\r
183                 private List<int> listチップパレット;\r
184                 private int nBGMWAV番号 = -1;\r
185                 \r
186                 private void tDTX入力・BPMチップにBPx数値をバインドする()\r
187                 {\r
188                         foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
189                         {\r
190                                 C小節 c小節 = pair.Value;\r
191                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
192                                 {\r
193                                         Cチップ cチップ = c小節.listチップ[ i ];\r
194                                         float num2 = 0f;\r
195                                         if( ( cチップ.nチャンネル番号00toFF == 8 ) && this._Form.mgr譜面管理者.dicBPx.TryGetValue( cチップ.n値・整数1to1295, out num2 ) )\r
196                                         {\r
197                                                 cチップ.f値・浮動小数 = num2;\r
198                                         }\r
199                                         if( cチップ.nチャンネル番号00toFF == 3 )\r
200                                         {\r
201                                                 cチップ.nチャンネル番号00toFF = 8;\r
202                                                 cチップ.f値・浮動小数 = cチップ.n値・整数1to1295;\r
203                                                 cチップ.b裏 = false;\r
204                                                 for( int j = 1; j <= 36 * 36 - 1; j++ )\r
205                                                 {\r
206                                                         if( !this._Form.mgr譜面管理者.dicBPx.ContainsKey( j ) )\r
207                                                         {\r
208                                                                 this._Form.mgr譜面管理者.dicBPx.Add( j, cチップ.f値・浮動小数 );\r
209                                                                 cチップ.n値・整数1to1295 = j;\r
210                                                                 break;\r
211                                                         }\r
212                                                 }\r
213                                         }\r
214                                 }\r
215                         }\r
216                 }\r
217                 private void tDTX入力・キャッシュからListViewを一括構築する()\r
218                 {\r
219                         for( int i = 1; i <= 36 * 36 - 1; i++ )\r
220                         {\r
221                                 CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );\r
222                                 if( cwav != null )\r
223                                 {\r
224                                         cwav.tコピーto( this._Form.listViewWAVリスト.Items[ i - 1 ] );\r
225                                 }\r
226                                 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );\r
227                                 if( cbmp != null )\r
228                                 {\r
229                                         cbmp.tコピーto( this._Form.listViewBMPリスト.Items[ i - 1 ] );\r
230                                 }\r
231                                 CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );\r
232                                 if( cavi != null )\r
233                                 {\r
234                                         cavi.tコピーto( this._Form.listViewAVIリスト.Items[ i - 1 ] );\r
235                                 }\r
236                         }\r
237                 }\r
238                 private bool tDTX入力・コマンド文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
239                 {\r
240                         if( this.tDTX入力・空白をスキップする( ref ce ) )\r
241                         {\r
242                                 while( ( ( ce.Current != ':' ) && ( ce.Current != ' ' ) ) && ( ( ce.Current != ';' ) && ( ce.Current != '\n' ) ) )\r
243                                 {\r
244                                         sb文字列.Append( ce.Current );\r
245                                         if( !ce.MoveNext() )\r
246                                         {\r
247                                                 return false;\r
248                                         }\r
249                                 }\r
250                                 if( ce.Current == ':' )\r
251                                 {\r
252                                         if( !ce.MoveNext() )\r
253                                         {\r
254                                                 return false;\r
255                                         }\r
256                                         if( !this.tDTX入力・空白をスキップする( ref ce ) )\r
257                                         {\r
258                                                 return false;\r
259                                         }\r
260                                 }\r
261                                 return true;\r
262                         }\r
263                         return false;\r
264                 }\r
265                 private bool tDTX入力・コメントをスキップする( ref CharEnumerator ce )\r
266                 {\r
267                         while( ce.Current != '\n' )\r
268                         {\r
269                                 if( !ce.MoveNext() )\r
270                                 {\r
271                                         return false;\r
272                                 }\r
273                         }\r
274                         return ce.MoveNext();\r
275                 }\r
276                 private bool tDTX入力・コメント文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
277                 {\r
278                         if( ce.Current != ';' )\r
279                         {\r
280                                 return true;\r
281                         }\r
282                         if( ce.MoveNext() )\r
283                         {\r
284                                 while( ce.Current != '\n' )\r
285                                 {\r
286                                         sb文字列.Append( ce.Current );\r
287                                         if( !ce.MoveNext() )\r
288                                         {\r
289                                                 return false;\r
290                                         }\r
291                                 }\r
292                                 return true;\r
293                         }\r
294                         return false;\r
295                 }\r
296                 private void tDTX入力・チップパレットのListViewを一括構築する()\r
297                 {\r
298                         for( int i = 0; i < ( this.listチップパレット.Count / 2 ); i += 2 )\r
299                         {\r
300                                 int num2 = this.listチップパレット[ i * 2 ];\r
301                                 int num3 = this.listチップパレット[ ( i * 2 ) + 1 ];\r
302                                 string[] items = new string[ 3 ];\r
303                                 switch( num2 )\r
304                                 {\r
305                                         case 0:\r
306                                                 {\r
307                                                         CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( num3 );\r
308                                                         if( cwav != null )\r
309                                                         {\r
310                                                                 items[ 0 ] = cwav.strラベル名;\r
311                                                                 items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );\r
312                                                                 items[ 2 ] = cwav.strファイル名;\r
313                                                                 ListViewItem item = new ListViewItem( items );\r
314                                                                 item.ImageIndex = num2;\r
315                                                                 item.ForeColor = cwav.col文字色;\r
316                                                                 item.BackColor = cwav.col背景色;\r
317                                                                 this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item );\r
318                                                         }\r
319                                                         break;\r
320                                                 }\r
321                                         case 1:\r
322                                                 {\r
323                                                         CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( num3 );\r
324                                                         if( cbmp != null )\r
325                                                         {\r
326                                                                 items[ 0 ] = cbmp.strラベル名;\r
327                                                                 items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );\r
328                                                                 items[ 2 ] = cbmp.strファイル名;\r
329                                                                 ListViewItem item2 = new ListViewItem( items );\r
330                                                                 item2.ImageIndex = num2;\r
331                                                                 item2.ForeColor = cbmp.col文字色;\r
332                                                                 item2.BackColor = cbmp.col背景色;\r
333                                                                 this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item2 );\r
334                                                         }\r
335                                                         break;\r
336                                                 }\r
337                                         case 2:\r
338                                                 {\r
339                                                         CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( num3 );\r
340                                                         if( cavi != null )\r
341                                                         {\r
342                                                                 items[ 0 ] = cavi.strラベル名;\r
343                                                                 items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );\r
344                                                                 items[ 2 ] = cavi.strファイル名;\r
345                                                                 ListViewItem item3 = new ListViewItem( items );\r
346                                                                 item3.ImageIndex = num2;\r
347                                                                 item3.ForeColor = cavi.col文字色;\r
348                                                                 item3.BackColor = cavi.col背景色;\r
349                                                                 this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item3 );\r
350                                                         }\r
351                                                         break;\r
352                                                 }\r
353                                 }\r
354                         }\r
355                 }\r
356                 private bool tDTX入力・パラメータ文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
357                 {\r
358                         if( this.tDTX入力・空白をスキップする( ref ce ) )\r
359                         {\r
360                                 while( ( ce.Current != '\n' ) && ( ce.Current != ';' ) )\r
361                                 {\r
362                                         sb文字列.Append( ce.Current );\r
363                                         if( !ce.MoveNext() )\r
364                                         {\r
365                                                 return false;\r
366                                         }\r
367                                 }\r
368                                 return true;\r
369                         }\r
370                         return false;\r
371                 }\r
372                 private bool tDTX入力・空白と改行をスキップする( ref CharEnumerator ce )\r
373                 {\r
374                         while( ( ce.Current == ' ' ) || ( ce.Current == '\n' ) )\r
375                         {\r
376                                 if( !ce.MoveNext() )\r
377                                 {\r
378                                         return false;\r
379                                 }\r
380                         }\r
381                         return true;\r
382                 }\r
383                 private bool tDTX入力・空白をスキップする( ref CharEnumerator ce )\r
384                 {\r
385                         while( ce.Current == ' ' )\r
386                         {\r
387                                 if( !ce.MoveNext() )\r
388                                 {\r
389                                         return false;\r
390                                 }\r
391                         }\r
392                         return true;\r
393                 }\r
394                 private bool tDTX入力・行解析( ref StringBuilder sbコマンド, ref StringBuilder sbパラメータ, ref StringBuilder sbコメント )\r
395                 {\r
396                         string str = sbコマンド.ToString();\r
397                         string str2 = sbパラメータ.ToString().Trim();\r
398                         string str3 = sbコメント.ToString();\r
399                         return ( this.tDTX入力・行解析・TITLE_ARTIST_COMMENT_その他( str, str2, str3 ) || ( this.tDTX入力・行解析・WAVVOL_VOLUME( str, str2, str3 ) || ( this.tDTX入力・行解析・WAVPAN_PAN( str, str2, str3 ) || ( this.tDTX入力・行解析・WAV( str, str2, str3 ) || ( this.tDTX入力・行解析・BGMWAV( str, str2, str3 ) || ( this.tDTX入力・行解析・BMPTEX( str, str2, str3 ) || ( this.tDTX入力・行解析・BMP( str, str2, str3 ) || ( this.tDTX入力・行解析・AVI_AVIPAN( str, str2, str3 ) || ( this.tDTX入力・行解析・BPx( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_LANEBINDEDCHIP( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_WAVFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_WAVBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_BMPFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_BMPBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_AVIFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_AVIBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_CHIPPALETTE( str, str2, str3 ) || this.tDTX入力・行解析・チャンネル( str, str2, str3 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) );\r
400                 }\r
401                 private bool tDTX入力・行解析・AVI_AVIPAN( string strコマンド, string strパラメータ, string strコメント )\r
402                 {\r
403                         if( !strコマンド.StartsWith( "AVIPAN", StringComparison.OrdinalIgnoreCase ) && strコマンド.StartsWith( "AVI", StringComparison.OrdinalIgnoreCase ) )\r
404                         {\r
405                                 strコマンド = strコマンド.Substring( 3 );\r
406                         }\r
407                         else\r
408                         {\r
409                                 return false;\r
410                         }\r
411                         int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
412                         if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )\r
413                         {\r
414                                 return false;\r
415                         }\r
416                         CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( num );\r
417                         cavi.strラベル名 = strコメント;\r
418                         cavi.strファイル名 = strパラメータ;\r
419                         return true;\r
420                 }\r
421                 private bool tDTX入力・行解析・BGMWAV( string strコマンド, string strパラメータ, string strコメント )\r
422                 {\r
423                         if( strコマンド.StartsWith( "bgmwav", StringComparison.OrdinalIgnoreCase ) )\r
424                         {\r
425                                 strコマンド = strコマンド.Substring( 6 );\r
426                         }\r
427                         else\r
428                         {\r
429                                 return false;\r
430                         }\r
431                         int num = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 0, 2 ) );\r
432                         if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )\r
433                         {\r
434                                 return false;\r
435                         }\r
436                         this.nBGMWAV番号 = num;\r
437                         return true;\r
438                 }\r
439                 private bool tDTX入力・行解析・BMP( string strコマンド, string strパラメータ, string strコメント )\r
440                 {\r
441                         if( ( strコマンド.Length > 3 ) && strコマンド.StartsWith( "BMP", StringComparison.OrdinalIgnoreCase ) )\r
442                         {\r
443                                 strコマンド = strコマンド.Substring( 3 );\r
444                         }\r
445                         else\r
446                         {\r
447                                 return false;\r
448                         }\r
449                         int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
450                         if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )\r
451                         {\r
452                                 return false;\r
453                         }\r
454                         CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( num );\r
455                         cbmp.strラベル名 = strコメント;\r
456                         cbmp.strファイル名 = strパラメータ;\r
457                         cbmp.bテクスチャ = false;\r
458                         return true;\r
459                 }\r
460                 private bool tDTX入力・行解析・BMPTEX( string strコマンド, string strパラメータ, string strコメント )\r
461                 {\r
462                         if( strコマンド.StartsWith( "BMPTEX", StringComparison.OrdinalIgnoreCase ) )\r
463                         {\r
464                                 strコマンド = strコマンド.Substring( 6 );\r
465                         }\r
466                         else\r
467                         {\r
468                                 return false;\r
469                         }\r
470                         int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
471                         if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )\r
472                         {\r
473                                 return false;\r
474                         }\r
475                         CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( num );\r
476                         cbmp.strラベル名 = strコメント;\r
477                         cbmp.strファイル名 = strパラメータ;\r
478                         cbmp.bテクスチャ = true;\r
479                         return true;\r
480                 }\r
481                 private bool tDTX入力・行解析・BPx( string strコマンド, string strパラメータ, string strコメント )\r
482                 {\r
483                         if( strコマンド.StartsWith( "BPM", StringComparison.OrdinalIgnoreCase ) )\r
484                         {\r
485                                 strコマンド = strコマンド.Substring( 3 );\r
486                         }\r
487                         else\r
488                         {\r
489                                 return false;\r
490                         }\r
491                         int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
492                         if( ( key < 1 ) || ( key > 36 * 36 - 1 ) )\r
493                         {\r
494                                 return false;\r
495                         }\r
496                         decimal result = 0;\r
497                         if( ( !this.TryParse( strパラメータ, out result ) || ( result < 0 ) ) || ( result > 1000 ) )               // #23880 2011.1.6 yyagi\r
498                         {\r
499                                 return false;\r
500                         }\r
501                         this._Form.mgr譜面管理者.dicBPx.Add(key, (float)result);\r
502                         return true;\r
503                 }\r
504                 private bool tDTX入力・行解析・DTXC_AVIBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )\r
505                 {\r
506                         int nChipNo;\r
507                         if( !strコマンド.Equals( "DTXC_AVIBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
508                         {\r
509                                 return false;\r
510                         }\r
511                         string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
512                         if( strArray.Length < 2 )\r
513                         {\r
514                                 return false;\r
515                         }\r
516                         if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
517                         {\r
518                                 return false;\r
519                         }\r
520                         if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
521                         {\r
522                                 return false;\r
523                         }\r
524                         Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
525                         if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
526                         {\r
527                                 this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col背景色 = color;\r
528                         }\r
529                         return true;\r
530                 }\r
531                 private bool tDTX入力・行解析・DTXC_AVIFORECOLOR( string strコマンド, string strパラメータ, string strコメント )\r
532                 {\r
533                         int nChipNo;\r
534                         if( !strコマンド.Equals( "DTXC_AVIFORECOLOR", StringComparison.OrdinalIgnoreCase ) )\r
535                         {\r
536                                 return false;\r
537                         }\r
538                         string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
539                         if( strArray.Length < 2 )\r
540                         {\r
541                                 return false;\r
542                         }\r
543                         if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
544                         {\r
545                                 return false;\r
546                         }\r
547                         if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
548                         {\r
549                                 return false;\r
550                         }\r
551                         Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
552                         if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
553                         {\r
554                                 this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col文字色 = color;\r
555                         }\r
556                         return true;\r
557                 }\r
558                 private bool tDTX入力・行解析・DTXC_BMPBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )\r
559                 {\r
560                         int nChipNo;\r
561                         if( !strコマンド.Equals( "DTXC_BMPBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
562                         {\r
563                                 return false;\r
564                         }\r
565                         string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
566                         if( strArray.Length < 2 )\r
567                         {\r
568                                 return false;\r
569                         }\r
570                         if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
571                         {\r
572                                 return false;\r
573                         }\r
574                         if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
575                         {\r
576                                 return false;\r
577                         }\r
578                         Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
579                         if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
580                         {\r
581                                 this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col背景色 = color;\r
582                         }\r
583                         return true;\r
584                 }\r
585                 private bool tDTX入力・行解析・DTXC_BMPFORECOLOR( string strコマンド, string strパラメータ, string strコメント )\r
586                 {\r
587                         int nChipNo;\r
588                         if( !strコマンド.Equals( "DTXC_BMPFORECOLOR", StringComparison.OrdinalIgnoreCase ) )\r
589                         {\r
590                                 return false;\r
591                         }\r
592                         string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
593                         if( strArray.Length < 2 )\r
594                         {\r
595                                 return false;\r
596                         }\r
597                         if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
598                         {\r
599                                 return false;\r
600                         }\r
601                         if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
602                         {\r
603                                 return false;\r
604                         }\r
605                         Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
606                         if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
607                         {\r
608                                 this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col文字色 = color;\r
609                         }\r
610                         return true;\r
611                 }\r
612                 private bool tDTX入力・行解析・DTXC_CHIPPALETTE( string strコマンド, string strパラメータ, string strコメント )\r
613                 {\r
614                         if( !strコマンド.Equals( "DTXC_CHIPPALETTE", StringComparison.OrdinalIgnoreCase ) )\r
615                         {\r
616                                 return false;\r
617                         }\r
618                         foreach( string str in strパラメータ.Split( new char[] { ' ' } ) )\r
619                         {\r
620                                 int num;\r
621                                 string[] strArray2 = str.Split( new char[] { ',' } );\r
622                                 if( ( ( strArray2.Length == 2 ) && int.TryParse( strArray2[ 0 ], out num ) ) && ( ( num >= 0 ) && ( num <= 2 ) ) )\r
623                                 {\r
624                                         int item = C変換.n36進数2桁の文字列を数値に変換して返す( strArray2[ 1 ] );\r
625                                         if( ( item >= 1 ) && ( item <= 36 * 36 - 1 ) )\r
626                                         {\r
627                                                 this.listチップパレット.Add( num );\r
628                                                 this.listチップパレット.Add( item );\r
629                                         }\r
630                                 }\r
631                         }\r
632                         return true;\r
633                 }\r
634                 private bool tDTX入力・行解析・DTXC_LANEBINDEDCHIP( string strコマンド, string strパラメータ, string strコメント )\r
635                 {\r
636                         if( strコマンド.Equals( "DTXC_LANEBINDEDCHIP", StringComparison.OrdinalIgnoreCase ) && ( strパラメータ.Length == 8 ) )\r
637                         {\r
638                                 int nLaneNo;\r
639                                 if( !int.TryParse( strパラメータ.Substring( 0, 2 ), out nLaneNo ) )\r
640                                 {\r
641                                         return false;\r
642                                 }\r
643                                 int nChipNoFore = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 3, 2 ) );\r
644                                 if( ( nChipNoFore < 0 ) || ( nChipNoFore > 36 * 36 - 1 ) )\r
645                                 {\r
646                                         return false;\r
647                                 }\r
648                                 int nChipNoBack = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 6, 2 ) );\r
649                                 if( ( nChipNoBack < 0 ) || ( nChipNoBack > 36 * 36 - 1 ) )\r
650                                 {\r
651                                         return false;\r
652                                 }\r
653                                 if( ( nLaneNo >= 0 ) && ( nLaneNo < this._Form.mgr譜面管理者.listレーン.Count ) )\r
654                                 {\r
655                                         if( nChipNoFore != 0 )\r
656                                         {\r
657                                                 this._Form.mgr譜面管理者.listレーン[ nLaneNo ].nレーン割付チップ・表0or1to1295 = nChipNoFore;\r
658                                         }\r
659                                         if( nChipNoBack != 0 )\r
660                                         {\r
661                                                 this._Form.mgr譜面管理者.listレーン[ nLaneNo ].nレーン割付チップ・裏0or1to1295 = nChipNoBack;\r
662                                         }\r
663                                         return true;\r
664                                 }\r
665                         }\r
666                         return false;\r
667                 }\r
668                 private bool tDTX入力・行解析・DTXC_WAVBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )\r
669                 {\r
670                         int nChipNo;\r
671                         if( !strコマンド.Equals( "DTXC_WAVBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
672                         {\r
673                                 return false;\r
674                         }\r
675                         string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
676                         if( strArray.Length < 2 )\r
677                         {\r
678                                 return false;\r
679                         }\r
680                         if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
681                         {\r
682                                 return false;\r
683                         }\r
684                         if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
685                         {\r
686                                 return false;\r
687                         }\r
688                         Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
689                         if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
690                         {\r
691                                 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col背景色 = color;\r
692                         }\r
693                         return true;\r
694                 }\r
695                 private bool tDTX入力・行解析・DTXC_WAVFORECOLOR( string strコマンド, string strパラメータ, string strコメント )\r
696                 {\r
697                         int nChipNo;\r
698                         if( !strコマンド.Equals( "DTXC_WAVFORECOLOR", StringComparison.OrdinalIgnoreCase ) )\r
699                         {\r
700                                 return false;\r
701                         }\r
702                         string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
703                         if( strArray.Length < 2 )\r
704                         {\r
705                                 return false;\r
706                         }\r
707                         if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
708                         {\r
709                                 return false;\r
710                         }\r
711                         if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
712                         {\r
713                                 return false;\r
714                         }\r
715                         Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
716                         if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
717                         {\r
718                                 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col文字色 = color;\r
719                         }\r
720                         return true;\r
721                 }\r
722                 private bool tDTX入力・行解析・TITLE_ARTIST_COMMENT_その他( string strコマンド, string strパラメータ, string strコメント )\r
723                 {\r
724                         if( strコマンド.Equals( "TITLE", StringComparison.OrdinalIgnoreCase ) )\r
725                         {\r
726                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
727                                 this._Form.textBox曲名.Text = strパラメータ.Trim();\r
728                                 return true;\r
729                         }\r
730                         if( strコマンド.Equals( "ARTIST", StringComparison.OrdinalIgnoreCase ) )\r
731                         {\r
732                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
733                                 this._Form.textBox製作者.Text = strパラメータ.Trim();\r
734                                 return true;\r
735                         }\r
736                         if( strコマンド.Equals( "COMMENT", StringComparison.OrdinalIgnoreCase ) )\r
737                         {\r
738                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
739                                 this._Form.textBoxコメント.Text = strパラメータ.Trim();\r
740                                 return true;\r
741                         }\r
742                         if( strコマンド.Equals( "PANEL", StringComparison.OrdinalIgnoreCase ) )\r
743                         {\r
744                                 int dummyResult;                                                                // #23885, #26007 2011.8.13 yyagi: not to confuse "#PANEL strings (panel)" and "#PANEL int (panpot of EL)"\r
745                                 if ( !int.TryParse( strパラメータ, out dummyResult ) )     // 数値じゃないならPANELとみなす\r
746                                 {\r
747                                         CUndoRedo管理.bUndoRedoした直後 = true;\r
748                                         this._Form.textBoxパネル.Text = strパラメータ.Trim();\r
749                                         return true;\r
750                                 }                                                                                               // 数値なら、ここでは何もせず、後で#PANに拾ってもらう (PAN ELとみなす)\r
751                         }\r
752                         if( strコマンド.Equals( "PREVIEW", StringComparison.OrdinalIgnoreCase ) )\r
753                         {\r
754                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
755                                 this._Form.textBoxPREVIEW.Text = strパラメータ.Trim();\r
756                                 return true;\r
757                         }\r
758                         if( strコマンド.Equals( "PREIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
759                         {\r
760                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
761                                 this._Form.textBoxPREIMAGE.Text = strパラメータ.Trim();\r
762                                 return true;\r
763                         }\r
764                         if( strコマンド.Equals( "STAGEFILE", StringComparison.OrdinalIgnoreCase ) )\r
765                         {\r
766                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
767                                 this._Form.textBoxSTAGEFILE.Text = strパラメータ.Trim();\r
768                                 return true;\r
769                         }\r
770                         if( strコマンド.Equals( "BACKGROUND", StringComparison.OrdinalIgnoreCase ) || strコマンド.Equals( "WALL", StringComparison.OrdinalIgnoreCase ) )\r
771                         {\r
772                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
773                                 this._Form.textBoxBACKGROUND.Text = strパラメータ.Trim();\r
774                                 return true;\r
775                         }\r
776                         if( strコマンド.Equals( "RESULTIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
777                         {\r
778                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
779                                 this._Form.textBoxRESULTIMAGE.Text = strパラメータ.Trim();\r
780                                 return true;\r
781                         }\r
782                         if( strコマンド.Equals( "BPM", StringComparison.OrdinalIgnoreCase ) )\r
783                         {\r
784                                 decimal dBpm;\r
785                                 if( !this.TryParse( strパラメータ, out dBpm ) )            // #23880 2011.1.6 yyagi\r
786                                 {\r
787                                         dBpm = 120.0M;\r
788                                 }\r
789                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
790                                 this._Form.numericUpDownBPM.Value = dBpm;\r
791                                 return true;\r
792                         }\r
793                         if( strコマンド.Equals( "DLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
794                         {\r
795                                 int nLevel;\r
796                                 if( !int.TryParse( strパラメータ, out nLevel ) )\r
797                                 {\r
798                                         nLevel = 0;\r
799                                 }\r
800                                 else if( nLevel < 0 )\r
801                                 {\r
802                                         nLevel = 0;\r
803                                 }\r
804                                 else if( nLevel > 100 )\r
805                                 {\r
806                                         nLevel = 100;\r
807                                 }\r
808                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
809                                 this._Form.hScrollBarDLEVEL.Value = nLevel;\r
810                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
811                                 this._Form.textBoxDLEVEL.Text = nLevel.ToString();\r
812                                 return true;\r
813                         }\r
814                         if( strコマンド.Equals( "GLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
815                         {\r
816                                 int nLevel;\r
817                                 if( !int.TryParse( strパラメータ, out nLevel ) )\r
818                                 {\r
819                                         nLevel = 0;\r
820                                 }\r
821                                 else if( nLevel < 0 )\r
822                                 {\r
823                                         nLevel = 0;\r
824                                 }\r
825                                 else if( nLevel > 100 )\r
826                                 {\r
827                                         nLevel = 100;\r
828                                 }\r
829                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
830                                 this._Form.hScrollBarGLEVEL.Value = nLevel;\r
831                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
832                                 this._Form.textBoxGLEVEL.Text = nLevel.ToString();\r
833                                 return true;\r
834                         }\r
835                         if( strコマンド.Equals( "BLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
836                         {\r
837                                 int nLevel;\r
838                                 if( !int.TryParse( strパラメータ, out nLevel ) )\r
839                                 {\r
840                                         nLevel = 0;\r
841                                 }\r
842                                 else if( nLevel < 0 )\r
843                                 {\r
844                                         nLevel = 0;\r
845                                 }\r
846                                 else if( nLevel > 100 )\r
847                                 {\r
848                                         nLevel = 100;\r
849                                 }\r
850                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
851                                 this._Form.hScrollBarBLEVEL.Value = nLevel;\r
852                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
853                                 this._Form.textBoxBLEVEL.Text = nLevel.ToString();\r
854                                 return true;\r
855                         }\r
856                         if( strコマンド.Equals( "DTXVPLAYSPEED", StringComparison.OrdinalIgnoreCase ) )\r
857                         {\r
858                                 decimal dPlaySpeed;\r
859 //                              if ( !this.TryParse( strパラメータ, out num5 ) )           // #24790 2011.4.8 yyagi\r
860                                 if ( !decimal.TryParse( strパラメータ, out dPlaySpeed ) )          // #24790 2011.4.8 yyagi\r
861                                 {\r
862                                         dPlaySpeed = 0M;\r
863                                 }\r
864                                 else if( dPlaySpeed < 0.5M )\r
865                                 {\r
866                                         dPlaySpeed = 0.5M;\r
867                                 }\r
868                                 else if( dPlaySpeed > 1.5M )\r
869                                 {\r
870                                         dPlaySpeed = 1.5M;\r
871                                 }\r
872                                 decimal dIndex = ( 1.5M - dPlaySpeed ) * 10M;\r
873                                 int nIndex = (int) dIndex;\r
874                                 if( nIndex < 0 )\r
875                                 {\r
876                                         nIndex = 0;\r
877                                 }\r
878                                 else if( nIndex > 10 )\r
879                                 {\r
880                                         nIndex = 10;\r
881                                 }\r
882                                 CUndoRedo管理.bUndoRedoした直後 = true;\r
883                                 this._Form.toolStripComboBox演奏速度.SelectedIndex = nIndex;\r
884                                 return true;\r
885                         } else {\r
886                                 return false;\r
887                         }\r
888                 }\r
889                 private bool tDTX入力・行解析・WAV( string strコマンド, string strパラメータ, string strコメント )\r
890                 {\r
891                         if( strコマンド.StartsWith( "wav", StringComparison.OrdinalIgnoreCase ) )\r
892                         {\r
893                                 strコマンド = strコマンド.Substring( 3 );\r
894                         }\r
895                         else\r
896                         {\r
897                                 return false;\r
898                         }\r
899                         int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
900                         if( ( nChipNo < 1 ) || ( nChipNo > 36 * 36 - 1 ) )\r
901                         {\r
902                                 return false;\r
903                         }\r
904                         CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo );\r
905                         cwav.strラベル名 = strコメント;\r
906                         cwav.strファイル名 = strパラメータ;\r
907                         return true;\r
908                 }\r
909                 private bool tDTX入力・行解析・WAVPAN_PAN( string strコマンド, string strパラメータ, string strコメント )\r
910                 {\r
911                         int nPan;\r
912                         if( strコマンド.StartsWith( "WAVPAN", StringComparison.OrdinalIgnoreCase ) )\r
913                         {\r
914                                 strコマンド = strコマンド.Substring( 6 );\r
915                         }\r
916                         else if( strコマンド.StartsWith( "PAN", StringComparison.OrdinalIgnoreCase ) )\r
917                         {\r
918                                 strコマンド = strコマンド.Substring( 3 );\r
919                         }\r
920                         else\r
921                         {\r
922                                 return false;\r
923                         }\r
924                         if( strコマンド.Length < 2 )\r
925                         {\r
926                                 return false;\r
927                         }\r
928                         int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
929                         if( int.TryParse( strパラメータ, out nPan ) )\r
930                         {\r
931                                 if( nPan < -100 )\r
932                                 {\r
933                                         nPan = -100;\r
934                                 }\r
935                                 else if( nPan >= 100 )\r
936                                 {\r
937                                         nPan = 100;\r
938                                 }\r
939                                 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo ).n位置_100to100 = nPan;\r
940                         }\r
941                         return true;\r
942                 }\r
943                 private bool tDTX入力・行解析・WAVVOL_VOLUME( string strコマンド, string strパラメータ, string strコメント )\r
944                 {\r
945                         int nVol;\r
946                         if( strコマンド.StartsWith( "WAVVOL", StringComparison.OrdinalIgnoreCase ) )\r
947                         {\r
948                                 strコマンド = strコマンド.Substring( 6 );\r
949                         }\r
950                         else if( strコマンド.StartsWith( "VOLUME", StringComparison.OrdinalIgnoreCase ) )\r
951                         {\r
952                                 strコマンド = strコマンド.Substring( 6 );\r
953                         }\r
954                         else\r
955                         {\r
956                                 return false;\r
957                         }\r
958                         if( strコマンド.Length < 2 )\r
959                         {\r
960                                 return false;\r
961                         }\r
962                         int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
963                         if( int.TryParse( strパラメータ, out nVol ) )\r
964                         {\r
965                                 if( nVol < 0 )\r
966                                 {\r
967                                         nVol = 0;\r
968                                 }\r
969                                 else if( nVol >= 100 )\r
970                                 {\r
971                                         nVol = 100;\r
972                                 }\r
973                                 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo ).n音量0to100 = nVol;\r
974                         }\r
975                         return true;\r
976                 }\r
977                 private bool tDTX入力・行解析・チャンネル( string strコマンド, string strパラメータ, string strコメント )\r
978                 {\r
979                         int nBar, nCh;\r
980                         if( !this.tDTX入力・行解析・チャンネル・コマンドから小節番号とチャンネル番号を抜き出す( strコマンド, out nBar, out nCh ) )\r
981                         {\r
982                                 return false;\r
983                         }\r
984                         if( nCh == 2 )\r
985                         {\r
986                                 decimal dBarLength;\r
987                                 if( !this.TryParse( strパラメータ, out dBarLength ) )      // #23880 2011.1.6 yyagi\r
988                                 {\r
989                                         dBarLength = 1m;\r
990                                 }\r
991                                 this.dic小節長倍率.Add( nBar, (float)dBarLength );\r
992                                 return true;\r
993                         }\r
994                         if( ( nCh >= 0x20 ) && ( nCh <= 0x27 ) )\r
995                         {\r
996                                 C小節 c小節 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( nBar );\r
997                                 int startIndex = 0;\r
998                                 while( ( startIndex = strパラメータ.IndexOf( '_' ) ) != -1 )\r
999                                 {\r
1000                                         strパラメータ = strパラメータ.Remove( startIndex, 1 );\r
1001                                 }\r
1002                                 int nChips = strパラメータ.Length / 2;\r
1003                                 for( int i = 0; i < nChips; i++ )\r
1004                                 {\r
1005                                         int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
1006                                         if( nChipNo != 0 )\r
1007                                         {\r
1008                                                 int nLaneGtV = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtV" );\r
1009                                                 int nLaneGtR = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtR" );\r
1010                                                 int nLaneGtG = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtG" );\r
1011                                                 int nLaneGtB = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtB" );\r
1012                                                 Cチップ item = new Cチップ();\r
1013                                                 item.nレーン番号0to = nLaneGtV;\r
1014                                                 item.n位置grid = i;\r
1015                                                 item.n値・整数1to1295 = nChipNo;\r
1016                                                 item.n読み込み時の解像度 = nChips;\r
1017                                                 c小節.listチップ.Add( item );\r
1018                                                 switch( nCh )\r
1019                                                 {\r
1020                                                         case 0x20:\r
1021                                                                 item = new Cチップ();\r
1022                                                                 item.nレーン番号0to = nLaneGtR;\r
1023                                                                 item.n位置grid = i;\r
1024                                                                 item.n値・整数1to1295 = 2;\r
1025                                                                 item.n読み込み時の解像度 = nChips;\r
1026                                                                 c小節.listチップ.Add( item );\r
1027                                                                 break;\r
1028 \r
1029                                                         case 0x21:\r
1030                                                                 item = new Cチップ();\r
1031                                                                 item.nレーン番号0to = nLaneGtB;\r
1032                                                                 item.n位置grid = i;\r
1033                                                                 item.n値・整数1to1295 = 1;\r
1034                                                                 item.n読み込み時の解像度 = nChips;\r
1035                                                                 c小節.listチップ.Add( item );\r
1036                                                                 break;\r
1037 \r
1038                                                         case 0x22:\r
1039                                                                 item = new Cチップ();\r
1040                                                                 item.nレーン番号0to = nLaneGtG;\r
1041                                                                 item.n位置grid = i;\r
1042                                                                 item.n値・整数1to1295 = 1;\r
1043                                                                 item.n読み込み時の解像度 = nChips;\r
1044                                                                 c小節.listチップ.Add( item );\r
1045                                                                 break;\r
1046 \r
1047                                                         case 0x23:\r
1048                                                                 item = new Cチップ();\r
1049                                                                 item.nレーン番号0to = nLaneGtG;\r
1050                                                                 item.n位置grid = i;\r
1051                                                                 item.n値・整数1to1295 = 1;\r
1052                                                                 item.n読み込み時の解像度 = nChips;\r
1053                                                                 c小節.listチップ.Add( item );\r
1054                                                                 item = new Cチップ();\r
1055                                                                 item.nレーン番号0to = nLaneGtB;\r
1056                                                                 item.n位置grid = i;\r
1057                                                                 item.n値・整数1to1295 = 1;\r
1058                                                                 item.n読み込み時の解像度 = nChips;\r
1059                                                                 c小節.listチップ.Add( item );\r
1060                                                                 break;\r
1061 \r
1062                                                         case 0x24:\r
1063                                                                 item = new Cチップ();\r
1064                                                                 item.nレーン番号0to = nLaneGtR;\r
1065                                                                 item.n位置grid = i;\r
1066                                                                 item.n値・整数1to1295 = 1;\r
1067                                                                 item.n読み込み時の解像度 = nChips;\r
1068                                                                 c小節.listチップ.Add( item );\r
1069                                                                 break;\r
1070 \r
1071                                                         case 0x25:\r
1072                                                                 item = new Cチップ();\r
1073                                                                 item.nレーン番号0to = nLaneGtR;\r
1074                                                                 item.n位置grid = i;\r
1075                                                                 item.n値・整数1to1295 = 1;\r
1076                                                                 item.n読み込み時の解像度 = nChips;\r
1077                                                                 c小節.listチップ.Add( item );\r
1078                                                                 item = new Cチップ();\r
1079                                                                 item.nレーン番号0to = nLaneGtB;\r
1080                                                                 item.n位置grid = i;\r
1081                                                                 item.n値・整数1to1295 = 1;\r
1082                                                                 item.n読み込み時の解像度 = nChips;\r
1083                                                                 c小節.listチップ.Add( item );\r
1084                                                                 break;\r
1085 \r
1086                                                         case 0x26:\r
1087                                                                 item = new Cチップ();\r
1088                                                                 item.nレーン番号0to = nLaneGtR;\r
1089                                                                 item.n位置grid = i;\r
1090                                                                 item.n値・整数1to1295 = 1;\r
1091                                                                 item.n読み込み時の解像度 = nChips;\r
1092                                                                 c小節.listチップ.Add( item );\r
1093                                                                 item = new Cチップ();\r
1094                                                                 item.nレーン番号0to = nLaneGtG;\r
1095                                                                 item.n位置grid = i;\r
1096                                                                 item.n値・整数1to1295 = 1;\r
1097                                                                 item.n読み込み時の解像度 = nChips;\r
1098                                                                 c小節.listチップ.Add( item );\r
1099                                                                 break;\r
1100 \r
1101                                                         case 0x27:\r
1102                                                                 item = new Cチップ();\r
1103                                                                 item.nレーン番号0to = nLaneGtR;\r
1104                                                                 item.n位置grid = i;\r
1105                                                                 item.n値・整数1to1295 = 1;\r
1106                                                                 item.n読み込み時の解像度 = nChips;\r
1107                                                                 c小節.listチップ.Add( item );\r
1108                                                                 item = new Cチップ();\r
1109                                                                 item.nレーン番号0to = nLaneGtG;\r
1110                                                                 item.n位置grid = i;\r
1111                                                                 item.n値・整数1to1295 = 1;\r
1112                                                                 item.n読み込み時の解像度 = nChips;\r
1113                                                                 c小節.listチップ.Add( item );\r
1114                                                                 item = new Cチップ();\r
1115                                                                 item.nレーン番号0to = nLaneGtB;\r
1116                                                                 item.n位置grid = i;\r
1117                                                                 item.n値・整数1to1295 = 1;\r
1118                                                                 item.n読み込み時の解像度 = nChips;\r
1119                                                                 c小節.listチップ.Add( item );\r
1120                                                                 break;\r
1121                                                 }\r
1122                                         }\r
1123                                 }\r
1124                                 return true;\r
1125                         }\r
1126                         if( ( nCh >= 0xa0 ) && ( nCh <= 0xa7 ) )\r
1127                         {\r
1128                                 C小節 c小節2 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( nBar );\r
1129                                 int num12 = 0;\r
1130                                 while( ( num12 = strパラメータ.IndexOf( '_' ) ) != -1 )\r
1131                                 {\r
1132                                         strパラメータ = strパラメータ.Remove( num12, 1 );\r
1133                                 }\r
1134                                 int nChips = strパラメータ.Length / 2;\r
1135                                 for( int j = 0; j < nChips; j++ )\r
1136                                 {\r
1137                                         int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( j * 2, 2 ) );\r
1138                                         if( nChipNo != 0 )\r
1139                                         {\r
1140                                                 int nLaneBsV = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsV" );\r
1141                                                 int nLaneBsR = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsR" );\r
1142                                                 int nLanrBsG = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsG" );\r
1143                                                 int nLaneBsB = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsB" );\r
1144                                                 Cチップ cチップ2 = new Cチップ();\r
1145                                                 cチップ2.nレーン番号0to = nLaneBsV;\r
1146                                                 cチップ2.n位置grid = j;\r
1147                                                 cチップ2.n値・整数1to1295 = nChipNo;\r
1148                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1149                                                 c小節2.listチップ.Add( cチップ2 );\r
1150                                                 switch( nCh )\r
1151                                                 {\r
1152                                                         case 160:\r
1153                                                                 cチップ2 = new Cチップ();\r
1154                                                                 cチップ2.nレーン番号0to = nLaneBsR;\r
1155                                                                 cチップ2.n位置grid = j;\r
1156                                                                 cチップ2.n値・整数1to1295 = 2;\r
1157                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1158                                                                 c小節2.listチップ.Add( cチップ2 );\r
1159                                                                 break;\r
1160 \r
1161                                                         case 0xa1:\r
1162                                                                 cチップ2 = new Cチップ();\r
1163                                                                 cチップ2.nレーン番号0to = nLaneBsB;\r
1164                                                                 cチップ2.n位置grid = j;\r
1165                                                                 cチップ2.n値・整数1to1295 = 1;\r
1166                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1167                                                                 c小節2.listチップ.Add( cチップ2 );\r
1168                                                                 break;\r
1169 \r
1170                                                         case 0xa2:\r
1171                                                                 cチップ2 = new Cチップ();\r
1172                                                                 cチップ2.nレーン番号0to = nLanrBsG;\r
1173                                                                 cチップ2.n位置grid = j;\r
1174                                                                 cチップ2.n値・整数1to1295 = 1;\r
1175                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1176                                                                 c小節2.listチップ.Add( cチップ2 );\r
1177                                                                 break;\r
1178 \r
1179                                                         case 0xa3:\r
1180                                                                 cチップ2 = new Cチップ();\r
1181                                                                 cチップ2.nレーン番号0to = nLanrBsG;\r
1182                                                                 cチップ2.n位置grid = j;\r
1183                                                                 cチップ2.n値・整数1to1295 = 1;\r
1184                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1185                                                                 c小節2.listチップ.Add( cチップ2 );\r
1186                                                                 cチップ2 = new Cチップ();\r
1187                                                                 cチップ2.nレーン番号0to = nLaneBsB;\r
1188                                                                 cチップ2.n位置grid = j;\r
1189                                                                 cチップ2.n値・整数1to1295 = 1;\r
1190                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1191                                                                 c小節2.listチップ.Add( cチップ2 );\r
1192                                                                 break;\r
1193 \r
1194                                                         case 0xa4:\r
1195                                                                 cチップ2 = new Cチップ();\r
1196                                                                 cチップ2.nレーン番号0to = nLaneBsR;\r
1197                                                                 cチップ2.n位置grid = j;\r
1198                                                                 cチップ2.n値・整数1to1295 = 1;\r
1199                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1200                                                                 c小節2.listチップ.Add( cチップ2 );\r
1201                                                                 break;\r
1202 \r
1203                                                         case 0xa5:\r
1204                                                                 cチップ2 = new Cチップ();\r
1205                                                                 cチップ2.nレーン番号0to = nLaneBsR;\r
1206                                                                 cチップ2.n位置grid = j;\r
1207                                                                 cチップ2.n値・整数1to1295 = 1;\r
1208                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1209                                                                 c小節2.listチップ.Add( cチップ2 );\r
1210                                                                 cチップ2 = new Cチップ();\r
1211                                                                 cチップ2.nレーン番号0to = nLaneBsB;\r
1212                                                                 cチップ2.n位置grid = j;\r
1213                                                                 cチップ2.n値・整数1to1295 = 1;\r
1214                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1215                                                                 c小節2.listチップ.Add( cチップ2 );\r
1216                                                                 break;\r
1217 \r
1218                                                         case 0xa6:\r
1219                                                                 cチップ2 = new Cチップ();\r
1220                                                                 cチップ2.nレーン番号0to = nLaneBsR;\r
1221                                                                 cチップ2.n位置grid = j;\r
1222                                                                 cチップ2.n値・整数1to1295 = 1;\r
1223                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1224                                                                 c小節2.listチップ.Add( cチップ2 );\r
1225                                                                 cチップ2 = new Cチップ();\r
1226                                                                 cチップ2.nレーン番号0to = nLanrBsG;\r
1227                                                                 cチップ2.n位置grid = j;\r
1228                                                                 cチップ2.n値・整数1to1295 = 1;\r
1229                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1230                                                                 c小節2.listチップ.Add( cチップ2 );\r
1231                                                                 break;\r
1232 \r
1233                                                         case 0xa7:\r
1234                                                                 cチップ2 = new Cチップ();\r
1235                                                                 cチップ2.nレーン番号0to = nLaneBsR;\r
1236                                                                 cチップ2.n位置grid = j;\r
1237                                                                 cチップ2.n値・整数1to1295 = 1;\r
1238                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1239                                                                 c小節2.listチップ.Add( cチップ2 );\r
1240                                                                 cチップ2 = new Cチップ();\r
1241                                                                 cチップ2.nレーン番号0to = nLanrBsG;\r
1242                                                                 cチップ2.n位置grid = j;\r
1243                                                                 cチップ2.n値・整数1to1295 = 1;\r
1244                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1245                                                                 c小節2.listチップ.Add( cチップ2 );\r
1246                                                                 cチップ2 = new Cチップ();\r
1247                                                                 cチップ2.nレーン番号0to = nLaneBsB;\r
1248                                                                 cチップ2.n位置grid = j;\r
1249                                                                 cチップ2.n値・整数1to1295 = 1;\r
1250                                                                 cチップ2.n読み込み時の解像度 = nChips;\r
1251                                                                 c小節2.listチップ.Add( cチップ2 );\r
1252                                                                 break;\r
1253                                                 }\r
1254                                         }\r
1255                                 }\r
1256                                 return true;\r
1257                         }\r
1258                         int num20 = -1;\r
1259                         bool flag = false;\r
1260                         if( this.tDTX入力・行解析・チャンネル・チャンネルに該当するレーン番号を返す( nCh, out num20, out flag ) )\r
1261                         {\r
1262                                 C小節 c小節3 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( nBar );\r
1263                                 int nPosOf_ = 0;\r
1264                                 while( ( nPosOf_ = strパラメータ.IndexOf( '_' ) ) != -1 )\r
1265                                 {\r
1266                                         strパラメータ = strパラメータ.Remove( nPosOf_, 1 );\r
1267                                 }\r
1268                                 int nChips = strパラメータ.Length / 2;\r
1269                                 for( int i = 0; i < nChips; i++ )\r
1270                                 {\r
1271                                         int nChipNo = ( nCh == 3 ) ? C変換.n16進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) ) : C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
1272                                         if( nChipNo > 0 )\r
1273                                         {\r
1274                                                 Cチップ cチップ3 = new Cチップ();\r
1275                                                 cチップ3.nチャンネル番号00toFF = nCh;\r
1276                                                 cチップ3.nレーン番号0to = num20;\r
1277                                                 cチップ3.n位置grid = i;\r
1278                                                 cチップ3.n読み込み時の解像度 = nChips;\r
1279                                                 cチップ3.n値・整数1to1295 = nChipNo;\r
1280                                                 cチップ3.b裏 = flag;\r
1281                                                 c小節3.listチップ.Add( cチップ3 );\r
1282                                         }\r
1283                                 }\r
1284                                 return true;\r
1285                         }\r
1286                         StringBuilder builder = new StringBuilder( 0x400 );\r
1287                         builder.Append( "#" + C変換.str小節番号を文字列3桁に変換して返す( nBar ) + C変換.str数値を16進数2桁に変換して返す( nCh ) + ": " + strパラメータ );\r
1288                         if( strコメント.Length > 0 )\r
1289                         {\r
1290                                 builder.Append( " ;" + strコメント );\r
1291                         }\r
1292                         builder.Append( Environment.NewLine );\r
1293                         CUndoRedo管理.bUndoRedoした直後 = true;\r
1294                         this._Form.textBox自由入力欄.AppendText( builder.ToString() );\r
1295                         return true;\r
1296                 }\r
1297                 private int tDTX入力・行解析・チャンネル・GDAチャンネル文字列2桁をチャンネル番号にして返す( string strチャンネル文字列2桁 )\r
1298                 {\r
1299                         if( strチャンネル文字列2桁.Length == 2 )\r
1300                         {\r
1301                                 switch( strチャンネル文字列2桁.ToUpper() )\r
1302                                 {\r
1303                                         case "TC":\r
1304                                                 return 3;\r
1305 \r
1306                                         case "BL":\r
1307                                                 return 2;\r
1308 \r
1309                                         case "GS":\r
1310                                                 return 0x29;\r
1311 \r
1312                                         case "DS":\r
1313                                                 return 0x30;\r
1314 \r
1315                                         case "FI":\r
1316                                                 return 0x53;\r
1317 \r
1318                                         case "HH":\r
1319                                                 return 0x11;\r
1320 \r
1321                                         case "SD":\r
1322                                                 return 0x12;\r
1323 \r
1324                                         case "BD":\r
1325                                                 return 0x13;\r
1326 \r
1327                                         case "HT":\r
1328                                                 return 0x14;\r
1329 \r
1330                                         case "LT":\r
1331                                                 return 0x15;\r
1332 \r
1333                                         case "CY":\r
1334                                                 return 0x16;\r
1335 \r
1336                                         case "G1":\r
1337                                                 return 0x21;\r
1338 \r
1339                                         case "G2":\r
1340                                                 return 0x22;\r
1341 \r
1342                                         case "G3":\r
1343                                                 return 0x23;\r
1344 \r
1345                                         case "G4":\r
1346                                                 return 0x24;\r
1347 \r
1348                                         case "G5":\r
1349                                                 return 0x25;\r
1350 \r
1351                                         case "G6":\r
1352                                                 return 0x26;\r
1353 \r
1354                                         case "G7":\r
1355                                                 return 0x27;\r
1356 \r
1357                                         case "GW":\r
1358                                                 return 0x28;\r
1359 \r
1360                                         case "01":\r
1361                                                 return 0x61;\r
1362 \r
1363                                         case "02":\r
1364                                                 return 0x62;\r
1365 \r
1366                                         case "03":\r
1367                                                 return 0x63;\r
1368 \r
1369                                         case "04":\r
1370                                                 return 0x64;\r
1371 \r
1372                                         case "05":\r
1373                                                 return 0x65;\r
1374 \r
1375                                         case "06":\r
1376                                                 return 0x66;\r
1377 \r
1378                                         case "07":\r
1379                                                 return 0x67;\r
1380 \r
1381                                         case "08":\r
1382                                                 return 0x68;\r
1383 \r
1384                                         case "09":\r
1385                                                 return 0x69;\r
1386 \r
1387                                         case "0A":\r
1388                                                 return 0x70;\r
1389 \r
1390                                         case "0B":\r
1391                                                 return 0x71;\r
1392 \r
1393                                         case "0C":\r
1394                                                 return 0x72;\r
1395 \r
1396                                         case "0D":\r
1397                                                 return 0x73;\r
1398 \r
1399                                         case "0E":\r
1400                                                 return 0x74;\r
1401 \r
1402                                         case "0F":\r
1403                                                 return 0x75;\r
1404 \r
1405                                         case "10":\r
1406                                                 return 0x76;\r
1407 \r
1408                                         case "11":\r
1409                                                 return 0x77;\r
1410 \r
1411                                         case "12":\r
1412                                                 return 0x78;\r
1413 \r
1414                                         case "13":\r
1415                                                 return 0x79;\r
1416 \r
1417                                         case "14":\r
1418                                                 return 0x80;\r
1419 \r
1420                                         case "15":\r
1421                                                 return 0x81;\r
1422 \r
1423                                         case "16":\r
1424                                                 return 0x82;\r
1425 \r
1426                                         case "17":\r
1427                                                 return 0x83;\r
1428 \r
1429                                         case "18":\r
1430                                                 return 0x84;\r
1431 \r
1432                                         case "19":\r
1433                                                 return 0x85;\r
1434 \r
1435                                         case "1A":\r
1436                                                 return 0x86;\r
1437 \r
1438                                         case "1B":\r
1439                                                 return 0x87;\r
1440 \r
1441                                         case "1C":\r
1442                                                 return 0x88;\r
1443 \r
1444                                         case "1D":\r
1445                                                 return 0x89;\r
1446 \r
1447                                         case "1E":\r
1448                                                 return 0x90;\r
1449 \r
1450                                         case "1F":\r
1451                                                 return 0x91;\r
1452 \r
1453                                         case "20":\r
1454                                                 return 0x92;\r
1455 \r
1456                                         case "B1":\r
1457                                                 return 0xa1;\r
1458 \r
1459                                         case "B2":\r
1460                                                 return 0xa2;\r
1461 \r
1462                                         case "B3":\r
1463                                                 return 0xa3;\r
1464 \r
1465                                         case "B4":\r
1466                                                 return 0xa4;\r
1467 \r
1468                                         case "B5":\r
1469                                                 return 0xa5;\r
1470 \r
1471                                         case "B6":\r
1472                                                 return 0xa6;\r
1473 \r
1474                                         case "B7":\r
1475                                                 return 0xa7;\r
1476 \r
1477                                         case "BW":\r
1478                                                 return 0xa8;\r
1479 \r
1480                                         case "G0":\r
1481                                                 return 0x20;\r
1482 \r
1483                                         case "B0":\r
1484                                                 return 0xa0;\r
1485                                 }\r
1486                         }\r
1487                         return -1;\r
1488                 }\r
1489 \r
1490                 // #25990 2011.8.12 yyagi BMS/BME→DTX変換メイン\r
1491                 private int tDTX入力・行解析・チャンネル・BMSチャンネル文字列2桁をチャンネル番号にして返す( string strチャンネル文字列2桁, int bar, E種別 eType )\r
1492                 {\r
1493                         if ( bar >= 0 &&  strチャンネル文字列2桁.Length == 2 )\r
1494                         {\r
1495                                 if ( nLastBarConverted != bar )                 // 小節が変わったら、BGM用に使うch群\r
1496                                 {\r
1497                                         nLastBarConverted = bar;\r
1498                                         eDTXbgmChs.Reset();\r
1499                                 }\r
1500 \r
1501                                 int bmsCh = Convert.ToInt32( strチャンネル文字列2桁, 16 );\r
1502                                 if ( bmsCh == 0x01 )                                            // BGMなら\r
1503                                 {\r
1504                                         if ( !eDTXbgmChs.MoveNext() )                   // BGM用に使うSEチャネルの空きがもう無い\r
1505                                         {\r
1506                                                 return -1;\r
1507                                         }\r
1508                                         return (int) eDTXbgmChs.Current;\r
1509                                 }\r
1510                                 else if ( 0x11 <= bmsCh && bmsCh <= 0x19 )      // 鍵盤なら\r
1511                                 {\r
1512                                         return ( eType == E種別.BMS ) ? BMSkeyChToDTXdrumsCh[ bmsCh - 0x11 ] : BMEkeyChToDTXdrumsCh[ bmsCh - 0x11 ];\r
1513                                 }\r
1514                                 else                                                                            // それ以外なら\r
1515                                 {\r
1516                                         return BMSgeneralChToDTXgeneralCh[ bmsCh ];\r
1517                                 }\r
1518                         }\r
1519                         return -1;\r
1520                 }\r
1521                 private bool tDTX入力・行解析・チャンネル・コマンドから小節番号とチャンネル番号を抜き出す( string strコマンド, out int n小節番号, out int nチャンネル番号 )\r
1522                 {\r
1523                         if( strコマンド.Length >= 5 )\r
1524                         {\r
1525                                 n小節番号 = C変換.n小節番号の文字列3桁を数値に変換して返す( strコマンド.Substring( 0, 3 ) );\r
1526                                 if( ( this.e種別 == E種別.GDA ) || ( this.e種別 == E種別.G2D ) )\r
1527                                 {\r
1528                                         nチャンネル番号 = this.tDTX入力・行解析・チャンネル・GDAチャンネル文字列2桁をチャンネル番号にして返す( strコマンド.Substring( 3, 2 ) );\r
1529                                 }\r
1530                                 else if( ( this.e種別 == E種別.BMS ) || ( this.e種別 == E種別.BME ) )   // #25990 2011.8.12 yyagi\r
1531                                 {\r
1532                                         nチャンネル番号 = this.tDTX入力・行解析・チャンネル・BMSチャンネル文字列2桁をチャンネル番号にして返す( strコマンド.Substring( 3, 2 ), n小節番号, this.e種別 );\r
1533                                 }\r
1534                                 else\r
1535                                 {\r
1536                                         nチャンネル番号 = C変換.n16進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 3, 2 ) );\r
1537                                 }\r
1538                                 return ( ( n小節番号 >= 0 ) && ( nチャンネル番号 > 0 ) );\r
1539                         }\r
1540                         n小節番号 = -1;\r
1541                         nチャンネル番号 = -1;\r
1542                         return false;\r
1543                 }\r
1544                 private bool tDTX入力・行解析・チャンネル・チャンネルに該当するレーン番号を返す( int nチャンネル番号, out int nレーン番号, out bool b裏 )\r
1545                 {\r
1546                         nレーン番号 = -1;\r
1547                         b裏 = false;\r
1548                         for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ )\r
1549                         {\r
1550                                 Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ];\r
1551                                 if( cレーン.nチャンネル番号・表00toFF == nチャンネル番号 )\r
1552                                 {\r
1553                                         nレーン番号 = i;\r
1554                                         b裏 = false;\r
1555                                         return true;\r
1556                                 }\r
1557                                 if( cレーン.nチャンネル番号・裏00toFF == nチャンネル番号 )\r
1558                                 {\r
1559                                         nレーン番号 = i;\r
1560                                         b裏 = true;\r
1561                                         return true;\r
1562                                 }\r
1563                         }\r
1564                         return false;\r
1565                 }\r
1566                 private C小節 tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( int n小節番号 )\r
1567                 {\r
1568                         C小節 c小節 = this._Form.mgr譜面管理者.p小節を返す( n小節番号 );\r
1569                         if( c小節 == null )\r
1570                         {\r
1571                                 if( n小節番号 > this._Form.mgr譜面管理者.n現在の最大の小節番号を返す() )\r
1572                                 {\r
1573                                         for( int i = this._Form.mgr譜面管理者.n現在の最大の小節番号を返す() + 1; i <= n小節番号; i++ )\r
1574                                         {\r
1575                                                 c小節 = new C小節( i );\r
1576                                                 this._Form.mgr譜面管理者.dic小節.Add( i, c小節 );\r
1577                                         }\r
1578                                         return c小節;\r
1579                                 }\r
1580                                 c小節 = new C小節( n小節番号 );\r
1581                                 this._Form.mgr譜面管理者.dic小節.Add( n小節番号, c小節 );\r
1582                         }\r
1583                         return c小節;\r
1584                 }\r
1585                 private void tDTX入力・小節長倍率配列を昇順ソート済みの小節リストに適用する()\r
1586                 {\r
1587                         float num = 1f;\r
1588                         for( int i = 0; i < this._Form.mgr譜面管理者.dic小節.Count; i++ )\r
1589                         {\r
1590                                 C小節 c小節 = this._Form.mgr譜面管理者.dic小節[ i ];\r
1591                                 foreach( KeyValuePair<int, float> pair in this.dic小節長倍率 )\r
1592                                 {\r
1593                                         if( c小節.n小節番号0to3599 == pair.Key )\r
1594                                         {\r
1595                                                 num = pair.Value;\r
1596                                         }\r
1597                                 }\r
1598                                 c小節.f小節長倍率 = num;\r
1599                                 for( int j = 0; j < c小節.listチップ.Count; j++ )\r
1600                                 {\r
1601                                         c小節.listチップ[ j ].n位置grid = ( c小節.listチップ[ j ].n位置grid * c小節.n小節長倍率を考慮した現在の小節の高さgrid ) / c小節.listチップ[ j ].n読み込み時の解像度;\r
1602                                 }\r
1603                         }\r
1604                 }\r
1605                 private void tDTX入力・小節内のチップリストを発声位置でソートする()\r
1606                 {\r
1607                         foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
1608                         {\r
1609                                 pair.Value.listチップ.Sort();\r
1610                         }\r
1611                 }\r
1612 \r
1613                 private void tDTX出力・AVIリスト( StreamWriter sw )\r
1614                 {\r
1615                         sw.WriteLine();\r
1616                         for( int i = 1; i <= 36 * 36 - 1; i++ )\r
1617                         {\r
1618                                 CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );\r
1619                                 if( ( cavi != null ) && ( cavi.strファイル名.Length > 0 ) )\r
1620                                 {\r
1621                                         string str = C変換.str数値を36進数2桁に変換して返す( cavi.nAVI番号1to1295 );\r
1622                                         sw.Write( "#AVI{0}: {1}", str, cavi.strファイル名 );\r
1623                                         if( cavi.strラベル名.Length > 0 )\r
1624                                         {\r
1625                                                 sw.Write( "\t;{0}", cavi.strラベル名 );\r
1626                                         }\r
1627                                         sw.WriteLine();\r
1628                                 }\r
1629                         }\r
1630                 }\r
1631                 private void tDTX出力・AVIリスト色設定( StreamWriter sw )\r
1632                 {\r
1633                         Color color = ColorTranslator.FromHtml( "window" );\r
1634                         Color color2 = ColorTranslator.FromHtml( "windowtext" );\r
1635                         for( int i = 1; i <= 36 * 36 - 1; i++ )\r
1636                         {\r
1637                                 CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );\r
1638                                 if( cavi != null )\r
1639                                 {\r
1640                                         if( cavi.col文字色 != color2 )\r
1641                                         {\r
1642                                                 sw.WriteLine( "#DTXC_AVIFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cavi.col文字色 ) );\r
1643                                         }\r
1644                                         if( cavi.col背景色 != color )\r
1645                                         {\r
1646                                                 sw.WriteLine( "#DTXC_AVIBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cavi.col背景色 ) );\r
1647                                         }\r
1648                                 }\r
1649                         }\r
1650                 }\r
1651                 private void tDTX出力・BMPリスト( StreamWriter sw )\r
1652                 {\r
1653                         sw.WriteLine();\r
1654                         for( int i = 1; i <= 36 * 36 - 1; i++ )\r
1655                         {\r
1656                                 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );\r
1657                                 if( ( cbmp != null ) && ( cbmp.strファイル名.Length > 0 ) )\r
1658                                 {\r
1659                                         string str = C変換.str数値を36進数2桁に変換して返す( cbmp.nBMP番号1to1295 );\r
1660                                         if( !cbmp.bテクスチャ )\r
1661                                         {\r
1662                                                 sw.Write( "#BMP{0}: {1}", str, cbmp.strファイル名 );\r
1663                                                 if( cbmp.strラベル名.Length > 0 )\r
1664                                                 {\r
1665                                                         sw.Write( "\t;{0}", cbmp.strラベル名 );\r
1666                                                 }\r
1667                                                 sw.WriteLine();\r
1668                                         }\r
1669                                         else\r
1670                                         {\r
1671                                                 sw.Write( "#BMPTEX{0}: {1}", str, cbmp.strファイル名 );\r
1672                                                 if( cbmp.strラベル名.Length > 0 )\r
1673                                                 {\r
1674                                                         sw.Write( "\t;{0}", cbmp.strラベル名 );\r
1675                                                 }\r
1676                                                 sw.WriteLine();\r
1677                                         }\r
1678                                 }\r
1679                         }\r
1680                 }\r
1681                 private void tDTX出力・BMPリスト色設定( StreamWriter sw )\r
1682                 {\r
1683                         Color color = ColorTranslator.FromHtml( "window" );\r
1684                         Color color2 = ColorTranslator.FromHtml( "windowtext" );\r
1685                         for( int i = 1; i <= 36 * 36 - 1; i++ )\r
1686                         {\r
1687                                 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );\r
1688                                 if( cbmp != null )\r
1689                                 {\r
1690                                         if( cbmp.col文字色 != color2 )\r
1691                                         {\r
1692                                                 sw.WriteLine( "#DTXC_BMPFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cbmp.col文字色 ) );\r
1693                                         }\r
1694                                         if( cbmp.col背景色 != color )\r
1695                                         {\r
1696                                                 sw.WriteLine( "#DTXC_BMPBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cbmp.col背景色 ) );\r
1697                                         }\r
1698                                 }\r
1699                         }\r
1700                 }\r
1701                 private void tDTX出力・BPxリスト( StreamWriter sw )\r
1702                 {\r
1703                         sw.WriteLine();\r
1704                         foreach( KeyValuePair<int, float> pair in this._Form.mgr譜面管理者.dicBPx )\r
1705                         {\r
1706                                 sw.WriteLine( "#BPM{0}: {1}", C変換.str数値を36進数2桁に変換して返す( pair.Key ), pair.Value );\r
1707                         }\r
1708                 }\r
1709                 private void tDTX出力・WAVリスト( StreamWriter sw, bool bBGMのみ出力 )\r
1710                 {\r
1711                         sw.WriteLine();\r
1712                         for( int i = 1; i <= 36 * 36 - 1; i++ )\r
1713                         {\r
1714                                 CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );\r
1715                                 if( ( ( cwav != null ) && ( cwav.strファイル名.Length > 0 ) ) && ( !bBGMのみ出力 || cwav.bBGMとして使用 ) )\r
1716                                 {\r
1717                                         string str = C変換.str数値を36進数2桁に変換して返す( cwav.nWAV番号1to1295 );\r
1718                                         sw.Write( "#WAV{0}: {1}", str, cwav.strファイル名 );\r
1719                                         if( cwav.strラベル名.Length > 0 )\r
1720                                         {\r
1721                                                 sw.Write( "\t;{0}", cwav.strラベル名 );\r
1722                                         }\r
1723                                         sw.WriteLine();\r
1724                                         if( cwav.n音量0to100 != 100 )\r
1725                                         {\r
1726                                                 sw.WriteLine( "#VOLUME{0}: {1}", str, cwav.n音量0to100.ToString() );\r
1727                                         }\r
1728                                         if( cwav.n位置_100to100 != 0 )\r
1729                                         {\r
1730                                                 sw.WriteLine( "#PAN{0}: {1}", str, cwav.n位置_100to100.ToString() );\r
1731                                         }\r
1732                                         if( cwav.bBGMとして使用 )\r
1733                                         {\r
1734                                                 sw.WriteLine( "#BGMWAV: {0}", str );\r
1735                                         }\r
1736                                 }\r
1737                         }\r
1738                 }\r
1739                 private void tDTX出力・WAVリスト色設定( StreamWriter sw )\r
1740                 {\r
1741                         Color color = ColorTranslator.FromHtml( "window" );\r
1742                         Color color2 = ColorTranslator.FromHtml( "windowtext" );\r
1743                         for( int i = 1; i <= 36 * 36 - 1; i++ )\r
1744                         {\r
1745                                 CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );\r
1746                                 if( cwav != null )\r
1747                                 {\r
1748                                         if( cwav.col文字色 != color2 )\r
1749                                         {\r
1750                                                 sw.WriteLine( "#DTXC_WAVFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cwav.col文字色 ) );\r
1751                                         }\r
1752                                         if( cwav.col背景色 != color )\r
1753                                         {\r
1754                                                 sw.WriteLine( "#DTXC_WAVBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cwav.col背景色 ) );\r
1755                                         }\r
1756                                 }\r
1757                         }\r
1758                 }\r
1759                 private void tDTX出力・タイトルと製作者とコメントその他( StreamWriter sw )\r
1760                 {\r
1761                         sw.WriteLine();\r
1762                         if( this._Form.textBox曲名.Text.Length == 0 )\r
1763                         {\r
1764                                 sw.WriteLine( "#TITLE: (no title)" );\r
1765                         }\r
1766                         else\r
1767                         {\r
1768                                 sw.WriteLine( "#TITLE: " + this._Form.textBox曲名.Text );\r
1769                         }\r
1770                         if( this._Form.textBox製作者.Text.Length > 0 )\r
1771                         {\r
1772                                 sw.WriteLine( "#ARTIST: " + this._Form.textBox製作者.Text );\r
1773                         }\r
1774                         if( this._Form.textBoxコメント.Text.Length > 0 )\r
1775                         {\r
1776                                 sw.WriteLine( "#COMMENT: " + this._Form.textBoxコメント.Text );\r
1777                         }\r
1778                         if( this._Form.textBoxパネル.Text.Length > 0 )\r
1779                         {\r
1780                                 sw.WriteLine( "#PANEL: " + this._Form.textBoxパネル.Text );\r
1781                         }\r
1782                         if( this._Form.textBoxPREVIEW.Text.Length > 0 )\r
1783                         {\r
1784                                 sw.WriteLine( "#PREVIEW: " + this._Form.textBoxPREVIEW.Text );\r
1785                         }\r
1786                         if( this._Form.textBoxPREIMAGE.Text.Length > 0 )\r
1787                         {\r
1788                                 sw.WriteLine( "#PREIMAGE: " + this._Form.textBoxPREIMAGE.Text );\r
1789                         }\r
1790                         if( this._Form.textBoxSTAGEFILE.Text.Length > 0 )\r
1791                         {\r
1792                                 sw.WriteLine( "#STAGEFILE: " + this._Form.textBoxSTAGEFILE.Text );\r
1793                         }\r
1794                         if( this._Form.textBoxBACKGROUND.Text.Length > 0 )\r
1795                         {\r
1796                                 sw.WriteLine( "#BACKGROUND: " + this._Form.textBoxBACKGROUND.Text );\r
1797                         }\r
1798                         if( this._Form.textBoxRESULTIMAGE.Text.Length > 0 )\r
1799                         {\r
1800                                 sw.WriteLine( "#RESULTIMAGE: " + this._Form.textBoxRESULTIMAGE.Text );\r
1801                         }\r
1802                         if( this._Form.numericUpDownBPM.Value != 0M )\r
1803                         {\r
1804                                 sw.WriteLine( "#BPM: " + this._Form.numericUpDownBPM.Value );\r
1805                         }\r
1806                         if( this._Form.hScrollBarDLEVEL.Value != 0 )\r
1807                         {\r
1808                                 sw.WriteLine( "#DLEVEL: " + this._Form.hScrollBarDLEVEL.Value );\r
1809                         }\r
1810                         if( this._Form.hScrollBarGLEVEL.Value != 0 )\r
1811                         {\r
1812                                 sw.WriteLine( "#GLEVEL: " + this._Form.hScrollBarGLEVEL.Value );\r
1813                         }\r
1814                         if( this._Form.hScrollBarBLEVEL.Value != 0 )\r
1815                         {\r
1816                                 sw.WriteLine( "#BLEVEL: " + this._Form.hScrollBarBLEVEL.Value );\r
1817                         }\r
1818                         if( this._Form.mgr譜面管理者.strPATH_WAV.Length != 0 )\r
1819                         {\r
1820                                 sw.WriteLine( "#PATH_WAV: " + this._Form.mgr譜面管理者.strPATH_WAV );\r
1821                         }\r
1822                         if( this._Form.toolStripComboBox演奏速度.SelectedIndex != 5 )\r
1823                         {\r
1824                                 sw.WriteLine( "#DTXVPLAYSPEED: " + ( 1.5f - ( this._Form.toolStripComboBox演奏速度.SelectedIndex * 0.1f ) ) );\r
1825                         }\r
1826                 }\r
1827                 private void tDTX出力・チップパレット( StreamWriter sw )\r
1828                 {\r
1829                         sw.Write( "#DTXC_CHIPPALETTE: " );\r
1830                         foreach( ListViewItem item in this._Form.dlgチップパレット.listViewチップリスト.Items )\r
1831                         {\r
1832                                 sw.Write( " {0},{1}", item.ImageIndex, item.SubItems[ 1 ].Text );\r
1833                         }\r
1834                         sw.WriteLine();\r
1835                 }\r
1836                 private void tDTX出力・レーン割付チップ( StreamWriter sw )\r
1837                 {\r
1838                         sw.WriteLine();\r
1839                         for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ )\r
1840                         {\r
1841                                 Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ];\r
1842                                 if( ( cレーン.nレーン割付チップ・表0or1to1295 > 0 ) || ( cレーン.nレーン割付チップ・裏0or1to1295 > 0 ) )\r
1843                                 {\r
1844                                         sw.WriteLine( "#DTXC_LANEBINDEDCHIP: {0} {1} {2}", i.ToString( "00" ), C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・表0or1to1295 ), C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・裏0or1to1295 ) );\r
1845                                 }\r
1846                         }\r
1847                 }\r
1848                 private void tDTX出力・自由入力欄( StreamWriter sw )\r
1849                 {\r
1850                         sw.WriteLine();\r
1851                         if( this._Form.textBox自由入力欄.Text.Length > 0 )\r
1852                         {\r
1853                                 sw.WriteLine();\r
1854                                 sw.Write( this._Form.textBox自由入力欄.Text );\r
1855                                 sw.WriteLine();\r
1856                         }\r
1857                 }\r
1858                 private void tDTX出力・小節長倍率( StreamWriter sw )\r
1859                 {\r
1860                         sw.WriteLine();\r
1861                         float num = 1f;\r
1862                         for( int i = 0; i < this._Form.mgr譜面管理者.dic小節.Count; i++ )\r
1863                         {\r
1864                                 C小節 c小節 = this._Form.mgr譜面管理者.dic小節[ i ];\r
1865                                 if( c小節.f小節長倍率 != num )\r
1866                                 {\r
1867                                         num = c小節.f小節長倍率;\r
1868                                         sw.WriteLine( "#{0}02: {1}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), num );\r
1869                                 }\r
1870                         }\r
1871                 }\r
1872                 private void tDTX出力・全チップ( StreamWriter sw )\r
1873                 {\r
1874                         sw.WriteLine();\r
1875                         foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
1876                         {\r
1877                                 C小節 c小節 = pair.Value;\r
1878                                 List<int> list = new List<int>();\r
1879                                 foreach( Cチップ cチップ in c小節.listチップ )\r
1880                                 {\r
1881                                         if( list.IndexOf( cチップ.nチャンネル番号00toFF ) < 0 )\r
1882                                         {\r
1883                                                 list.Add( cチップ.nチャンネル番号00toFF );\r
1884                                         }\r
1885                                 }\r
1886                                 int[,] numArray = new int[ c小節.n小節長倍率を考慮した現在の小節の高さgrid, 2 ];\r
1887                                 foreach( int num in list )\r
1888                                 {\r
1889                                         if( num != 0 )\r
1890                                         {\r
1891                                                 for( int num2 = 0; num2 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num2++ )\r
1892                                                 {\r
1893                                                         numArray[ num2, 0 ] = numArray[ num2, 1 ] = 0;\r
1894                                                 }\r
1895                                                 foreach( Cチップ cチップ2 in c小節.listチップ )\r
1896                                                 {\r
1897                                                         if( cチップ2.nチャンネル番号00toFF == num )\r
1898                                                         {\r
1899                                                                 numArray[ cチップ2.n位置grid, 0 ] = cチップ2.n値・整数1to1295;\r
1900                                                         }\r
1901                                                 }\r
1902                                                 int num3 = 0;\r
1903                                                 for( int num4 = 0; num4 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num4++ )\r
1904                                                 {\r
1905                                                         num3 += numArray[ num4, 0 ];\r
1906                                                 }\r
1907                                                 if( num3 != 0 )\r
1908                                                 {\r
1909                                                         int num5 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
1910                                                         foreach( int num6 in this.arr素数リスト )\r
1911                                                         {\r
1912                                                                 while( this.tDTX出力・全チップ・解像度をN分の1にできる( num6, ref numArray, num5 ) )\r
1913                                                                 {\r
1914                                                                         num5 /= num6;\r
1915                                                                         for( int num7 = 0; num7 < num5; num7++ )\r
1916                                                                         {\r
1917                                                                                 numArray[ num7, 0 ] = numArray[ num7 * num6, 0 ];\r
1918                                                                         }\r
1919                                                                 }\r
1920                                                         }\r
1921                                                         StringBuilder builder = new StringBuilder();\r
1922                                                         for( int num8 = 0; num8 < num5; num8++ )\r
1923                                                         {\r
1924                                                                 if( num == 3 )\r
1925                                                                 {\r
1926                                                                         builder.Append( C変換.str数値を16進数2桁に変換して返す( numArray[ num8, 0 ] ) );\r
1927                                                                 }\r
1928                                                                 else\r
1929                                                                 {\r
1930                                                                         builder.Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num8, 0 ] ) );\r
1931                                                                 }\r
1932                                                         }\r
1933                                                         sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( num ), builder.ToString() );\r
1934                                                 }\r
1935                                         }\r
1936                                 }\r
1937                                 for( int i = 0; i < c小節.n小節長倍率を考慮した現在の小節の高さgrid; i++ )\r
1938                                 {\r
1939                                         numArray[ i, 0 ] = numArray[ i, 1 ] = 0;\r
1940                                 }\r
1941                                 foreach( Cチップ cチップ3 in c小節.listチップ )\r
1942                                 {\r
1943                                         Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ cチップ3.nレーン番号0to ];\r
1944                                         switch( cレーン.eレーン種別 )\r
1945                                         {\r
1946                                                 case Cレーン.E種別.GtV:\r
1947                                                         {\r
1948                                                                 numArray[ cチップ3.n位置grid, 0 ] = cチップ3.n値・整数1to1295;\r
1949                                                                 continue;\r
1950                                                         }\r
1951                                                 case Cレーン.E種別.GtR:\r
1952                                                         {\r
1953                                                                 numArray[ cチップ3.n位置grid, 1 ] |= ( cチップ3.n値・整数1to1295 == 1 ) ? 0x04 : 0xFF; // OPEN = 0xFF\r
1954                                                                 continue;\r
1955                                                         }\r
1956                                                 case Cレーン.E種別.GtG:\r
1957                                                         {\r
1958                                                                 numArray[ cチップ3.n位置grid, 1 ] |= 0x02;\r
1959                                                                 continue;\r
1960                                                         }\r
1961                                                 case Cレーン.E種別.GtB:\r
1962                                                         {\r
1963                                                                 numArray[ cチップ3.n位置grid, 1 ] |= 0x01;\r
1964                                                                 continue;\r
1965                                                         }\r
1966                                         }\r
1967                                 }\r
1968                                 for( int j = 0; j < c小節.n小節長倍率を考慮した現在の小節の高さgrid; j++ )\r
1969                                 {\r
1970                                         if( ( numArray[ j, 0 ] == 0 ) || ( numArray[ j, 1 ] == 0 ) )\r
1971                                         {\r
1972                                                 numArray[ j, 0 ] = 0;\r
1973                                                 numArray[ j, 1 ] = 0;\r
1974                                         }\r
1975                                 }\r
1976                                 int num11 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
1977                                 foreach( int num12 in this.arr素数リスト )\r
1978                                 {\r
1979                                         while( this.tDTX出力・全チップ・解像度をN分の1にできる( num12, ref numArray, num11 ) )\r
1980                                         {\r
1981                                                 num11 /= num12;\r
1982                                                 for( int num13 = 0; num13 < num11; num13++ )\r
1983                                                 {\r
1984                                                         numArray[ num13, 0 ] = numArray[ num13 * num12, 0 ];\r
1985                                                         numArray[ num13, 1 ] = numArray[ num13 * num12, 1 ];\r
1986                                                 }\r
1987                                         }\r
1988                                 }\r
1989                                 bool[] flagArray = new bool[ 8 ];\r
1990                                 for( int k = 0; k < 8; k++ )\r
1991                                 {\r
1992                                         flagArray[ k ] = false;\r
1993                                 }\r
1994                                 for( int m = 0; m < num11; m++ )\r
1995                                 {\r
1996                                         if( numArray[ m, 1 ] == 0xff )\r
1997                                         {\r
1998                                                 flagArray[ 0 ] = true;\r
1999                                         }\r
2000                                         else if( numArray[ m, 1 ] != 0 )\r
2001                                         {\r
2002                                                 flagArray[ numArray[ m, 1 ] ] = true;\r
2003                                         }\r
2004                                 }\r
2005                                 StringBuilder[] builderArray = new StringBuilder[ 8 ];\r
2006                                 for( int n = 0; n < 8; n++ )\r
2007                                 {\r
2008                                         builderArray[ n ] = new StringBuilder();\r
2009                                 }\r
2010                                 for( int num17 = 0; num17 < num11; num17++ )\r
2011                                 {\r
2012                                         int num18 = ( numArray[ num17, 1 ] == 0xff ) ? 0x20 : ( numArray[ num17, 1 ] + 0x20 );\r
2013                                         for( int num19 = 0; num19 < 8; num19++ )\r
2014                                         {\r
2015                                                 if( flagArray[ num19 ] )\r
2016                                                 {\r
2017                                                         if( num19 == ( num18 - 0x20 ) )\r
2018                                                         {\r
2019                                                                 builderArray[ num19 ].Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num17, 0 ] ) );\r
2020                                                         }\r
2021                                                         else\r
2022                                                         {\r
2023                                                                 builderArray[ num19 ].Append( "00" );\r
2024                                                         }\r
2025                                                 }\r
2026                                         }\r
2027                                 }\r
2028                                 for( int num20 = 0; num20 < 8; num20++ )\r
2029                                 {\r
2030                                         if( builderArray[ num20 ].Length != 0 )\r
2031                                         {\r
2032                                                 sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( 0x20 + num20 ), builderArray[ num20 ].ToString() );\r
2033                                         }\r
2034                                 }\r
2035                                 for( int num21 = 0; num21 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num21++ )\r
2036                                 {\r
2037                                         numArray[ num21, 0 ] = numArray[ num21, 1 ] = 0;\r
2038                                 }\r
2039                                 foreach( Cチップ cチップ4 in c小節.listチップ )\r
2040                                 {\r
2041                                         Cレーン cレーン2 = this._Form.mgr譜面管理者.listレーン[ cチップ4.nレーン番号0to ];\r
2042                                         switch( cレーン2.eレーン種別 )\r
2043                                         {\r
2044                                                 case Cレーン.E種別.BsV:\r
2045                                                         {\r
2046                                                                 numArray[ cチップ4.n位置grid, 0 ] = cチップ4.n値・整数1to1295;\r
2047                                                                 continue;\r
2048                                                         }\r
2049                                                 case Cレーン.E種別.BsR:\r
2050                                                         {\r
2051                                                                 numArray[ cチップ4.n位置grid, 1 ] |= ( cチップ4.n値・整数1to1295 == 1 ) ? 4 : 0xff; // OPEN = 0xFF\r
2052                                                                 continue;\r
2053                                                         }\r
2054                                                 case Cレーン.E種別.BsG:\r
2055                                                         {\r
2056                                                                 numArray[ cチップ4.n位置grid, 1 ] |= 0x02;\r
2057                                                                 continue;\r
2058                                                         }\r
2059                                                 case Cレーン.E種別.BsB:\r
2060                                                         {\r
2061                                                                 numArray[ cチップ4.n位置grid, 1 ] |= 0x01;\r
2062                                                                 continue;\r
2063                                                         }\r
2064                                         }\r
2065                                 }\r
2066                                 for( int num22 = 0; num22 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num22++ )\r
2067                                 {\r
2068                                         if( ( numArray[ num22, 0 ] == 0 ) || ( numArray[ num22, 1 ] == 0 ) )\r
2069                                         {\r
2070                                                 numArray[ num22, 0 ] = 0;\r
2071                                                 numArray[ num22, 1 ] = 0;\r
2072                                         }\r
2073                                 }\r
2074                                 int num23 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
2075                                 foreach( int num24 in this.arr素数リスト )\r
2076                                 {\r
2077                                         while( this.tDTX出力・全チップ・解像度をN分の1にできる( num24, ref numArray, num23 ) )\r
2078                                         {\r
2079                                                 num23 /= num24;\r
2080                                                 for( int num25 = 0; num25 < num23; num25++ )\r
2081                                                 {\r
2082                                                         numArray[ num25, 0 ] = numArray[ num25 * num24, 0 ];\r
2083                                                         numArray[ num25, 1 ] = numArray[ num25 * num24, 1 ];\r
2084                                                 }\r
2085                                         }\r
2086                                 }\r
2087                                 bool[] flagArray2 = new bool[ 8 ];\r
2088                                 for( int num26 = 0; num26 < 8; num26++ )\r
2089                                 {\r
2090                                         flagArray2[ num26 ] = false;\r
2091                                 }\r
2092                                 for( int num27 = 0; num27 < num23; num27++ )\r
2093                                 {\r
2094                                         if( numArray[ num27, 1 ] == 0xff )\r
2095                                         {\r
2096                                                 flagArray2[ 0 ] = true;\r
2097                                         }\r
2098                                         else if( numArray[ num27, 1 ] != 0 )\r
2099                                         {\r
2100                                                 flagArray2[ numArray[ num27, 1 ] ] = true;\r
2101                                         }\r
2102                                 }\r
2103                                 StringBuilder[] builderArray2 = new StringBuilder[ 8 ];\r
2104                                 for( int num28 = 0; num28 < 8; num28++ )\r
2105                                 {\r
2106                                         builderArray2[ num28 ] = new StringBuilder();\r
2107                                 }\r
2108                                 for( int num29 = 0; num29 < num23; num29++ )\r
2109                                 {\r
2110                                         int num30 = ( numArray[ num29, 1 ] == 0xff ) ? 160 : ( numArray[ num29, 1 ] + 160 );\r
2111                                         for( int num31 = 0; num31 < 8; num31++ )\r
2112                                         {\r
2113                                                 if( flagArray2[ num31 ] )\r
2114                                                 {\r
2115                                                         if( num31 == ( num30 - 160 ) )\r
2116                                                         {\r
2117                                                                 builderArray2[ num31 ].Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num29, 0 ] ) );\r
2118                                                         }\r
2119                                                         else\r
2120                                                         {\r
2121                                                                 builderArray2[ num31 ].Append( "00" );\r
2122                                                         }\r
2123                                                 }\r
2124                                         }\r
2125                                 }\r
2126                                 for( int num32 = 0; num32 < 8; num32++ )\r
2127                                 {\r
2128                                         if( builderArray2[ num32 ].Length != 0 )\r
2129                                         {\r
2130                                                 sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( 160 + num32 ), builderArray2[ num32 ].ToString() );\r
2131                                         }\r
2132                                 }\r
2133                         }\r
2134                 }\r
2135                 private bool tDTX出力・全チップ・解像度をN分の1にできる( int N, ref int[ , ] arrチップ配列, int n現在の解像度 )\r
2136                 {\r
2137                         if( ( n現在の解像度 % N ) != 0 )\r
2138                         {\r
2139                                 return false;\r
2140                         }\r
2141                         for( int i = 0; i < ( n現在の解像度 / N ); i++ )\r
2142                         {\r
2143                                 for( int j = 1; j < N; j++ )\r
2144                                 {\r
2145                                         if( arrチップ配列[ ( i * N ) + j, 0 ] != 0 )\r
2146                                         {\r
2147                                                 return false;\r
2148                                         }\r
2149                                 }\r
2150                         }\r
2151                         return true;\r
2152                 }\r
2153 \r
2154                 #region [#23880 2010.12.30 yyagi: コンマとスペースの両方を小数点として扱うTryParse]\r
2155                 /// <summary>\r
2156                 /// 小数点としてコンマとピリオドの両方を受け付けるTryParse()\r
2157                 /// </summary>\r
2158                 /// <param name="s">strings convert to double</param>\r
2159                 /// <param name="result">parsed double value</param>\r
2160                 /// <returns>s が正常に変換された場合は true。それ以外の場合は false。</returns>\r
2161                 /// <exception cref="ArgumentException">style が NumberStyles 値でないか、style に NumberStyles.AllowHexSpecifier 値が含まれている</exception>\r
2162                 private bool TryParse(string s, out decimal result)\r
2163                 {       // #23880 2010.12.30 yyagi: alternative TryParse to permit both '.' and ',' for decimal point\r
2164                         // EU諸国での #BPM 123,45 のような記述に対応するため、\r
2165                         // 小数点の最終位置を検出して、それをlocaleにあった\r
2166                         // 文字に置き換えてからTryParse()する\r
2167                         // 桁区切りの文字はスキップする\r
2168 \r
2169                         const string DecimalSeparators = ".,";                          // 小数点文字\r
2170                         const string GroupSeparators = ".,' ";                          // 桁区切り文字\r
2171                         const string NumberSymbols = "0123456789";                      // 数値文字\r
2172 \r
2173                         int len = s.Length;                                                                     // 文字列長\r
2174                         int decimalPosition = len;                                                      // 真の小数点の位置 最初は文字列終端位置に仮置きする\r
2175 \r
2176                         for (int i = 0; i < len; i++)\r
2177                         {                                                       // まず、真の小数点(一番最後に現れる小数点)の位置を求める\r
2178                                 char c = s[i];\r
2179                                 if (NumberSymbols.IndexOf(c) >= 0)\r
2180                                 {                               // 数値だったらスキップ\r
2181                                         continue;\r
2182                                 }\r
2183                                 else if (DecimalSeparators.IndexOf(c) >= 0)\r
2184                                 {               // 小数点文字だったら、その都度位置を上書き記憶\r
2185                                         decimalPosition = i;\r
2186                                 }\r
2187                                 else if (GroupSeparators.IndexOf(c) >= 0)\r
2188                                 {               // 桁区切り文字の場合もスキップ\r
2189                                         continue;\r
2190                                 }\r
2191                                 else\r
2192                                 {                                                                                       // 数値・小数点・区切り文字以外がきたらループ終了\r
2193                                         break;\r
2194                                 }\r
2195                         }\r
2196 \r
2197                         StringBuilder decimalStr = new StringBuilder(16);\r
2198                         for (int i = 0; i < len; i++)\r
2199                         {                                                       // 次に、localeにあった数値文字列を生成する\r
2200                                 char c = s[i];\r
2201                                 if (NumberSymbols.IndexOf(c) >= 0)\r
2202                                 {                               // 数値だったら\r
2203                                         decimalStr.Append(c);                                                   // そのままコピー\r
2204                                 }\r
2205                                 else if (DecimalSeparators.IndexOf(c) >= 0)\r
2206                                 {               // 小数点文字だったら\r
2207                                         if (i == decimalPosition)\r
2208                                         {                                               // 最後に出現した小数点文字なら、localeに合った小数点を出力する\r
2209                                                 decimalStr.Append(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);\r
2210                                         }\r
2211                                 }\r
2212                                 else if (GroupSeparators.IndexOf(c) >= 0)\r
2213                                 {               // 桁区切り文字だったら\r
2214                                         continue;                                                                               // 何もしない(スキップ)\r
2215                                 }\r
2216                                 else\r
2217                                 {\r
2218                                         break;\r
2219                                 }\r
2220                         }\r
2221                         return decimal.TryParse(decimalStr.ToString(), out result);     // 最後に、自分のlocale向けの文字列に対してTryParse実行\r
2222                 }\r
2223                 #endregion\r
2224                 //-----------------\r
2225                 #endregion\r
2226         }\r
2227 }\r