OSDN Git Service

#23885 not to confuse "#PANEL strings (panel)" and "#PANEL int (panpot of EL).
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / スコア、曲 / CDTX.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using System.Diagnostics;\r
7 using System.IO;\r
8 using System.Security.Cryptography;\r
9 using System.Reflection;\r
10 using FDK;\r
11 \r
12 namespace DTXMania\r
13 {\r
14         internal class CDTX : CActivity\r
15         {\r
16                 // 定数\r
17 \r
18                 public enum E種別\r
19                 {\r
20                         DTX,\r
21                         GDA,\r
22                         G2D,\r
23                         BMS,\r
24                         BME,\r
25                         SMF\r
26                 }\r
27 \r
28                 // クラス\r
29 \r
30                 public class CAVI : IDisposable\r
31                 {\r
32                         public CAvi avi;\r
33                         private bool bDisposed;\r
34                         public int n番号;\r
35                         public string strコメント文 = "";\r
36                         public string strファイル名 = "";\r
37 \r
38                         public void OnDeviceCreated()\r
39                         {\r
40                                 string str;\r
41                                 string str2 = CDTXMania.DTX.PATH_WAV;\r
42                                 if( ( str2 != null ) && ( str2.Length > 0 ) )\r
43                                 {\r
44                                         str = str2 + this.strファイル名;\r
45                                 }\r
46                                 else\r
47                                 {\r
48                                         str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
49                                 }\r
50                                 if( File.Exists( str ) )\r
51                                 {\r
52                                         try\r
53                                         {\r
54                                                 this.avi = new CAvi( str );\r
55                                                 Trace.TraceInformation( "動画を生成しました。({0})({1})({2}frames)", new object[] { this.strコメント文, str, this.avi.GetMaxFrameCount() } );\r
56                                         }\r
57                                         catch( Exception exception )\r
58                                         {\r
59                                                 Trace.TraceError( exception.Message );\r
60                                                 Trace.TraceError( "動画の生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );\r
61                                                 this.avi = null;\r
62                                         }\r
63                                 }\r
64                                 else\r
65                                 {\r
66                                         Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );\r
67                                         this.avi = null;\r
68                                 }\r
69                         }\r
70                         public override string ToString()\r
71                         {\r
72                                 return string.Format( "CAVI{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );\r
73                         }\r
74 \r
75                         #region [ IDisposable 実装 ]\r
76                         //-----------------\r
77                         public void Dispose()\r
78                         {\r
79                                 if( !this.bDisposed )\r
80                                 {\r
81                                         if( this.avi != null )\r
82                                         {\r
83                                                 string str;\r
84                                                 string str2 = CDTXMania.DTX.PATH_WAV;\r
85                                                 if( ( str2 != null ) && ( str2.Length > 0 ) )\r
86                                                 {\r
87                                                         str = str2 + this.strファイル名;\r
88                                                 }\r
89                                                 else\r
90                                                 {\r
91                                                         str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
92                                                 }\r
93                                                 this.avi.Dispose();\r
94                                                 this.avi = null;\r
95                                                 Trace.TraceInformation( "動画を解放しました。({0})({1})", new object[] { this.strコメント文, str } );\r
96                                         }\r
97                                         this.bDisposed = true;\r
98                                 }\r
99                         }\r
100                         //-----------------\r
101                         #endregion\r
102                 }\r
103                 public class CAVIPAN\r
104                 {\r
105                         public int nAVI番号;\r
106                         public int n移動時間ct;\r
107                         public int n番号;\r
108                         public Point pt動画側開始位置 = new Point( 0, 0 );\r
109                         public Point pt動画側終了位置 = new Point( 0, 0 );\r
110                         public Point pt表示側開始位置 = new Point( 0, 0 );\r
111                         public Point pt表示側終了位置 = new Point( 0, 0 );\r
112                         public Size sz開始サイズ = new Size( 0, 0 );\r
113                         public Size sz終了サイズ = new Size( 0, 0 );\r
114 \r
115                         public override string ToString()\r
116                         {\r
117                                 return string.Format( "CAVIPAN{0}: AVI:{14}, 開始サイズ:{1}x{2}, 終了サイズ:{3}x{4}, 動画側開始位置:{5}x{6}, 動画側終了位置:{7}x{8}, 表示側開始位置:{9}x{10}, 表示側終了位置:{11}x{12}, 移動時間:{13}ct", new object[] { CDTX.tZZ( this.n番号 ), this.sz開始サイズ.Width, this.sz開始サイズ.Height, this.sz終了サイズ.Width, this.sz終了サイズ.Height, this.pt動画側開始位置.X, this.pt動画側開始位置.Y, this.pt動画側終了位置.X, this.pt動画側終了位置.Y, this.pt表示側開始位置.X, this.pt表示側開始位置.Y, this.pt表示側終了位置.X, this.pt表示側終了位置.Y, this.n移動時間ct, CDTX.tZZ( this.nAVI番号 ) } );\r
118                         }\r
119                 }\r
120                 public class CBGA\r
121                 {\r
122                         public int nBMP番号;\r
123                         public int n番号;\r
124                         public Point pt画像側右下座標 = new Point( 0, 0 );\r
125                         public Point pt画像側左上座標 = new Point( 0, 0 );\r
126                         public Point pt表示座標 = new Point( 0, 0 );\r
127 \r
128                         public override string ToString()\r
129                         {\r
130                                 return string.Format( "CBGA{0}, BMP:{1}, 画像側左上座標:{2}x{3}, 画像側右下座標:{4}x{5}, 表示座標:{6}x{7}", new object[] { CDTX.tZZ( this.n番号 ), CDTX.tZZ( this.nBMP番号 ), this.pt画像側左上座標.X, this.pt画像側左上座標.Y, this.pt画像側右下座標.X, this.pt画像側右下座標.Y, this.pt表示座標.X, this.pt表示座標.Y } );\r
131                         }\r
132                 }\r
133                 public class CBGAPAN\r
134                 {\r
135                         public int nBMP番号;\r
136                         public int n移動時間ct;\r
137                         public int n番号;\r
138                         public Point pt画像側開始位置 = new Point( 0, 0 );\r
139                         public Point pt画像側終了位置 = new Point( 0, 0 );\r
140                         public Point pt表示側開始位置 = new Point( 0, 0 );\r
141                         public Point pt表示側終了位置 = new Point( 0, 0 );\r
142                         public Size sz開始サイズ = new Size( 0, 0 );\r
143                         public Size sz終了サイズ = new Size( 0, 0 );\r
144 \r
145                         public override string ToString()\r
146                         {\r
147                                 return string.Format( "CBGAPAN{0}: BMP:{14}, 開始サイズ:{1}x{2}, 終了サイズ:{3}x{4}, 画像側開始位置:{5}x{6}, 画像側終了位置:{7}x{8}, 表示側開始位置:{9}x{10}, 表示側終了位置:{11}x{12}, 移動時間:{13}ct", new object[] { CDTX.tZZ( this.nBMP番号 ), this.sz開始サイズ.Width, this.sz開始サイズ.Height, this.sz終了サイズ.Width, this.sz終了サイズ.Height, this.pt画像側開始位置.X, this.pt画像側開始位置.Y, this.pt画像側終了位置.X, this.pt画像側終了位置.Y, this.pt表示側開始位置.X, this.pt表示側開始位置.Y, this.pt表示側終了位置.X, this.pt表示側終了位置.Y, this.n移動時間ct, CDTX.tZZ( this.nBMP番号 ) } );\r
148                         }\r
149                 }\r
150                 public class CBMP : IDisposable\r
151                 {\r
152                         public bool bUse;\r
153                         public int n番号;\r
154                         public string strコメント文 = "";\r
155                         public string strファイル名 = "";\r
156                         public CTexture tx画像;\r
157                         public int n高さ\r
158                         {\r
159                                 get\r
160                                 {\r
161                                         return this.tx画像.sz画像サイズ.Height;\r
162                                 }\r
163                         }\r
164                         public int n幅\r
165                         {\r
166                                 get\r
167                                 {\r
168                                         return this.tx画像.sz画像サイズ.Width;\r
169                                 }\r
170                         }\r
171 \r
172                         public void OnDeviceCreated()\r
173                         {\r
174                                 string str;\r
175                                 string str2 = CDTXMania.DTX.PATH_WAV;\r
176                                 if( ( str2 != null ) && ( str2.Length > 0 ) )\r
177                                 {\r
178                                         str = str2 + this.strファイル名;\r
179                                 }\r
180                                 else\r
181                                 {\r
182                                         str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
183                                 }\r
184                                 if( File.Exists( str ) )\r
185                                 {\r
186                                         this.tx画像 = CDTXMania.tテクスチャの生成( str, true );\r
187                                         if( this.tx画像 != null )\r
188                                         {\r
189                                                 if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
190                                                 {\r
191                                                         Trace.TraceInformation( "テクスチャを生成しました。({0})({1})({2}x{3})", new object[] { this.strコメント文, str, this.n幅, this.n高さ } );\r
192                                                 }\r
193                                                 this.bUse = true;\r
194                                         }\r
195                                         else\r
196                                         {\r
197                                                 Trace.TraceError( "テクスチャの生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );\r
198                                                 this.tx画像 = null;\r
199                                         }\r
200                                 }\r
201                                 else\r
202                                 {\r
203                                         Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );\r
204                                         this.tx画像 = null;\r
205                                 }\r
206                         }\r
207                         public override string ToString()\r
208                         {\r
209                                 return string.Format( "CBMP{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );\r
210                         }\r
211 \r
212                         #region [ IDisposable 実装 ]\r
213                         //-----------------\r
214                         public void Dispose()\r
215                         {\r
216                                 if( !this.bDisposed済み )\r
217                                 {\r
218                                         if( this.tx画像 != null )\r
219                                         {\r
220                                                 string str;\r
221                                                 string str2 = CDTXMania.DTX.PATH_WAV;\r
222                                                 if( ( str2 != null ) && ( str2.Length > 0 ) )\r
223                                                 {\r
224                                                         str = str2 + this.strファイル名;\r
225                                                 }\r
226                                                 else\r
227                                                 {\r
228                                                         str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
229                                                 }\r
230                                                 CDTXMania.tテクスチャの解放( ref this.tx画像 );\r
231                                                 if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
232                                                 {\r
233                                                         Trace.TraceInformation( "テクスチャを解放しました。({0})({1})", new object[] { this.strコメント文, str } );\r
234                                                 }\r
235                                         }\r
236                                         this.bUse = false;\r
237                                         this.bDisposed済み = true;\r
238                                 }\r
239                         }\r
240                         //-----------------\r
241                         #endregion\r
242 \r
243                         #region [ private ]\r
244                         //-----------------\r
245                         private bool bDisposed済み;\r
246                         //-----------------\r
247                         #endregion\r
248                 }\r
249                 public class CBMPTEX : IDisposable\r
250                 {\r
251                         public bool bUse;\r
252                         public int n番号;\r
253                         public string strコメント文 = "";\r
254                         public string strファイル名 = "";\r
255                         public CTexture tx画像;\r
256                         public int n高さ\r
257                         {\r
258                                 get\r
259                                 {\r
260                                         return this.tx画像.sz画像サイズ.Height;\r
261                                 }\r
262                         }\r
263                         public int n幅\r
264                         {\r
265                                 get\r
266                                 {\r
267                                         return this.tx画像.sz画像サイズ.Width;\r
268                                 }\r
269                         }\r
270 \r
271                         public void OnDeviceCreated()\r
272                         {\r
273                                 string str;\r
274                                 string str2 = CDTXMania.DTX.PATH_WAV;\r
275                                 if( ( str2 != null ) && ( str2.Length > 0 ) )\r
276                                 {\r
277                                         str = str2 + this.strファイル名;\r
278                                 }\r
279                                 else\r
280                                 {\r
281                                         str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
282                                 }\r
283                                 if( File.Exists( str ) )\r
284                                 {\r
285                                         this.tx画像 = CDTXMania.tテクスチャの生成( str );\r
286                                         if( this.tx画像 != null )\r
287                                         {\r
288                                                 if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
289                                                 {\r
290                                                         Trace.TraceInformation( "テクスチャを生成しました。({0})({1})(Gr:{2}x{3})(Tx:{4}x{5})", new object[] { this.strコメント文, str, this.tx画像.sz画像サイズ.Width, this.tx画像.sz画像サイズ.Height, this.tx画像.szテクスチャサイズ.Width, this.tx画像.szテクスチャサイズ.Height } );\r
291                                                 }\r
292                                                 this.bUse = true;\r
293                                         }\r
294                                         else\r
295                                         {\r
296                                                 Trace.TraceError( "テクスチャの生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );\r
297                                         }\r
298                                 }\r
299                                 else\r
300                                 {\r
301                                         Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );\r
302                                         this.tx画像 = null;\r
303                                 }\r
304                         }\r
305                         public override string ToString()\r
306                         {\r
307                                 return string.Format( "CBMPTEX{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );\r
308                         }\r
309 \r
310                         #region [ IDisposable 実装 ]\r
311                         //-----------------\r
312                         public void Dispose()\r
313                         {\r
314                                 if( !this.bDisposed済み )\r
315                                 {\r
316                                         if( this.tx画像 != null )\r
317                                         {\r
318                                                 string str;\r
319                                                 string str2 = CDTXMania.DTX.PATH_WAV;\r
320                                                 if( ( str2 != null ) && ( str2.Length > 0 ) )\r
321                                                 {\r
322                                                         str = str2 + this.strファイル名;\r
323                                                 }\r
324                                                 else\r
325                                                 {\r
326                                                         str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;\r
327                                                 }\r
328                                                 CDTXMania.tテクスチャの解放( ref this.tx画像 );\r
329                                                 if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
330                                                 {\r
331                                                         Trace.TraceInformation( "テクスチャを解放しました。({0})({1})", new object[] { this.strコメント文, str } );\r
332                                                 }\r
333                                         }\r
334                                         this.bUse = false;\r
335                                         this.bDisposed済み = true;\r
336                                 }\r
337                         }\r
338                         //-----------------\r
339                         #endregion\r
340 \r
341                         #region [ private ]\r
342                         //-----------------\r
343                         private bool bDisposed済み;\r
344                         //-----------------\r
345                         #endregion\r
346                 }\r
347                 public class CBPM\r
348                 {\r
349                         public double dbBPM値;\r
350                         public int n内部番号;\r
351                         public int n表記上の番号;\r
352 \r
353                         public override string ToString()\r
354                         {\r
355                                 StringBuilder builder = new StringBuilder( 0x80 );\r
356                                 if( this.n内部番号 != this.n表記上の番号 )\r
357                                 {\r
358                                         builder.Append( string.Format( "CBPM{0}(内部{1})", CDTX.tZZ( this.n表記上の番号 ), this.n内部番号 ) );\r
359                                 }\r
360                                 else\r
361                                 {\r
362                                         builder.Append( string.Format( "CBPM{0}", CDTX.tZZ( this.n表記上の番号 ) ) );\r
363                                 }\r
364                                 builder.Append( string.Format( ", BPM:{0}", this.dbBPM値 ) );\r
365                                 return builder.ToString();\r
366                         }\r
367                 }\r
368                 public class CChip : IComparable<CDTX.CChip>\r
369                 {\r
370                         public bool bHit;\r
371                         public bool b可視 = true;\r
372                         public double dbチップサイズ倍率 = 1.0;\r
373                         public double db実数値;\r
374                         public EAVI種別 eAVI種別;\r
375                         public EBGA種別 eBGA種別;\r
376                         public E楽器パート e楽器パート = E楽器パート.UNKNOWN;\r
377                         public int nチャンネル番号;\r
378                         public STDGBVALUE<int> nバーからの距離dot;\r
379                         public int n整数値;\r
380                         public int n整数値・内部番号;\r
381                         public int n総移動時間;\r
382                         public int n透明度 = 0xff;\r
383                         public int n発声位置;\r
384                         public int n発声時刻ms;\r
385                         public CDTX.CAVI rAVI;\r
386                         public CDTX.CAVIPAN rAVIPan;\r
387                         public CDTX.CBGA rBGA;\r
388                         public CDTX.CBGAPAN rBGAPan;\r
389                         public CDTX.CBMP rBMP;\r
390                         public CDTX.CBMPTEX rBMPTEX;\r
391                         public bool bBPMチップである\r
392                         {\r
393                                 get\r
394                                 {\r
395                                         if( this.nチャンネル番号 != 3 )\r
396                                         {\r
397                                                 return ( this.nチャンネル番号 == 8 );\r
398                                         }\r
399                                         return true;\r
400                                 }\r
401                         }\r
402                         public bool bWAVを使うチャンネルである\r
403                         {\r
404                                 get\r
405                                 {\r
406                                         switch( this.nチャンネル番号 )\r
407                                         {\r
408                                                 case 1:\r
409                                                 case 0x11:\r
410                                                 case 0x12:\r
411                                                 case 0x13:\r
412                                                 case 20:\r
413                                                 case 0x15:\r
414                                                 case 0x16:\r
415                                                 case 0x17:\r
416                                                 case 0x18:\r
417                                                 case 0x19:\r
418                                                 case 0x1a:\r
419                                                 case 0x1f:\r
420                                                 case 0x20:\r
421                                                 case 0x21:\r
422                                                 case 0x22:\r
423                                                 case 0x23:\r
424                                                 case 0x24:\r
425                                                 case 0x25:\r
426                                                 case 0x26:\r
427                                                 case 0x27:\r
428                                                 case 0x2f:\r
429                                                 case 0x31:\r
430                                                 case 50:\r
431                                                 case 0x33:\r
432                                                 case 0x34:\r
433                                                 case 0x35:\r
434                                                 case 0x36:\r
435                                                 case 0x37:\r
436                                                 case 0x38:\r
437                                                 case 0x39:\r
438                                                 case 0x3a:\r
439                                                 case 0x61:\r
440                                                 case 0x62:\r
441                                                 case 0x63:\r
442                                                 case 100:\r
443                                                 case 0x65:\r
444                                                 case 0x66:\r
445                                                 case 0x67:\r
446                                                 case 0x68:\r
447                                                 case 0x69:\r
448                                                 case 0x70:\r
449                                                 case 0x71:\r
450                                                 case 0x72:\r
451                                                 case 0x73:\r
452                                                 case 0x74:\r
453                                                 case 0x75:\r
454                                                 case 0x76:\r
455                                                 case 0x77:\r
456                                                 case 120:\r
457                                                 case 0x79:\r
458                                                 case 0x80:\r
459                                                 case 0x81:\r
460                                                 case 130:\r
461                                                 case 0x83:\r
462                                                 case 0x84:\r
463                                                 case 0x85:\r
464                                                 case 0x86:\r
465                                                 case 0x87:\r
466                                                 case 0x88:\r
467                                                 case 0x89:\r
468                                                 case 0x90:\r
469                                                 case 0x91:\r
470                                                 case 0x92:\r
471                                                 case 160:\r
472                                                 case 0xa1:\r
473                                                 case 0xa2:\r
474                                                 case 0xa3:\r
475                                                 case 0xa4:\r
476                                                 case 0xa5:\r
477                                                 case 0xa6:\r
478                                                 case 0xa7:\r
479                                                 case 0xaf:\r
480                                                 case 0xb1:\r
481                                                 case 0xb2:\r
482                                                 case 0xb3:\r
483                                                 case 180:\r
484                                                 case 0xb5:\r
485                                                 case 0xb6:\r
486                                                 case 0xb7:\r
487                                                 case 0xb8:\r
488                                                 case 0xb9:\r
489                                                 case 0xba:\r
490                                                 case 0xbb:\r
491                                                 case 0xbc:\r
492                                                         return true;\r
493                                         }\r
494                                         return false;\r
495                                 }\r
496                         }\r
497                         public bool b自動再生音チャンネルである\r
498                         {\r
499                                 get\r
500                                 {\r
501                                         int num = this.nチャンネル番号;\r
502                                         if( ( ( ( num != 1 ) && ( ( 0x61 > num ) || ( num > 0x69 ) ) ) && ( ( 0x70 > num ) || ( num > 0x79 ) ) ) && ( ( 0x80 > num ) || ( num > 0x89 ) ) )\r
503                                         {\r
504                                                 return ( ( 0x90 <= num ) && ( num <= 0x92 ) );\r
505                                         }\r
506                                         return true;\r
507                                 }\r
508                         }\r
509 \r
510                         public CChip()\r
511                         {\r
512                                 STDGBVALUE<int> stdgbvalue = new STDGBVALUE<int>();\r
513                                 stdgbvalue.Drums = 0;\r
514                                 stdgbvalue.Guitar = 0;\r
515                                 stdgbvalue.Bass = 0;\r
516                                 this.nバーからの距離dot = stdgbvalue;\r
517                         }\r
518                         public void t初期化()\r
519                         {\r
520                                 this.nチャンネル番号 = 0;\r
521                                 this.n整数値 = 0;\r
522                                 this.n整数値・内部番号 = 0;\r
523                                 this.db実数値 = 0.0;\r
524                                 this.n発声位置 = 0;\r
525                                 this.n発声時刻ms = 0;\r
526                                 this.dbチップサイズ倍率 = 1.0;\r
527                                 this.bHit = false;\r
528                                 this.b可視 = true;\r
529                                 this.e楽器パート = E楽器パート.UNKNOWN;\r
530                                 this.n透明度 = 0xff;\r
531                                 this.nバーからの距離dot.Drums = 0;\r
532                                 this.nバーからの距離dot.Guitar = 0;\r
533                                 this.nバーからの距離dot.Bass = 0;\r
534                                 this.n総移動時間 = 0;\r
535                         }\r
536                         public override string ToString()\r
537                         {\r
538                                 string str = "";\r
539                                 switch( this.nチャンネル番号 )\r
540                                 {\r
541                                         case 1:\r
542                                                 str = "バックコーラス";\r
543                                                 break;\r
544 \r
545                                         case 2:\r
546                                                 str = "小節長変更";\r
547                                                 break;\r
548 \r
549                                         case 3:\r
550                                                 str = "BPM変更";\r
551                                                 break;\r
552 \r
553                                         case 4:\r
554                                                 str = "BMPレイヤ1";\r
555                                                 break;\r
556 \r
557                                         case 7:\r
558                                                 str = "BMPレイヤ2";\r
559                                                 break;\r
560 \r
561                                         case 8:\r
562                                                 str = "BPM変更(拡張)";\r
563                                                 break;\r
564 \r
565                                         case 0x11:\r
566                                                 str = "HHClose";\r
567                                                 break;\r
568 \r
569                                         case 0x12:\r
570                                                 str = "Snare";\r
571                                                 break;\r
572 \r
573                                         case 0x13:\r
574                                                 str = "Kick";\r
575                                                 break;\r
576 \r
577                                         case 20:\r
578                                                 str = "HiTom";\r
579                                                 break;\r
580 \r
581                                         case 0x15:\r
582                                                 str = "LowTom";\r
583                                                 break;\r
584 \r
585                                         case 0x16:\r
586                                                 str = "Cymbal";\r
587                                                 break;\r
588 \r
589                                         case 0x17:\r
590                                                 str = "FloorTom";\r
591                                                 break;\r
592 \r
593                                         case 0x18:\r
594                                                 str = "HHOpen";\r
595                                                 break;\r
596 \r
597                                         case 0x19:\r
598                                                 str = "RideCymbal";\r
599                                                 break;\r
600 \r
601                                         case 0x1a:\r
602                                                 str = "LeftCymbal";\r
603                                                 break;\r
604 \r
605                                         case 0x1f:\r
606                                                 str = "ドラム歓声切替";\r
607                                                 break;\r
608 \r
609                                         case 0x20:\r
610                                                 str = "ギターOPEN";\r
611                                                 break;\r
612 \r
613                                         case 0x21:\r
614                                                 str = "ギター - - B";\r
615                                                 break;\r
616 \r
617                                         case 0x22:\r
618                                                 str = "ギター - G -";\r
619                                                 break;\r
620 \r
621                                         case 0x23:\r
622                                                 str = "ギター - G B";\r
623                                                 break;\r
624 \r
625                                         case 0x24:\r
626                                                 str = "ギター R - -";\r
627                                                 break;\r
628 \r
629                                         case 0x25:\r
630                                                 str = "ギター R - B";\r
631                                                 break;\r
632 \r
633                                         case 0x26:\r
634                                                 str = "ギター R G -";\r
635                                                 break;\r
636 \r
637                                         case 0x27:\r
638                                                 str = "ギター R G B";\r
639                                                 break;\r
640 \r
641                                         case 40:\r
642                                                 str = "ギターWailing";\r
643                                                 break;\r
644 \r
645                                         case 0x2f:\r
646                                                 str = "ギターWailing音切替";\r
647                                                 break;\r
648 \r
649                                         case 0x31:\r
650                                                 str = "HHClose(不可視)";\r
651                                                 break;\r
652 \r
653                                         case 50:\r
654                                                 str = "Snare(不可視)";\r
655                                                 break;\r
656 \r
657                                         case 0x33:\r
658                                                 str = "Kick(不可視)";\r
659                                                 break;\r
660 \r
661                                         case 0x34:\r
662                                                 str = "HiTom(不可視)";\r
663                                                 break;\r
664 \r
665                                         case 0x35:\r
666                                                 str = "LowTom(不可視)";\r
667                                                 break;\r
668 \r
669                                         case 0x36:\r
670                                                 str = "Cymbal(不可視)";\r
671                                                 break;\r
672 \r
673                                         case 0x37:\r
674                                                 str = "FloorTom(不可視)";\r
675                                                 break;\r
676 \r
677                                         case 0x38:\r
678                                                 str = "HHOpen(不可視)";\r
679                                                 break;\r
680 \r
681                                         case 0x39:\r
682                                                 str = "RideCymbal(不可視)";\r
683                                                 break;\r
684 \r
685                                         case 0x3a:\r
686                                                 str = "LeftCymbal(不可視)";\r
687                                                 break;\r
688 \r
689                                         case 80:\r
690                                                 str = "小節線";\r
691                                                 break;\r
692 \r
693                                         case 0x51:\r
694                                                 str = "拍線";\r
695                                                 break;\r
696 \r
697                                         case 0x52:\r
698                                                 str = "MIDIコーラス";\r
699                                                 break;\r
700 \r
701                                         case 0x53:\r
702                                                 str = "フィルイン";\r
703                                                 break;\r
704 \r
705                                         case 0x54:\r
706                                                 str = "AVI";\r
707                                                 break;\r
708 \r
709                                         case 0x55:\r
710                                                 str = "BMPレイヤ3";\r
711                                                 break;\r
712 \r
713                                         case 0x56:\r
714                                                 str = "BMPレイヤ4";\r
715                                                 break;\r
716 \r
717                                         case 0x57:\r
718                                                 str = "BMPレイヤ5";\r
719                                                 break;\r
720 \r
721                                         case 0x58:\r
722                                                 str = "BMPレイヤ6";\r
723                                                 break;\r
724 \r
725                                         case 0x59:\r
726                                                 str = "BMPレイヤ7";\r
727                                                 break;\r
728 \r
729                                         case 0x60:\r
730                                                 str = "BMPレイヤ8";\r
731                                                 break;\r
732 \r
733                                         case 0x61:\r
734                                                 str = "SE01";\r
735                                                 break;\r
736 \r
737                                         case 0x62:\r
738                                                 str = "SE02";\r
739                                                 break;\r
740 \r
741                                         case 0x63:\r
742                                                 str = "SE03";\r
743                                                 break;\r
744 \r
745                                         case 100:\r
746                                                 str = "SE04";\r
747                                                 break;\r
748 \r
749                                         case 0x65:\r
750                                                 str = "SE05";\r
751                                                 break;\r
752 \r
753                                         case 0x66:\r
754                                                 str = "SE06";\r
755                                                 break;\r
756 \r
757                                         case 0x67:\r
758                                                 str = "SE07";\r
759                                                 break;\r
760 \r
761                                         case 0x68:\r
762                                                 str = "SE08";\r
763                                                 break;\r
764 \r
765                                         case 0x69:\r
766                                                 str = "SE09";\r
767                                                 break;\r
768 \r
769                                         case 0x70:\r
770                                                 str = "SE10";\r
771                                                 break;\r
772 \r
773                                         case 0x71:\r
774                                                 str = "SE11";\r
775                                                 break;\r
776 \r
777                                         case 0x72:\r
778                                                 str = "SE12";\r
779                                                 break;\r
780 \r
781                                         case 0x73:\r
782                                                 str = "SE13";\r
783                                                 break;\r
784 \r
785                                         case 0x74:\r
786                                                 str = "SE14";\r
787                                                 break;\r
788 \r
789                                         case 0x75:\r
790                                                 str = "SE15";\r
791                                                 break;\r
792 \r
793                                         case 0x76:\r
794                                                 str = "SE16";\r
795                                                 break;\r
796 \r
797                                         case 0x77:\r
798                                                 str = "SE17";\r
799                                                 break;\r
800 \r
801                                         case 120:\r
802                                                 str = "SE18";\r
803                                                 break;\r
804 \r
805                                         case 0x79:\r
806                                                 str = "SE19";\r
807                                                 break;\r
808 \r
809                                         case 0x80:\r
810                                                 str = "SE20";\r
811                                                 break;\r
812 \r
813                                         case 0x81:\r
814                                                 str = "SE21";\r
815                                                 break;\r
816 \r
817                                         case 130:\r
818                                                 str = "SE22";\r
819                                                 break;\r
820 \r
821                                         case 0x83:\r
822                                                 str = "SE23";\r
823                                                 break;\r
824 \r
825                                         case 0x84:\r
826                                                 str = "SE24";\r
827                                                 break;\r
828 \r
829                                         case 0x85:\r
830                                                 str = "SE25";\r
831                                                 break;\r
832 \r
833                                         case 0x86:\r
834                                                 str = "SE26";\r
835                                                 break;\r
836 \r
837                                         case 0x87:\r
838                                                 str = "SE27";\r
839                                                 break;\r
840 \r
841                                         case 0x88:\r
842                                                 str = "SE28";\r
843                                                 break;\r
844 \r
845                                         case 0x89:\r
846                                                 str = "SE29";\r
847                                                 break;\r
848 \r
849                                         case 0x90:\r
850                                                 str = "SE30";\r
851                                                 break;\r
852 \r
853                                         case 0x91:\r
854                                                 str = "SE31";\r
855                                                 break;\r
856 \r
857                                         case 0x92:\r
858                                                 str = "SE32";\r
859                                                 break;\r
860 \r
861                                         case 160:\r
862                                                 str = "ベースOPEN";\r
863                                                 break;\r
864 \r
865                                         case 0xa1:\r
866                                                 str = "ベース - - B";\r
867                                                 break;\r
868 \r
869                                         case 0xa2:\r
870                                                 str = "ベース - G -";\r
871                                                 break;\r
872 \r
873                                         case 0xa3:\r
874                                                 str = "ベース - G B";\r
875                                                 break;\r
876 \r
877                                         case 0xa4:\r
878                                                 str = "ベース R - -";\r
879                                                 break;\r
880 \r
881                                         case 0xa5:\r
882                                                 str = "ベース R - B";\r
883                                                 break;\r
884 \r
885                                         case 0xa6:\r
886                                                 str = "ベース R G -";\r
887                                                 break;\r
888 \r
889                                         case 0xa7:\r
890                                                 str = "ベース R G B";\r
891                                                 break;\r
892 \r
893                                         case 0xa8:\r
894                                                 str = "ベースWailing";\r
895                                                 break;\r
896 \r
897                                         case 0xaf:\r
898                                                 str = "ベースWailing音切替";\r
899                                                 break;\r
900 \r
901                                         case 0xb1:\r
902                                                 str = "HHClose(空うち)";\r
903                                                 break;\r
904 \r
905                                         case 0xb2:\r
906                                                 str = "Snare(空うち)";\r
907                                                 break;\r
908 \r
909                                         case 0xb3:\r
910                                                 str = "Kick(空うち)";\r
911                                                 break;\r
912 \r
913                                         case 180:\r
914                                                 str = "HiTom(空うち)";\r
915                                                 break;\r
916 \r
917                                         case 0xb5:\r
918                                                 str = "LowTom(空うち)";\r
919                                                 break;\r
920 \r
921                                         case 0xb6:\r
922                                                 str = "Cymbal(空うち)";\r
923                                                 break;\r
924 \r
925                                         case 0xb7:\r
926                                                 str = "FloorTom(空うち)";\r
927                                                 break;\r
928 \r
929                                         case 0xb8:\r
930                                                 str = "HHOpen(空うち)";\r
931                                                 break;\r
932 \r
933                                         case 0xb9:\r
934                                                 str = "RideCymbal(空うち)";\r
935                                                 break;\r
936 \r
937                                         case 0xba:\r
938                                                 str = "ギター(空打ち)";\r
939                                                 break;\r
940 \r
941                                         case 0xbb:\r
942                                                 str = "ベース(空打ち)";\r
943                                                 break;\r
944 \r
945                                         case 0xbc:\r
946                                                 str = "LeftCymbal(空うち)";\r
947                                                 break;\r
948 \r
949                                         case 0xc4:\r
950                                                 str = "BGAスコープ画像切替1";\r
951                                                 break;\r
952 \r
953                                         case 0xc7:\r
954                                                 str = "BGAスコープ画像切替2";\r
955                                                 break;\r
956 \r
957                                         case 0xd5:\r
958                                                 str = "BGAスコープ画像切替3";\r
959                                                 break;\r
960 \r
961                                         case 0xd6:\r
962                                                 str = "BGAスコープ画像切替4";\r
963                                                 break;\r
964 \r
965                                         case 0xd7:\r
966                                                 str = "BGAスコープ画像切替5";\r
967                                                 break;\r
968 \r
969                                         case 0xd8:\r
970                                                 str = "BGAスコープ画像切替6";\r
971                                                 break;\r
972 \r
973                                         case 0xd9:\r
974                                                 str = "BGAスコープ画像切替7";\r
975                                                 break;\r
976 \r
977                                         case 0xe0:\r
978                                                 str = "BGAスコープ画像切替8";\r
979                                                 break;\r
980 \r
981                                         default:\r
982                                                 str = "??";\r
983                                                 break;\r
984                                 }\r
985                                 return string.Format( "CChip: 位置:{0:D4}.{1:D3}, 時刻{2:D6}, Ch:{3:X2}({4}), Pn:{5}({11})(内部{6}), Pd:{7}, Sz:{8}, UseWav:{9}, Auto:{10}", new object[] { this.n発声位置 / 0x180, this.n発声位置 % 0x180, this.n発声時刻ms, this.nチャンネル番号, str, this.n整数値, this.n整数値・内部番号, this.db実数値, this.dbチップサイズ倍率, this.bWAVを使うチャンネルである, this.b自動再生音チャンネルである, CDTX.tZZ( this.n整数値 ) } );\r
986                         }\r
987 \r
988                         #region [ IComparable 実装 ]\r
989                         //-----------------\r
990                         public int CompareTo( CDTX.CChip other )\r
991                         {\r
992                                 byte[] buffer = new byte[] { \r
993                 5, 5, 3, 3, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 5, 5, \r
994                 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, \r
995                 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, \r
996                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
997                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
998                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
999                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
1000                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
1001                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
1002                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
1003                 7, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, \r
1004                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
1005                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
1006                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
1007                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r
1008                 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5\r
1009              };\r
1010                                 if( this.n発声位置 < other.n発声位置 )\r
1011                                 {\r
1012                                         return -1;\r
1013                                 }\r
1014                                 if( this.n発声位置 > other.n発声位置 )\r
1015                                 {\r
1016                                         return 1;\r
1017                                 }\r
1018                                 if( buffer[ this.nチャンネル番号 ] < buffer[ other.nチャンネル番号 ] )\r
1019                                 {\r
1020                                         return -1;\r
1021                                 }\r
1022                                 if( buffer[ this.nチャンネル番号 ] > buffer[ other.nチャンネル番号 ] )\r
1023                                 {\r
1024                                         return 1;\r
1025                                 }\r
1026                                 return 0;\r
1027                         }\r
1028                         //-----------------\r
1029                         #endregion\r
1030                 }\r
1031                 public class CWAV : IDisposable\r
1032                 {\r
1033                         public bool bBGMとして使う;\r
1034                         public List<int> listこのWAVを使用するチャンネル番号の集合 = new List<int>( 0x10 );\r
1035                         public int nチップサイズ = 100;\r
1036                         public int n位置;\r
1037                         public long[] n一時停止時刻 = new long[ 4 ];\r
1038                         public int n音量 = 100;\r
1039                         public int n現在再生中のサウンド番号;\r
1040                         public long[] n再生開始時刻 = new long[ 4 ];\r
1041                         public int n内部番号;\r
1042                         public int n表記上の番号;\r
1043                         public CSound[] rSound = new CSound[ 4 ];\r
1044                         public string strコメント文 = "";\r
1045                         public string strファイル名 = "";\r
1046                         public bool bBGMとして使わない\r
1047                         {\r
1048                                 get\r
1049                                 {\r
1050                                         return !this.bBGMとして使う;\r
1051                                 }\r
1052                                 set\r
1053                                 {\r
1054                                         this.bBGMとして使う = !value;\r
1055                                 }\r
1056                         }\r
1057 \r
1058                         public override string ToString()\r
1059                         {\r
1060                                 StringBuilder builder = new StringBuilder( 0x80 );\r
1061                                 if( this.n表記上の番号 == this.n内部番号 )\r
1062                                 {\r
1063                                         builder.Append( string.Format( "CWAV{0}: ", CDTX.tZZ( this.n表記上の番号 ) ) );\r
1064                                 }\r
1065                                 else\r
1066                                 {\r
1067                                         builder.Append( string.Format( "CWAV{0}(内部{1}): ", CDTX.tZZ( this.n表記上の番号 ), this.n内部番号 ) );\r
1068                                 }\r
1069                                 builder.Append( string.Format( "音量:{0}, 位置:{1}, サイズ:{2}, BGM:{3}, File:{4}, Comment:{5}", new object[] { this.n音量, this.n位置, this.nチップサイズ, this.bBGMとして使う ? 'Y' : 'N', this.strファイル名, this.strコメント文 } ) );\r
1070                                 return builder.ToString();\r
1071                         }\r
1072 \r
1073                         #region [ IDisposable+α実装 ]\r
1074                         //-----------------\r
1075                         public void Dispose()\r
1076                         {\r
1077                                 this.Dispose( true );\r
1078                         }\r
1079                         public void Dispose( bool bサウンドのDisposeも行う )\r
1080                         {\r
1081                                 if( !this.bDisposed済み )\r
1082                                 {\r
1083                                         for( int i = 0; i < 4; i++ )\r
1084                                         {\r
1085                                                 if( bサウンドのDisposeも行う && ( this.rSound[ i ] != null ) )\r
1086                                                 {\r
1087                                                         CDTXMania.Sound管理.tサウンドを破棄する( this.rSound[ i ] );\r
1088                                                 }\r
1089                                                 this.rSound[ i ] = null;\r
1090                                                 if( ( i == 0 ) && CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
1091                                                 {\r
1092                                                         Trace.TraceInformation( "サウンドを解放しました。({0})({1})", new object[] { this.strコメント文, this.strファイル名 } );\r
1093                                                 }\r
1094                                         }\r
1095                                         this.bDisposed済み = true;\r
1096                                 }\r
1097                         }\r
1098                         //-----------------\r
1099                         #endregion\r
1100 \r
1101                         #region [ private ]\r
1102                         //-----------------\r
1103                         private bool bDisposed済み;\r
1104                         //-----------------\r
1105                         #endregion\r
1106                 }\r
1107                 \r
1108 \r
1109                 // 構造体\r
1110 \r
1111                 [StructLayout( LayoutKind.Sequential )]\r
1112                 public struct STLANEINT\r
1113                 {\r
1114                         public int HH;\r
1115                         public int SD;\r
1116                         public int BD;\r
1117                         public int HT;\r
1118                         public int LT;\r
1119                         public int CY;\r
1120                         public int FT;\r
1121                         public int HHO;\r
1122                         public int RD;\r
1123                         public int LC;\r
1124                         public int Guitar;\r
1125                         public int Bass;\r
1126                         public int this[ int index ]\r
1127                         {\r
1128                                 get\r
1129                                 {\r
1130                                         switch( index )\r
1131                                         {\r
1132                                                 case 0:\r
1133                                                         return this.HH;\r
1134 \r
1135                                                 case 1:\r
1136                                                         return this.SD;\r
1137 \r
1138                                                 case 2:\r
1139                                                         return this.BD;\r
1140 \r
1141                                                 case 3:\r
1142                                                         return this.HT;\r
1143 \r
1144                                                 case 4:\r
1145                                                         return this.LT;\r
1146 \r
1147                                                 case 5:\r
1148                                                         return this.CY;\r
1149 \r
1150                                                 case 6:\r
1151                                                         return this.FT;\r
1152 \r
1153                                                 case 7:\r
1154                                                         return this.HHO;\r
1155 \r
1156                                                 case 8:\r
1157                                                         return this.RD;\r
1158 \r
1159                                                 case 9:\r
1160                                                         return this.LC;\r
1161 \r
1162                                                 case 10:\r
1163                                                         return this.Guitar;\r
1164 \r
1165                                                 case 11:\r
1166                                                         return this.Bass;\r
1167                                         }\r
1168                                         throw new IndexOutOfRangeException();\r
1169                                 }\r
1170                                 set\r
1171                                 {\r
1172                                         if( value < 0 )\r
1173                                         {\r
1174                                                 throw new ArgumentOutOfRangeException();\r
1175                                         }\r
1176                                         switch( index )\r
1177                                         {\r
1178                                                 case 0:\r
1179                                                         this.HH = value;\r
1180                                                         return;\r
1181 \r
1182                                                 case 1:\r
1183                                                         this.SD = value;\r
1184                                                         return;\r
1185 \r
1186                                                 case 2:\r
1187                                                         this.BD = value;\r
1188                                                         return;\r
1189 \r
1190                                                 case 3:\r
1191                                                         this.HT = value;\r
1192                                                         return;\r
1193 \r
1194                                                 case 4:\r
1195                                                         this.LT = value;\r
1196                                                         return;\r
1197 \r
1198                                                 case 5:\r
1199                                                         this.CY = value;\r
1200                                                         return;\r
1201 \r
1202                                                 case 6:\r
1203                                                         this.FT = value;\r
1204                                                         return;\r
1205 \r
1206                                                 case 7:\r
1207                                                         this.HHO = value;\r
1208                                                         return;\r
1209 \r
1210                                                 case 8:\r
1211                                                         this.RD = value;\r
1212                                                         return;\r
1213 \r
1214                                                 case 9:\r
1215                                                         this.LC = value;\r
1216                                                         return;\r
1217 \r
1218                                                 case 10:\r
1219                                                         this.Guitar = value;\r
1220                                                         return;\r
1221 \r
1222                                                 case 11:\r
1223                                                         this.Bass = value;\r
1224                                                         return;\r
1225                                         }\r
1226                                         throw new IndexOutOfRangeException();\r
1227                                 }\r
1228                         }\r
1229                         public int Drums\r
1230                         {\r
1231                                 get\r
1232                                 {\r
1233                                         return ( ( ( ( ( ( ( ( ( this.HH + this.SD ) + this.BD ) + this.HT ) + this.LT ) + this.CY ) + this.FT ) + this.HHO ) + this.RD ) + this.LC );\r
1234                                 }\r
1235                         }\r
1236                 }\r
1237                 \r
1238                 [StructLayout( LayoutKind.Sequential )]\r
1239                 public struct STRESULT\r
1240                 {\r
1241                         public string SS;\r
1242                         public string S;\r
1243                         public string A;\r
1244                         public string B;\r
1245                         public string C;\r
1246                         public string D;\r
1247                         public string E;\r
1248                         public string this[ int index ]\r
1249                         {\r
1250                                 get\r
1251                                 {\r
1252                                         switch( index )\r
1253                                         {\r
1254                                                 case 0:\r
1255                                                         return this.SS;\r
1256 \r
1257                                                 case 1:\r
1258                                                         return this.S;\r
1259 \r
1260                                                 case 2:\r
1261                                                         return this.A;\r
1262 \r
1263                                                 case 3:\r
1264                                                         return this.B;\r
1265 \r
1266                                                 case 4:\r
1267                                                         return this.C;\r
1268 \r
1269                                                 case 5:\r
1270                                                         return this.D;\r
1271 \r
1272                                                 case 6:\r
1273                                                         return this.E;\r
1274                                         }\r
1275                                         throw new IndexOutOfRangeException();\r
1276                                 }\r
1277                                 set\r
1278                                 {\r
1279                                         switch( index )\r
1280                                         {\r
1281                                                 case 0:\r
1282                                                         this.SS = value;\r
1283                                                         return;\r
1284 \r
1285                                                 case 1:\r
1286                                                         this.S = value;\r
1287                                                         return;\r
1288 \r
1289                                                 case 2:\r
1290                                                         this.A = value;\r
1291                                                         return;\r
1292 \r
1293                                                 case 3:\r
1294                                                         this.B = value;\r
1295                                                         return;\r
1296 \r
1297                                                 case 4:\r
1298                                                         this.C = value;\r
1299                                                         return;\r
1300 \r
1301                                                 case 5:\r
1302                                                         this.D = value;\r
1303                                                         return;\r
1304 \r
1305                                                 case 6:\r
1306                                                         this.E = value;\r
1307                                                         return;\r
1308                                         }\r
1309                                         throw new IndexOutOfRangeException();\r
1310                                 }\r
1311                         }\r
1312                 }\r
1313                 \r
1314                 [StructLayout( LayoutKind.Sequential )]\r
1315                 public struct STチップがある\r
1316                 {\r
1317                         public bool Drums;\r
1318                         public bool Guitar;\r
1319                         public bool Bass;\r
1320                         public bool HHOpen;\r
1321                         public bool Ride;\r
1322                         public bool LeftCymbal;\r
1323                         public bool OpenGuitar;\r
1324                         public bool OpenBass;\r
1325                         public bool this[ int index ]\r
1326                         {\r
1327                                 get\r
1328                                 {\r
1329                                         switch( index )\r
1330                                         {\r
1331                                                 case 0:\r
1332                                                         return this.Drums;\r
1333 \r
1334                                                 case 1:\r
1335                                                         return this.Guitar;\r
1336 \r
1337                                                 case 2:\r
1338                                                         return this.Bass;\r
1339 \r
1340                                                 case 3:\r
1341                                                         return this.HHOpen;\r
1342 \r
1343                                                 case 4:\r
1344                                                         return this.Ride;\r
1345 \r
1346                                                 case 5:\r
1347                                                         return this.LeftCymbal;\r
1348 \r
1349                                                 case 6:\r
1350                                                         return this.OpenGuitar;\r
1351 \r
1352                                                 case 7:\r
1353                                                         return this.OpenBass;\r
1354                                         }\r
1355                                         throw new IndexOutOfRangeException();\r
1356                                 }\r
1357                                 set\r
1358                                 {\r
1359                                         switch( index )\r
1360                                         {\r
1361                                                 case 0:\r
1362                                                         this.Drums = value;\r
1363                                                         return;\r
1364 \r
1365                                                 case 1:\r
1366                                                         this.Guitar = value;\r
1367                                                         return;\r
1368 \r
1369                                                 case 2:\r
1370                                                         this.Bass = value;\r
1371                                                         return;\r
1372 \r
1373                                                 case 3:\r
1374                                                         this.HHOpen = value;\r
1375                                                         return;\r
1376 \r
1377                                                 case 4:\r
1378                                                         this.Ride = value;\r
1379                                                         return;\r
1380 \r
1381                                                 case 5:\r
1382                                                         this.LeftCymbal = value;\r
1383                                                         return;\r
1384 \r
1385                                                 case 6:\r
1386                                                         this.OpenGuitar = value;\r
1387                                                         return;\r
1388 \r
1389                                                 case 7:\r
1390                                                         this.OpenBass = value;\r
1391                                                         return;\r
1392                                         }\r
1393                                         throw new IndexOutOfRangeException();\r
1394                                 }\r
1395                         }\r
1396                 }\r
1397 \r
1398 \r
1399                 // プロパティ\r
1400 \r
1401                 public int nBGMAdjust\r
1402                 {\r
1403                         get; \r
1404                         private set;\r
1405                 }\r
1406                 public string ARTIST;\r
1407                 public string BACKGROUND;\r
1408                 public string BACKGROUND_GR;\r
1409                 public double BASEBPM;\r
1410                 public bool BLACKCOLORKEY;\r
1411                 public double BPM;\r
1412                 public STチップがある bチップがある;\r
1413                 public string COMMENT;\r
1414                 public double db再生速度;\r
1415                 public E種別 e種別;\r
1416                 public string GENRE;\r
1417                 public bool HIDDENLEVEL;\r
1418                 public STDGBVALUE<int> LEVEL;\r
1419                 public Dictionary<int, CAVI> listAVI;\r
1420                 public Dictionary<int, CAVIPAN> listAVIPAN;\r
1421                 public Dictionary<int, CBGA> listBGA;\r
1422                 public Dictionary<int, CBGAPAN> listBGAPAN;\r
1423                 public Dictionary<int, CBMP> listBMP;\r
1424                 public Dictionary<int, CBMPTEX> listBMPTEX;\r
1425                 public Dictionary<int, CBPM> listBPM;\r
1426                 public List<CChip> listChip;\r
1427                 public Dictionary<int, CWAV> listWAV;\r
1428                 public string MIDIFILE;\r
1429                 public bool MIDINOTE;\r
1430                 public int MIDIレベル;\r
1431                 public STLANEINT n可視チップ数;\r
1432                 public const int n最大音数 = 4;\r
1433                 public const int n小節の解像度 = 0x180;\r
1434                 public string PANEL;\r
1435                 public string PATH_WAV;\r
1436                 public string PREIMAGE;\r
1437                 public string PREMOVIE;\r
1438                 public string PREVIEW;\r
1439                 public STRESULT RESULTIMAGE;\r
1440                 public STRESULT RESULTMOVIE;\r
1441                 public STRESULT RESULTSOUND;\r
1442                 public string SOUND_AUDIENCE;\r
1443                 public string SOUND_FULLCOMBO;\r
1444                 public string SOUND_NOWLOADING;\r
1445                 public string SOUND_STAGEFAILED;\r
1446                 public string STAGEFILE;\r
1447                 public string strハッシュofDTXファイル;\r
1448                 public string strファイル名;\r
1449                 public string strファイル名の絶対パス;\r
1450                 public string strフォルダ名;\r
1451                 public string TITLE;\r
1452 \r
1453 \r
1454                 // コンストラクタ\r
1455 \r
1456                 public CDTX()\r
1457                 {\r
1458                         this.TITLE = "";\r
1459                         this.ARTIST = "";\r
1460                         this.COMMENT = "";\r
1461                         this.PANEL = "";\r
1462                         this.GENRE = "";\r
1463                         this.PREVIEW = "";\r
1464                         this.PREIMAGE = "";\r
1465                         this.PREMOVIE = "";\r
1466                         this.STAGEFILE = "";\r
1467                         this.BACKGROUND = "";\r
1468                         this.BACKGROUND_GR = "";\r
1469                         this.PATH_WAV = "";\r
1470                         this.MIDIFILE = "";\r
1471                         this.SOUND_STAGEFAILED = "";\r
1472                         this.SOUND_FULLCOMBO = "";\r
1473                         this.SOUND_NOWLOADING = "";\r
1474                         this.SOUND_AUDIENCE = "";\r
1475                         this.BPM = 120.0;\r
1476                         this.BLACKCOLORKEY = true;\r
1477                         STDGBVALUE<int> stdgbvalue = new STDGBVALUE<int>();\r
1478                         stdgbvalue.Drums = 0;\r
1479                         stdgbvalue.Guitar = 0;\r
1480                         stdgbvalue.Bass = 0;\r
1481                         this.LEVEL = stdgbvalue;\r
1482                         STRESULT stresult4 = new STRESULT();\r
1483                         STRESULT stresult = stresult4;\r
1484                         stresult.SS = "";\r
1485                         stresult.S = "";\r
1486                         stresult.A = "";\r
1487                         stresult.B = "";\r
1488                         stresult.C = "";\r
1489                         stresult.D = "";\r
1490                         stresult.E = "";\r
1491                         this.RESULTIMAGE = stresult;\r
1492                         stresult4 = new STRESULT();\r
1493                         STRESULT stresult2 = stresult4;\r
1494                         stresult2.SS = "";\r
1495                         stresult2.S = "";\r
1496                         stresult2.A = "";\r
1497                         stresult2.B = "";\r
1498                         stresult2.C = "";\r
1499                         stresult2.D = "";\r
1500                         stresult2.E = "";\r
1501                         this.RESULTMOVIE = stresult2;\r
1502                         STRESULT stresult3 = new STRESULT();\r
1503                         stresult3.SS = "";\r
1504                         stresult3.S = "";\r
1505                         stresult3.A = "";\r
1506                         stresult3.B = "";\r
1507                         stresult3.C = "";\r
1508                         stresult3.D = "";\r
1509                         stresult3.E = "";\r
1510                         this.RESULTSOUND = stresult3;\r
1511                         this.db再生速度 = 1.0;\r
1512                         this.strハッシュofDTXファイル = "";\r
1513                         STチップがある stチップがある = new STチップがある();\r
1514                         stチップがある.Drums = false;\r
1515                         stチップがある.Guitar = false;\r
1516                         stチップがある.Bass = false;\r
1517                         stチップがある.HHOpen = false;\r
1518                         stチップがある.Ride = false;\r
1519                         stチップがある.LeftCymbal = false;\r
1520                         stチップがある.OpenGuitar = false;\r
1521                         stチップがある.OpenBass = false;\r
1522                         this.bチップがある = stチップがある;\r
1523                         this.strファイル名 = "";\r
1524                         this.strフォルダ名 = "";\r
1525                         this.strファイル名の絶対パス = "";\r
1526                         this.n無限管理WAV = new int[ 36 * 36 ];\r
1527                         this.n無限管理BPM = new int[ 36 * 36 ];\r
1528                         this.n無限管理VOL = new int[ 36 * 36 ];\r
1529                         this.n無限管理PAN = new int[ 36 * 36 ];\r
1530                         this.n無限管理SIZE = new int[ 36 * 36 ];\r
1531                         this.nRESULTIMAGE用優先順位 = new int[ 7 ];\r
1532                         this.nRESULTMOVIE用優先順位 = new int[ 7 ];\r
1533                         this.nRESULTSOUND用優先順位 = new int[ 7 ];\r
1534                         STGDAPARAM[] stgdaparamArray = new STGDAPARAM[ 0x3d ];\r
1535                         STGDAPARAM stgdaparam62 = new STGDAPARAM();\r
1536                         STGDAPARAM stgdaparam = stgdaparam62;\r
1537                         stgdaparam.s = "TC";\r
1538                         stgdaparam.c = 3;\r
1539                         stgdaparamArray[ 0 ] = stgdaparam;\r
1540                         stgdaparam62 = new STGDAPARAM();\r
1541                         STGDAPARAM stgdaparam2 = stgdaparam62;\r
1542                         stgdaparam2.s = "BL";\r
1543                         stgdaparam2.c = 2;\r
1544                         stgdaparamArray[ 1 ] = stgdaparam2;\r
1545                         stgdaparam62 = new STGDAPARAM();\r
1546                         STGDAPARAM stgdaparam3 = stgdaparam62;\r
1547                         stgdaparam3.s = "GS";\r
1548                         stgdaparam3.c = 0x29;\r
1549                         stgdaparamArray[ 2 ] = stgdaparam3;\r
1550                         stgdaparam62 = new STGDAPARAM();\r
1551                         STGDAPARAM stgdaparam4 = stgdaparam62;\r
1552                         stgdaparam4.s = "DS";\r
1553                         stgdaparam4.c = 0x30;\r
1554                         stgdaparamArray[ 3 ] = stgdaparam4;\r
1555                         stgdaparam62 = new STGDAPARAM();\r
1556                         STGDAPARAM stgdaparam5 = stgdaparam62;\r
1557                         stgdaparam5.s = "FI";\r
1558                         stgdaparam5.c = 0x53;\r
1559                         stgdaparamArray[ 4 ] = stgdaparam5;\r
1560                         stgdaparam62 = new STGDAPARAM();\r
1561                         STGDAPARAM stgdaparam6 = stgdaparam62;\r
1562                         stgdaparam6.s = "HH";\r
1563                         stgdaparam6.c = 0x11;\r
1564                         stgdaparamArray[ 5 ] = stgdaparam6;\r
1565                         stgdaparam62 = new STGDAPARAM();\r
1566                         STGDAPARAM stgdaparam7 = stgdaparam62;\r
1567                         stgdaparam7.s = "SD";\r
1568                         stgdaparam7.c = 0x12;\r
1569                         stgdaparamArray[ 6 ] = stgdaparam7;\r
1570                         stgdaparam62 = new STGDAPARAM();\r
1571                         STGDAPARAM stgdaparam8 = stgdaparam62;\r
1572                         stgdaparam8.s = "BD";\r
1573                         stgdaparam8.c = 0x13;\r
1574                         stgdaparamArray[ 7 ] = stgdaparam8;\r
1575                         stgdaparam62 = new STGDAPARAM();\r
1576                         STGDAPARAM stgdaparam9 = stgdaparam62;\r
1577                         stgdaparam9.s = "HT";\r
1578                         stgdaparam9.c = 20;\r
1579                         stgdaparamArray[ 8 ] = stgdaparam9;\r
1580                         stgdaparam62 = new STGDAPARAM();\r
1581                         STGDAPARAM stgdaparam10 = stgdaparam62;\r
1582                         stgdaparam10.s = "LT";\r
1583                         stgdaparam10.c = 0x15;\r
1584                         stgdaparamArray[ 9 ] = stgdaparam10;\r
1585                         stgdaparam62 = new STGDAPARAM();\r
1586                         STGDAPARAM stgdaparam11 = stgdaparam62;\r
1587                         stgdaparam11.s = "CY";\r
1588                         stgdaparam11.c = 0x16;\r
1589                         stgdaparamArray[ 10 ] = stgdaparam11;\r
1590                         stgdaparam62 = new STGDAPARAM();\r
1591                         STGDAPARAM stgdaparam12 = stgdaparam62;\r
1592                         stgdaparam12.s = "G1";\r
1593                         stgdaparam12.c = 0x21;\r
1594                         stgdaparamArray[ 11 ] = stgdaparam12;\r
1595                         stgdaparam62 = new STGDAPARAM();\r
1596                         STGDAPARAM stgdaparam13 = stgdaparam62;\r
1597                         stgdaparam13.s = "G2";\r
1598                         stgdaparam13.c = 0x22;\r
1599                         stgdaparamArray[ 12 ] = stgdaparam13;\r
1600                         stgdaparam62 = new STGDAPARAM();\r
1601                         STGDAPARAM stgdaparam14 = stgdaparam62;\r
1602                         stgdaparam14.s = "G3";\r
1603                         stgdaparam14.c = 0x23;\r
1604                         stgdaparamArray[ 13 ] = stgdaparam14;\r
1605                         stgdaparam62 = new STGDAPARAM();\r
1606                         STGDAPARAM stgdaparam15 = stgdaparam62;\r
1607                         stgdaparam15.s = "G4";\r
1608                         stgdaparam15.c = 0x24;\r
1609                         stgdaparamArray[ 14 ] = stgdaparam15;\r
1610                         stgdaparam62 = new STGDAPARAM();\r
1611                         STGDAPARAM stgdaparam16 = stgdaparam62;\r
1612                         stgdaparam16.s = "G5";\r
1613                         stgdaparam16.c = 0x25;\r
1614                         stgdaparamArray[ 15 ] = stgdaparam16;\r
1615                         stgdaparam62 = new STGDAPARAM();\r
1616                         STGDAPARAM stgdaparam17 = stgdaparam62;\r
1617                         stgdaparam17.s = "G6";\r
1618                         stgdaparam17.c = 0x26;\r
1619                         stgdaparamArray[ 0x10 ] = stgdaparam17;\r
1620                         stgdaparam62 = new STGDAPARAM();\r
1621                         STGDAPARAM stgdaparam18 = stgdaparam62;\r
1622                         stgdaparam18.s = "G7";\r
1623                         stgdaparam18.c = 0x27;\r
1624                         stgdaparamArray[ 0x11 ] = stgdaparam18;\r
1625                         stgdaparam62 = new STGDAPARAM();\r
1626                         STGDAPARAM stgdaparam19 = stgdaparam62;\r
1627                         stgdaparam19.s = "GW";\r
1628                         stgdaparam19.c = 40;\r
1629                         stgdaparamArray[ 0x12 ] = stgdaparam19;\r
1630                         stgdaparam62 = new STGDAPARAM();\r
1631                         STGDAPARAM stgdaparam20 = stgdaparam62;\r
1632                         stgdaparam20.s = "01";\r
1633                         stgdaparam20.c = 0x61;\r
1634                         stgdaparamArray[ 0x13 ] = stgdaparam20;\r
1635                         stgdaparam62 = new STGDAPARAM();\r
1636                         STGDAPARAM stgdaparam21 = stgdaparam62;\r
1637                         stgdaparam21.s = "02";\r
1638                         stgdaparam21.c = 0x62;\r
1639                         stgdaparamArray[ 20 ] = stgdaparam21;\r
1640                         stgdaparam62 = new STGDAPARAM();\r
1641                         STGDAPARAM stgdaparam22 = stgdaparam62;\r
1642                         stgdaparam22.s = "03";\r
1643                         stgdaparam22.c = 0x63;\r
1644                         stgdaparamArray[ 0x15 ] = stgdaparam22;\r
1645                         stgdaparam62 = new STGDAPARAM();\r
1646                         STGDAPARAM stgdaparam23 = stgdaparam62;\r
1647                         stgdaparam23.s = "04";\r
1648                         stgdaparam23.c = 100;\r
1649                         stgdaparamArray[ 0x16 ] = stgdaparam23;\r
1650                         stgdaparam62 = new STGDAPARAM();\r
1651                         STGDAPARAM stgdaparam24 = stgdaparam62;\r
1652                         stgdaparam24.s = "05";\r
1653                         stgdaparam24.c = 0x65;\r
1654                         stgdaparamArray[ 0x17 ] = stgdaparam24;\r
1655                         stgdaparam62 = new STGDAPARAM();\r
1656                         STGDAPARAM stgdaparam25 = stgdaparam62;\r
1657                         stgdaparam25.s = "06";\r
1658                         stgdaparam25.c = 0x66;\r
1659                         stgdaparamArray[ 0x18 ] = stgdaparam25;\r
1660                         stgdaparam62 = new STGDAPARAM();\r
1661                         STGDAPARAM stgdaparam26 = stgdaparam62;\r
1662                         stgdaparam26.s = "07";\r
1663                         stgdaparam26.c = 0x67;\r
1664                         stgdaparamArray[ 0x19 ] = stgdaparam26;\r
1665                         stgdaparam62 = new STGDAPARAM();\r
1666                         STGDAPARAM stgdaparam27 = stgdaparam62;\r
1667                         stgdaparam27.s = "08";\r
1668                         stgdaparam27.c = 0x68;\r
1669                         stgdaparamArray[ 0x1a ] = stgdaparam27;\r
1670                         stgdaparam62 = new STGDAPARAM();\r
1671                         STGDAPARAM stgdaparam28 = stgdaparam62;\r
1672                         stgdaparam28.s = "09";\r
1673                         stgdaparam28.c = 0x69;\r
1674                         stgdaparamArray[ 0x1b ] = stgdaparam28;\r
1675                         stgdaparam62 = new STGDAPARAM();\r
1676                         STGDAPARAM stgdaparam29 = stgdaparam62;\r
1677                         stgdaparam29.s = "0A";\r
1678                         stgdaparam29.c = 0x70;\r
1679                         stgdaparamArray[ 0x1c ] = stgdaparam29;\r
1680                         stgdaparam62 = new STGDAPARAM();\r
1681                         STGDAPARAM stgdaparam30 = stgdaparam62;\r
1682                         stgdaparam30.s = "0B";\r
1683                         stgdaparam30.c = 0x71;\r
1684                         stgdaparamArray[ 0x1d ] = stgdaparam30;\r
1685                         stgdaparam62 = new STGDAPARAM();\r
1686                         STGDAPARAM stgdaparam31 = stgdaparam62;\r
1687                         stgdaparam31.s = "0C";\r
1688                         stgdaparam31.c = 0x72;\r
1689                         stgdaparamArray[ 30 ] = stgdaparam31;\r
1690                         stgdaparam62 = new STGDAPARAM();\r
1691                         STGDAPARAM stgdaparam32 = stgdaparam62;\r
1692                         stgdaparam32.s = "0D";\r
1693                         stgdaparam32.c = 0x73;\r
1694                         stgdaparamArray[ 0x1f ] = stgdaparam32;\r
1695                         stgdaparam62 = new STGDAPARAM();\r
1696                         STGDAPARAM stgdaparam33 = stgdaparam62;\r
1697                         stgdaparam33.s = "0E";\r
1698                         stgdaparam33.c = 0x74;\r
1699                         stgdaparamArray[ 0x20 ] = stgdaparam33;\r
1700                         stgdaparam62 = new STGDAPARAM();\r
1701                         STGDAPARAM stgdaparam34 = stgdaparam62;\r
1702                         stgdaparam34.s = "0F";\r
1703                         stgdaparam34.c = 0x75;\r
1704                         stgdaparamArray[ 0x21 ] = stgdaparam34;\r
1705                         stgdaparam62 = new STGDAPARAM();\r
1706                         STGDAPARAM stgdaparam35 = stgdaparam62;\r
1707                         stgdaparam35.s = "10";\r
1708                         stgdaparam35.c = 0x76;\r
1709                         stgdaparamArray[ 0x22 ] = stgdaparam35;\r
1710                         stgdaparam62 = new STGDAPARAM();\r
1711                         STGDAPARAM stgdaparam36 = stgdaparam62;\r
1712                         stgdaparam36.s = "11";\r
1713                         stgdaparam36.c = 0x77;\r
1714                         stgdaparamArray[ 0x23 ] = stgdaparam36;\r
1715                         stgdaparam62 = new STGDAPARAM();\r
1716                         STGDAPARAM stgdaparam37 = stgdaparam62;\r
1717                         stgdaparam37.s = "12";\r
1718                         stgdaparam37.c = 120;\r
1719                         stgdaparamArray[ 0x24 ] = stgdaparam37;\r
1720                         stgdaparam62 = new STGDAPARAM();\r
1721                         STGDAPARAM stgdaparam38 = stgdaparam62;\r
1722                         stgdaparam38.s = "13";\r
1723                         stgdaparam38.c = 0x79;\r
1724                         stgdaparamArray[ 0x25 ] = stgdaparam38;\r
1725                         stgdaparam62 = new STGDAPARAM();\r
1726                         STGDAPARAM stgdaparam39 = stgdaparam62;\r
1727                         stgdaparam39.s = "14";\r
1728                         stgdaparam39.c = 0x80;\r
1729                         stgdaparamArray[ 0x26 ] = stgdaparam39;\r
1730                         stgdaparam62 = new STGDAPARAM();\r
1731                         STGDAPARAM stgdaparam40 = stgdaparam62;\r
1732                         stgdaparam40.s = "15";\r
1733                         stgdaparam40.c = 0x81;\r
1734                         stgdaparamArray[ 0x27 ] = stgdaparam40;\r
1735                         stgdaparam62 = new STGDAPARAM();\r
1736                         STGDAPARAM stgdaparam41 = stgdaparam62;\r
1737                         stgdaparam41.s = "16";\r
1738                         stgdaparam41.c = 130;\r
1739                         stgdaparamArray[ 40 ] = stgdaparam41;\r
1740                         stgdaparam62 = new STGDAPARAM();\r
1741                         STGDAPARAM stgdaparam42 = stgdaparam62;\r
1742                         stgdaparam42.s = "17";\r
1743                         stgdaparam42.c = 0x83;\r
1744                         stgdaparamArray[ 0x29 ] = stgdaparam42;\r
1745                         stgdaparam62 = new STGDAPARAM();\r
1746                         STGDAPARAM stgdaparam43 = stgdaparam62;\r
1747                         stgdaparam43.s = "18";\r
1748                         stgdaparam43.c = 0x84;\r
1749                         stgdaparamArray[ 0x2a ] = stgdaparam43;\r
1750                         stgdaparam62 = new STGDAPARAM();\r
1751                         STGDAPARAM stgdaparam44 = stgdaparam62;\r
1752                         stgdaparam44.s = "19";\r
1753                         stgdaparam44.c = 0x85;\r
1754                         stgdaparamArray[ 0x2b ] = stgdaparam44;\r
1755                         stgdaparam62 = new STGDAPARAM();\r
1756                         STGDAPARAM stgdaparam45 = stgdaparam62;\r
1757                         stgdaparam45.s = "1A";\r
1758                         stgdaparam45.c = 0x86;\r
1759                         stgdaparamArray[ 0x2c ] = stgdaparam45;\r
1760                         stgdaparam62 = new STGDAPARAM();\r
1761                         STGDAPARAM stgdaparam46 = stgdaparam62;\r
1762                         stgdaparam46.s = "1B";\r
1763                         stgdaparam46.c = 0x87;\r
1764                         stgdaparamArray[ 0x2d ] = stgdaparam46;\r
1765                         stgdaparam62 = new STGDAPARAM();\r
1766                         STGDAPARAM stgdaparam47 = stgdaparam62;\r
1767                         stgdaparam47.s = "1C";\r
1768                         stgdaparam47.c = 0x88;\r
1769                         stgdaparamArray[ 0x2e ] = stgdaparam47;\r
1770                         stgdaparam62 = new STGDAPARAM();\r
1771                         STGDAPARAM stgdaparam48 = stgdaparam62;\r
1772                         stgdaparam48.s = "1D";\r
1773                         stgdaparam48.c = 0x89;\r
1774                         stgdaparamArray[ 0x2f ] = stgdaparam48;\r
1775                         stgdaparam62 = new STGDAPARAM();\r
1776                         STGDAPARAM stgdaparam49 = stgdaparam62;\r
1777                         stgdaparam49.s = "1E";\r
1778                         stgdaparam49.c = 0x90;\r
1779                         stgdaparamArray[ 0x30 ] = stgdaparam49;\r
1780                         stgdaparam62 = new STGDAPARAM();\r
1781                         STGDAPARAM stgdaparam50 = stgdaparam62;\r
1782                         stgdaparam50.s = "1F";\r
1783                         stgdaparam50.c = 0x91;\r
1784                         stgdaparamArray[ 0x31 ] = stgdaparam50;\r
1785                         stgdaparam62 = new STGDAPARAM();\r
1786                         STGDAPARAM stgdaparam51 = stgdaparam62;\r
1787                         stgdaparam51.s = "20";\r
1788                         stgdaparam51.c = 0x92;\r
1789                         stgdaparamArray[ 50 ] = stgdaparam51;\r
1790                         stgdaparam62 = new STGDAPARAM();\r
1791                         STGDAPARAM stgdaparam52 = stgdaparam62;\r
1792                         stgdaparam52.s = "B1";\r
1793                         stgdaparam52.c = 0xa1;\r
1794                         stgdaparamArray[ 0x33 ] = stgdaparam52;\r
1795                         stgdaparam62 = new STGDAPARAM();\r
1796                         STGDAPARAM stgdaparam53 = stgdaparam62;\r
1797                         stgdaparam53.s = "B2";\r
1798                         stgdaparam53.c = 0xa2;\r
1799                         stgdaparamArray[ 0x34 ] = stgdaparam53;\r
1800                         stgdaparam62 = new STGDAPARAM();\r
1801                         STGDAPARAM stgdaparam54 = stgdaparam62;\r
1802                         stgdaparam54.s = "B3";\r
1803                         stgdaparam54.c = 0xa3;\r
1804                         stgdaparamArray[ 0x35 ] = stgdaparam54;\r
1805                         stgdaparam62 = new STGDAPARAM();\r
1806                         STGDAPARAM stgdaparam55 = stgdaparam62;\r
1807                         stgdaparam55.s = "B4";\r
1808                         stgdaparam55.c = 0xa4;\r
1809                         stgdaparamArray[ 0x36 ] = stgdaparam55;\r
1810                         stgdaparam62 = new STGDAPARAM();\r
1811                         STGDAPARAM stgdaparam56 = stgdaparam62;\r
1812                         stgdaparam56.s = "B5";\r
1813                         stgdaparam56.c = 0xa5;\r
1814                         stgdaparamArray[ 0x37 ] = stgdaparam56;\r
1815                         stgdaparam62 = new STGDAPARAM();\r
1816                         STGDAPARAM stgdaparam57 = stgdaparam62;\r
1817                         stgdaparam57.s = "B6";\r
1818                         stgdaparam57.c = 0xa6;\r
1819                         stgdaparamArray[ 0x38 ] = stgdaparam57;\r
1820                         stgdaparam62 = new STGDAPARAM();\r
1821                         STGDAPARAM stgdaparam58 = stgdaparam62;\r
1822                         stgdaparam58.s = "B7";\r
1823                         stgdaparam58.c = 0xa7;\r
1824                         stgdaparamArray[ 0x39 ] = stgdaparam58;\r
1825                         stgdaparam62 = new STGDAPARAM();\r
1826                         STGDAPARAM stgdaparam59 = stgdaparam62;\r
1827                         stgdaparam59.s = "BW";\r
1828                         stgdaparam59.c = 0xa8;\r
1829                         stgdaparamArray[ 0x3a ] = stgdaparam59;\r
1830                         stgdaparam62 = new STGDAPARAM();\r
1831                         STGDAPARAM stgdaparam60 = stgdaparam62;\r
1832                         stgdaparam60.s = "G0";\r
1833                         stgdaparam60.c = 0x20;\r
1834                         stgdaparamArray[ 0x3b ] = stgdaparam60;\r
1835                         STGDAPARAM stgdaparam61 = new STGDAPARAM();\r
1836                         stgdaparam61.s = "B0";\r
1837                         stgdaparam61.c = 160;\r
1838                         stgdaparamArray[ 60 ] = stgdaparam61;\r
1839                         this.stGDAParam = stgdaparamArray;\r
1840                         this.nBGMAdjust = 0;\r
1841                 }\r
1842                 public CDTX( string str全入力文字列 )\r
1843                         : this()\r
1844                 {\r
1845                         this.On活性化();\r
1846                         this.t入力・全入力文字列から( str全入力文字列 );\r
1847                 }\r
1848                 public CDTX( string strファイル名, bool bヘッダのみ )\r
1849                         : this()\r
1850                 {\r
1851                         this.On活性化();\r
1852                         this.t入力( strファイル名, bヘッダのみ );\r
1853                 }\r
1854                 public CDTX( string str全入力文字列, double db再生速度, int nBGMAdjust )\r
1855                         : this()\r
1856                 {\r
1857                         this.On活性化();\r
1858                         this.t入力・全入力文字列から( str全入力文字列, db再生速度, nBGMAdjust );\r
1859                 }\r
1860                 public CDTX( string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust )\r
1861                         : this()\r
1862                 {\r
1863                         this.On活性化();\r
1864                         this.t入力( strファイル名, bヘッダのみ, db再生速度, nBGMAdjust );\r
1865                 }\r
1866 \r
1867 \r
1868                 // メソッド\r
1869 \r
1870                 public int nモニタを考慮した音量( E楽器パート part )\r
1871                 {\r
1872                         CConfigIni configIni = CDTXMania.ConfigIni;\r
1873                         switch( part )\r
1874                         {\r
1875                                 case E楽器パート.DRUMS:\r
1876                                         if( configIni.b演奏音を強調する.Drums )\r
1877                                         {\r
1878                                                 return configIni.n自動再生音量;\r
1879                                         }\r
1880                                         return configIni.n手動再生音量;\r
1881 \r
1882                                 case E楽器パート.GUITAR:\r
1883                                         if( configIni.b演奏音を強調する.Guitar )\r
1884                                         {\r
1885                                                 return configIni.n自動再生音量;\r
1886                                         }\r
1887                                         return configIni.n手動再生音量;\r
1888 \r
1889                                 case E楽器パート.BASS:\r
1890                                         if( configIni.b演奏音を強調する.Bass )\r
1891                                         {\r
1892                                                 return configIni.n自動再生音量;\r
1893                                         }\r
1894                                         return configIni.n手動再生音量;\r
1895                         }\r
1896                         if( ( !configIni.b演奏音を強調する.Drums && !configIni.b演奏音を強調する.Guitar ) && !configIni.b演奏音を強調する.Bass )\r
1897                         {\r
1898                                 return configIni.n手動再生音量;\r
1899                         }\r
1900                         return configIni.n自動再生音量;\r
1901                 }\r
1902                 public void tAVIの読み込み()\r
1903                 {\r
1904                         if( this.listAVI != null )\r
1905                         {\r
1906                                 foreach( CAVI cavi in this.listAVI.Values )\r
1907                                 {\r
1908                                         cavi.OnDeviceCreated();\r
1909                                 }\r
1910                         }\r
1911                         if( !this.bヘッダのみ )\r
1912                         {\r
1913                                 foreach( CChip chip in this.listChip )\r
1914                                 {\r
1915                                         if( chip.nチャンネル番号 == 0x54 )\r
1916                                         {\r
1917                                                 chip.eAVI種別 = EAVI種別.Unknown;\r
1918                                                 chip.rAVI = null;\r
1919                                                 chip.rAVIPan = null;\r
1920                                                 if( this.listAVIPAN.ContainsKey( chip.n整数値 ) )\r
1921                                                 {\r
1922                                                         CAVIPAN cavipan = this.listAVIPAN[ chip.n整数値 ];\r
1923                                                         if( this.listAVI.ContainsKey( cavipan.nAVI番号 ) && ( this.listAVI[ cavipan.nAVI番号 ].avi != null ) )\r
1924                                                         {\r
1925                                                                 chip.eAVI種別 = EAVI種別.AVIPAN;\r
1926                                                                 chip.rAVI = this.listAVI[ cavipan.nAVI番号 ];\r
1927                                                                 chip.rAVIPan = cavipan;\r
1928                                                                 continue;\r
1929                                                         }\r
1930                                                 }\r
1931                                                 if( this.listAVI.ContainsKey( chip.n整数値 ) && ( this.listAVI[ chip.n整数値 ].avi != null ) )\r
1932                                                 {\r
1933                                                         chip.eAVI種別 = EAVI種別.AVI;\r
1934                                                         chip.rAVI = this.listAVI[ chip.n整数値 ];\r
1935                                                 }\r
1936                                         }\r
1937                                 }\r
1938                         }\r
1939                 }\r
1940                 public void tBMP_BMPTEXの読み込み()\r
1941                 {\r
1942                         if( this.listBMP != null )\r
1943                         {\r
1944                                 foreach( CBMP cbmp in this.listBMP.Values )\r
1945                                 {\r
1946                                         cbmp.OnDeviceCreated();\r
1947                                 }\r
1948                         }\r
1949                         if( this.listBMPTEX != null )\r
1950                         {\r
1951                                 foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )\r
1952                                 {\r
1953                                         cbmptex.OnDeviceCreated();\r
1954                                 }\r
1955                         }\r
1956                         if( !this.bヘッダのみ )\r
1957                         {\r
1958                                 foreach( CChip chip in this.listChip )\r
1959                                 {\r
1960                                         if( ( ( ( chip.nチャンネル番号 == 4 ) || ( chip.nチャンネル番号 == 7 ) ) || ( ( chip.nチャンネル番号 >= 0x55 ) && ( chip.nチャンネル番号 <= 0x59 ) ) ) || ( chip.nチャンネル番号 == 0x60 ) )\r
1961                                         {\r
1962                                                 chip.eBGA種別 = EBGA種別.Unknown;\r
1963                                                 chip.rBMP = null;\r
1964                                                 chip.rBMPTEX = null;\r
1965                                                 chip.rBGA = null;\r
1966                                                 chip.rBGAPan = null;\r
1967                                                 if( this.listBGAPAN.ContainsKey( chip.n整数値 ) )\r
1968                                                 {\r
1969                                                         CBGAPAN cbgapan = this.listBGAPAN[ chip.n整数値 ];\r
1970                                                         if( this.listBMPTEX.ContainsKey( cbgapan.nBMP番号 ) && this.listBMPTEX[ cbgapan.nBMP番号 ].bUse )\r
1971                                                         {\r
1972                                                                 chip.eBGA種別 = EBGA種別.BGAPAN;\r
1973                                                                 chip.rBMPTEX = this.listBMPTEX[ cbgapan.nBMP番号 ];\r
1974                                                                 chip.rBGAPan = cbgapan;\r
1975                                                                 continue;\r
1976                                                         }\r
1977                                                         if( this.listBMP.ContainsKey( cbgapan.nBMP番号 ) && this.listBMP[ cbgapan.nBMP番号 ].bUse )\r
1978                                                         {\r
1979                                                                 chip.eBGA種別 = EBGA種別.BGAPAN;\r
1980                                                                 chip.rBMP = this.listBMP[ cbgapan.nBMP番号 ];\r
1981                                                                 chip.rBGAPan = cbgapan;\r
1982                                                                 continue;\r
1983                                                         }\r
1984                                                 }\r
1985                                                 if( this.listBGA.ContainsKey( chip.n整数値 ) )\r
1986                                                 {\r
1987                                                         CBGA cbga = this.listBGA[ chip.n整数値 ];\r
1988                                                         if( this.listBMPTEX.ContainsKey( cbga.nBMP番号 ) && this.listBMPTEX[ cbga.nBMP番号 ].bUse )\r
1989                                                         {\r
1990                                                                 chip.eBGA種別 = EBGA種別.BGA;\r
1991                                                                 chip.rBMPTEX = this.listBMPTEX[ cbga.nBMP番号 ];\r
1992                                                                 chip.rBGA = cbga;\r
1993                                                                 continue;\r
1994                                                         }\r
1995                                                         if( this.listBMP.ContainsKey( cbga.nBMP番号 ) && this.listBMP[ cbga.nBMP番号 ].bUse )\r
1996                                                         {\r
1997                                                                 chip.eBGA種別 = EBGA種別.BGA;\r
1998                                                                 chip.rBMP = this.listBMP[ cbga.nBMP番号 ];\r
1999                                                                 chip.rBGA = cbga;\r
2000                                                                 continue;\r
2001                                                         }\r
2002                                                 }\r
2003                                                 if( this.listBMPTEX.ContainsKey( chip.n整数値 ) && this.listBMPTEX[ chip.n整数値 ].bUse )\r
2004                                                 {\r
2005                                                         chip.eBGA種別 = EBGA種別.BMPTEX;\r
2006                                                         chip.rBMPTEX = this.listBMPTEX[ chip.n整数値 ];\r
2007                                                         continue;\r
2008                                                 }\r
2009                                                 if( this.listBMP.ContainsKey( chip.n整数値 ) && this.listBMP[ chip.n整数値 ].bUse )\r
2010                                                 {\r
2011                                                         chip.eBGA種別 = EBGA種別.BMP;\r
2012                                                         chip.rBMP = this.listBMP[ chip.n整数値 ];\r
2013                                                         continue;\r
2014                                                 }\r
2015                                         }\r
2016                                         if( ( ( ( chip.nチャンネル番号 == 0xc4 ) || ( chip.nチャンネル番号 == 0xc7 ) ) || ( ( chip.nチャンネル番号 >= 0xd5 ) && ( chip.nチャンネル番号 <= 0xd9 ) ) ) || ( chip.nチャンネル番号 == 0xe0 ) )\r
2017                                         {\r
2018                                                 chip.eBGA種別 = EBGA種別.Unknown;\r
2019                                                 chip.rBMP = null;\r
2020                                                 chip.rBMPTEX = null;\r
2021                                                 chip.rBGA = null;\r
2022                                                 chip.rBGAPan = null;\r
2023                                                 if( this.listBMPTEX.ContainsKey( chip.n整数値 ) && this.listBMPTEX[ chip.n整数値 ].bUse )\r
2024                                                 {\r
2025                                                         chip.eBGA種別 = EBGA種別.BMPTEX;\r
2026                                                         chip.rBMPTEX = this.listBMPTEX[ chip.n整数値 ];\r
2027                                                 }\r
2028                                                 else if( this.listBMP.ContainsKey( chip.n整数値 ) && this.listBMP[ chip.n整数値 ].bUse )\r
2029                                                 {\r
2030                                                         chip.eBGA種別 = EBGA種別.BMP;\r
2031                                                         chip.rBMP = this.listBMP[ chip.n整数値 ];\r
2032                                                 }\r
2033                                         }\r
2034                                 }\r
2035                         }\r
2036                 }\r
2037                 public void tWave再生位置自動補正()\r
2038                 {\r
2039                         foreach( CWAV cwav in this.listWAV.Values )\r
2040                         {\r
2041                                 this.tWave再生位置自動補正( cwav );\r
2042                         }\r
2043                 }\r
2044                 public void tWave再生位置自動補正( CWAV wc )\r
2045                 {\r
2046                         for( int i = 0; i < 4; i++ )\r
2047                         {\r
2048                                 if( ( ( wc.rSound[ i ] != null ) && wc.rSound[ i ].b再生中 ) && ( wc.rSound[ i ].n総演奏時間ms >= 0x1388 ) )\r
2049                                 {\r
2050                                         long num2 = CDTXMania.Timer.nシステム時刻;\r
2051                                         if( num2 > wc.n再生開始時刻[ i ] )\r
2052                                         {\r
2053                                                 long num3 = num2 - wc.n再生開始時刻[ i ];\r
2054                                                 wc.rSound[ i ].t再生位置を変更する( wc.rSound[ i ].t時刻から位置を返す( num3 ) );\r
2055                                         }\r
2056                                 }\r
2057                         }\r
2058                 }\r
2059                 public void tWavの再生停止( int nWaveの内部番号 )\r
2060                 {\r
2061                         if( this.listWAV.ContainsKey( nWaveの内部番号 ) )\r
2062                         {\r
2063                                 CWAV cwav = this.listWAV[ nWaveの内部番号 ];\r
2064                                 for( int i = 0; i < 4; i++ )\r
2065                                 {\r
2066                                         if( cwav.rSound[ i ] != null )\r
2067                                         {\r
2068                                                 cwav.rSound[ i ].t再生を停止する();\r
2069                                         }\r
2070                                 }\r
2071                         }\r
2072                 }\r
2073                 public void tWAVの読み込み()\r
2074                 {\r
2075                         foreach( CWAV cwav in this.listWAV.Values )\r
2076                         {\r
2077                                 string str = string.IsNullOrEmpty( this.PATH_WAV ) ? this.strフォルダ名 : this.PATH_WAV;\r
2078                                 str = str + cwav.strファイル名;\r
2079                                 try\r
2080                                 {\r
2081                                         for( int i = 0; i < 4; i++ )\r
2082                                         {\r
2083                                                 try\r
2084                                                 {\r
2085                                                         cwav.rSound[ i ] = CDTXMania.Sound管理.tサウンドを生成する( str );\r
2086                                                         cwav.rSound[ i ].n音量 = 100;\r
2087                                                         if( ( i == 0 ) && CDTXMania.ConfigIni.bLog作成解放ログ出力 )\r
2088                                                         {\r
2089                                                                 Trace.TraceInformation( "サウンドを作成しました。({3})({0})({1})({2}bytes)", new object[] { cwav.strコメント文, str, cwav.rSound[ i ].nサウンドバッファサイズ, cwav.rSound[ i ].bストリーム再生する ? "Stream" : "OnMemory" } );\r
2090                                                         }\r
2091                                                 }\r
2092                                                 catch\r
2093                                                 {\r
2094                                                         cwav.rSound[ i ] = null;\r
2095                                                         if( i == 0 )\r
2096                                                         {\r
2097                                                                 Trace.TraceError( "サウンドの作成に失敗しました。({0})({1})", new object[] { cwav.strコメント文, str } );\r
2098                                                         }\r
2099                                                 }\r
2100                                                 if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].bストリーム再生する )\r
2101                                                 {\r
2102                                                         break;\r
2103                                                 }\r
2104 //                                              Type t = typeof(CSound);\r
2105 //                                              MethodInfo[] methods = t.GetMethods(\r
2106 //                                                      BindingFlags.Public | BindingFlags.NonPublic |\r
2107 //                                                      BindingFlags.Instance | BindingFlags.Static\r
2108 //                                              );\r
2109 \r
2110 //                                              for (int j = 1; j < 3; j++)\r
2111 //                                              {\r
2112 //                                                      SlimDX.DirectSound.SoundBuffer result;\r
2113 //                                                      CDTXMania.Sound管理.Device.DuplicateSoundBuffer(\r
2114 //                                                              cwav.rSound[0].Buffer,\r
2115 //                                                              out result);\r
2116 //                                                      cwav.rSound[j].Buffer = (SlimDX.DirectSound.SecondarySoundBuffer)result;\r
2117 //                                                      cwav.rSound[j].bストリーム再生する = cwav.rSound[0].bストリーム再生する;\r
2118 //                                                      cwav.rSound[j].bループする\r
2119 //                                                      foreach(MethodInfo m in methods) {\r
2120 //                                                              if (m cwav..rSound[j].\r
2121 //                                              }\r
2122 //                                              cwav.rSound[0].Buffer.\r
2123                                                 cwav.rSound[1] = cwav.rSound[0];                // 2010.11.23 yyagi add: to accelerate loading chip sounds\r
2124                                                 cwav.rSound[2] = cwav.rSound[0];                //\r
2125                                                 cwav.rSound[3] = cwav.rSound[0];                //\r
2126                                                 break;                                                                  //\r
2127                                         }\r
2128                                         continue;\r
2129                                 }\r
2130                                 catch( Exception exception )\r
2131                                 {\r
2132                                         Trace.TraceError( "サウンドの生成に失敗しました。({0})({1})({2})", new object[] { exception.Message, cwav.strコメント文, str } );\r
2133                                         for( int j = 0; j < 4; j++ )\r
2134                                         {\r
2135                                                 cwav.rSound[ j ] = null;\r
2136                                         }\r
2137                                         continue;\r
2138                                 }\r
2139                         }\r
2140                 }\r
2141                 public static string tZZ( int n )\r
2142                 {\r
2143                         if( ( n < 0 ) || ( n >= 36 * 36) )\r
2144                         {\r
2145                                 return "!!";\r
2146                         }\r
2147                         string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";\r
2148                         return new string( new char[] { str[ n / 36 ], str[ n % 36 ] } );\r
2149                 }\r
2150 \r
2151                 /// <summary>\r
2152                 /// ギターのレーンビットパターン\r
2153                 /// </summary>\r
2154                 public enum Eレーンビットパターン\r
2155                 {\r
2156                         OPEN = 0,\r
2157                         xxB = 1,\r
2158                         xGx = 2,\r
2159                         xGB = 3,\r
2160                         Rxx = 4,\r
2161                         RxB = 5,\r
2162                         RGx = 6,\r
2163                         RGB = 7\r
2164                 };\r
2165                 public void tギターとベースのランダム化(E楽器パート part, Eランダムモード eRandom)\r
2166                 {\r
2167                         if( ( ( part == E楽器パート.GUITAR ) || ( part == E楽器パート.BASS ) ) && ( eRandom != Eランダムモード.OFF ) )\r
2168                         {\r
2169                                 int[,] nランダムレーン候補 = new int[ , ] { { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0, 2, 1, 3, 4, 6, 5, 7 }, { 0, 1, 4, 5, 2, 3, 6, 7 }, { 0, 2, 4, 6, 1, 3, 5, 7 }, { 0, 4, 1, 5, 2, 6, 3, 7 }, { 0, 4, 2, 6, 1, 5, 3, 7 } };\r
2170                                 int n小節番号 = -10000;\r
2171                                 int n小節内乱数6通り = 0;\r
2172                                 // int GOTO_END = 0;    // gotoの飛び先のダミーコードで使うダミー変数\r
2173                                 foreach( CChip chip in this.listChip )\r
2174                                 {\r
2175                                         int nRGBレーンビットパターン;\r
2176                                         int n新RGBレーンビットパターン = 0;                          // 「未割り当てのローカル変数」ビルドエラー回避のために0を初期値に設定\r
2177                                         bool flag;\r
2178                                         if( ( chip.n発声位置 / 384 ) != n小節番号 )             // 小節が変化したら\r
2179                                         {\r
2180                                                 n小節番号 = chip.n発声位置 / 384;\r
2181                                                 n小節内乱数6通り = CDTXMania.Random.Next( 6 );\r
2182                                         }\r
2183                                         int nランダム化前チャンネル番号 = chip.nチャンネル番号;\r
2184                                         if(             ( ( ( part != E楽器パート.GUITAR ) || ( 0x20 > nランダム化前チャンネル番号 ) ) || ( nランダム化前チャンネル番号 > 0x27 ) )\r
2185                                                 &&      ( ( ( part != E楽器パート.BASS )   || ( 0xA0 > nランダム化前チャンネル番号 ) ) || ( nランダム化前チャンネル番号 > 0xa7 ) )\r
2186                                         )\r
2187                                         {\r
2188                                                 continue;\r
2189                                         }\r
2190                                         switch( eRandom )\r
2191                                         {\r
2192                                                 case Eランダムモード.RANDOM:             // 1小節単位でレーンのR/G/Bがランダムに入れ替わる\r
2193                                                         chip.nチャンネル番号 = ( nランダム化前チャンネル番号 & 0xF0 ) | nランダムレーン候補[ n小節内乱数6通り, nランダム化前チャンネル番号 & 0x07 ];\r
2194                                                         continue;       // goto Label_02C4;\r
2195 \r
2196                                                 case Eランダムモード.SUPERRANDOM:        // チップごとにR/G/Bがランダムで入れ替わる(レーンの本数までは変わらない)。\r
2197                                                         chip.nチャンネル番号 = ( nランダム化前チャンネル番号 & 0xF0 ) | nランダムレーン候補[ CDTXMania.Random.Next( 6 ), nランダム化前チャンネル番号 & 0x07 ];\r
2198                                                         continue;       // goto Label_02C4;\r
2199 \r
2200                                                 case Eランダムモード.HYPERRANDOM:        // レーンの本数も変わる\r
2201                                                         nRGBレーンビットパターン = nランダム化前チャンネル番号 & 7;\r
2202                                                         // n新RGBレーンビットパターン = (int)Eレーンビットパターン.OPEN;   // この値は結局未使用なので削除\r
2203                                                         flag = ((part == E楽器パート.GUITAR) && this.bチップがある.OpenGuitar) || ((part == E楽器パート.BASS) && this.bチップがある.OpenBass);    // #23546 2010.10.28 yyagi fixed (bチップがある.Bass→bチップがある.OpenBass)\r
2204                                                         if (((nRGBレーンビットパターン != (int)Eレーンビットパターン.xxB) && (nRGBレーンビットパターン != (int)Eレーンビットパターン.xGx)) && (nRGBレーンビットパターン != (int)Eレーンビットパターン.Rxx))         // xxB, xGx, Rxx レーン1本相当\r
2205                                                         {\r
2206                                                                 break;                                                                                                                  // レーン1本相当でなければ、とりあえず先に進む\r
2207                                                         }\r
2208                                                         n新RGBレーンビットパターン = CDTXMania.Random.Next( 6 ) + 1;         // レーン1本相当なら、レーン1本か2本(1~6)に変化して終了\r
2209                                                         goto Label_02B2;\r
2210 \r
2211                                                 default:\r
2212                                                         continue;       // goto Label_02C4;\r
2213                                         }\r
2214                                         switch( nRGBレーンビットパターン )\r
2215                                         {\r
2216                                                 case (int)Eレーンビットパターン.xGB:  // xGB  レーン2本相当\r
2217                                                 case (int)Eレーンビットパターン.RxB:  // RxB\r
2218                                                 case (int)Eレーンビットパターン.RGx:  // RGx\r
2219                                                         n新RGBレーンビットパターン = flag ? CDTXMania.Random.Next( 8 ) : ( CDTXMania.Random.Next( 7 ) + 1 ); // OPENあり譜面ならOPENを含むランダム, OPENなし譜面ならOPENを含まないランダム\r
2220                                                         goto Label_02B2;\r
2221 \r
2222                                                 default:\r
2223                                                         if( nRGBレーンビットパターン == (int)Eレーンビットパターン.RGB )    // RGB レーン3本相当\r
2224                                                         {\r
2225                                                                 if( flag )      // OPENあり譜面の場合\r
2226                                                                 {\r
2227                                                                         int n乱数パーセント = CDTXMania.Random.Next( 100 );\r
2228                                                                         if( n乱数パーセント < 30 )\r
2229                                                                         {\r
2230                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.OPEN;\r
2231                                                                         }\r
2232                                                                         else if( n乱数パーセント < 60 )\r
2233                                                                         {\r
2234                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGB;\r
2235                                                                         }\r
2236                                                                         else if( n乱数パーセント < 85 )\r
2237                                                                         {\r
2238                                                                                 switch( CDTXMania.Random.Next( 3 ) )\r
2239                                                                                 {\r
2240                                                                                         case 0:\r
2241                                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGB;\r
2242                                                                                                 goto Label_02B2;\r
2243 \r
2244                                                                                         case 1:\r
2245                                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RxB;\r
2246                                                                                                 goto Label_02B2;\r
2247                                                                                 }\r
2248                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGx;\r
2249                                                                         }\r
2250                                                                         else    // OPENでない場合\r
2251                                                                         {\r
2252                                                                                 switch( CDTXMania.Random.Next( 3 ) )\r
2253                                                                                 {\r
2254                                                                                         case 0:\r
2255                                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xxB;\r
2256                                                                                                 goto Label_02B2;\r
2257 \r
2258                                                                                         case 1:\r
2259                                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGx;\r
2260                                                                                                 goto Label_02B2;\r
2261                                                                                 }\r
2262                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.Rxx;\r
2263                                                                         }\r
2264                                                                 }\r
2265                                                                 else    // OPENなし譜面の場合\r
2266                                                                 {\r
2267                                                                         int n乱数パーセント = CDTXMania.Random.Next( 100 );\r
2268                                                                         if( n乱数パーセント < 60 )\r
2269                                                                         {\r
2270                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGB;\r
2271                                                                         }\r
2272                                                                         else if( n乱数パーセント < 85 )\r
2273                                                                         {\r
2274                                                                                 switch( CDTXMania.Random.Next( 3 ) )\r
2275                                                                                 {\r
2276                                                                                         case 0:\r
2277                                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGB;\r
2278                                                                                                 goto Label_02B2;\r
2279 \r
2280                                                                                         case 1:\r
2281                                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RxB;\r
2282                                                                                                 goto Label_02B2;\r
2283                                                                                 }\r
2284                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGx;\r
2285                                                                         }\r
2286                                                                         else\r
2287                                                                         {\r
2288                                                                                 switch( CDTXMania.Random.Next( 3 ) )\r
2289                                                                                 {\r
2290                                                                                         case 0:\r
2291                                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xxB;\r
2292                                                                                                 goto Label_02B2;\r
2293 \r
2294                                                                                         case 1:\r
2295                                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGx;\r
2296                                                                                                 goto Label_02B2;\r
2297                                                                                 }\r
2298                                                                                 n新RGBレーンビットパターン = (int)Eレーンビットパターン.Rxx;\r
2299                                                                         }\r
2300                                                                 }\r
2301                                                         }\r
2302                                                         goto Label_02B2;\r
2303                                         }\r
2304                                 Label_02B2:\r
2305                                         chip.nチャンネル番号 = ( nランダム化前チャンネル番号 & 0xF0 ) | n新RGBレーンビットパターン;\r
2306 //                              Label_02C4:\r
2307 //                                      GOTO_END++;             // goto用のダミーコード\r
2308                                 }\r
2309                         }\r
2310                 }\r
2311                 public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane )\r
2312                 {\r
2313                         this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, CDTXMania.ConfigIni.n自動再生音量, false, false );\r
2314                 }\r
2315                 public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane, int nVol )\r
2316                 {\r
2317                         this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, nVol, false, false );\r
2318                 }\r
2319                 public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane, int nVol, bool bMIDIMonitor )\r
2320                 {\r
2321                         this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, nVol, bMIDIMonitor, false );\r
2322                 }\r
2323                 public void tチップの再生( CChip pChip, long n再生開始システム時刻ms, int nLane, int nVol, bool bMIDIMonitor, bool bBad )\r
2324                 {\r
2325                         if( pChip.n整数値・内部番号 >= 0 )\r
2326                         {\r
2327                                 if( ( nLane < 0 ) || ( nLane > 10 ) )\r
2328                                 {\r
2329                                         throw new ArgumentOutOfRangeException();\r
2330                                 }\r
2331                                 if( this.listWAV.ContainsKey( pChip.n整数値・内部番号 ) )\r
2332                                 {\r
2333                                         CWAV wc = this.listWAV[ pChip.n整数値・内部番号 ];\r
2334                                         int index = wc.n現在再生中のサウンド番号 = ( wc.n現在再生中のサウンド番号 + 1 ) % 4;\r
2335                                         if( ( wc.rSound[ 0 ] != null ) && wc.rSound[ 0 ].bストリーム再生する )\r
2336                                         {\r
2337                                                 index = wc.n現在再生中のサウンド番号 = 0;\r
2338                                         }\r
2339                                         CSound sound = wc.rSound[ index ];\r
2340                                         if( sound != null )\r
2341                                         {\r
2342                                                 sound.n音量 = (int) ( ( (double) ( nVol * wc.n音量 ) ) / 100.0 );\r
2343                                                 sound.n位置 = wc.n位置;\r
2344                                                 if( bBad )\r
2345                                                 {\r
2346                                                         sound.db周波数倍率 = ( (float) ( 100 + ( ( ( CDTXMania.Random.Next( 3 ) + 1 ) * 7 ) * ( 1 - ( CDTXMania.Random.Next( 2 ) * 2 ) ) ) ) ) / 100f;\r
2347                                                 }\r
2348                                                 else\r
2349                                                 {\r
2350                                                         sound.db周波数倍率 = 1.0;\r
2351                                                 }\r
2352                                                 sound.db再生速度 = ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0;\r
2353                                                 sound.t再生を開始する();\r
2354                                         }\r
2355                                         wc.n再生開始時刻[ wc.n現在再生中のサウンド番号 ] = n再生開始システム時刻ms;\r
2356                                         this.tWave再生位置自動補正( wc );\r
2357                                 }\r
2358                         }\r
2359                 }\r
2360                 public void t各自動再生音チップの再生時刻を変更する( int nBGMAdjustの増減値 )\r
2361                 {\r
2362                         this.nBGMAdjust += nBGMAdjustの増減値;\r
2363                         for( int i = 0; i < this.listChip.Count; i++ )\r
2364                         {\r
2365                                 int num2 = this.listChip[ i ].nチャンネル番号;\r
2366                                 if( ( ( ( num2 == 1 ) || ( ( 0x61 <= num2 ) && ( num2 <= 0x69 ) ) ) || ( ( 0x70 <= num2 ) && ( num2 <= 0x79 ) ) ) || ( ( ( 0x80 <= num2 ) && ( num2 <= 0x89 ) ) || ( ( 0x90 <= num2 ) && ( num2 <= 0x92 ) ) ) )\r
2367                                 {\r
2368                                         CChip local1 = this.listChip[ i ];\r
2369                                         local1.n発声時刻ms += nBGMAdjustの増減値;\r
2370                                 }\r
2371                         }\r
2372                         foreach( CWAV cwav in this.listWAV.Values )\r
2373                         {\r
2374                                 for( int j = 0; j < 4; j++ )\r
2375                                 {\r
2376                                         if( ( cwav.rSound[ j ] != null ) && cwav.rSound[ j ].b再生中 )\r
2377                                         {\r
2378                                                 cwav.n再生開始時刻[ j ] += nBGMAdjustの増減値;\r
2379                                         }\r
2380                                 }\r
2381                         }\r
2382                 }\r
2383                 public void t全チップの再生一時停止()\r
2384                 {\r
2385                         foreach( CWAV cwav in this.listWAV.Values )\r
2386                         {\r
2387                                 for( int i = 0; i < 4; i++ )\r
2388                                 {\r
2389                                         if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].b再生中 )\r
2390                                         {\r
2391                                                 cwav.rSound[ i ].t再生を一時停止する();\r
2392                                                 cwav.n一時停止時刻[ i ] = CDTXMania.Timer.nシステム時刻;\r
2393                                         }\r
2394                                 }\r
2395                         }\r
2396                 }\r
2397                 public void t全チップの再生再開()\r
2398                 {\r
2399                         foreach( CWAV cwav in this.listWAV.Values )\r
2400                         {\r
2401                                 for( int i = 0; i < 4; i++ )\r
2402                                 {\r
2403                                         if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].b一時停止中 )\r
2404                                         {\r
2405                                                 long num1 = cwav.n一時停止時刻[ i ];\r
2406                                                 long num2 = cwav.n再生開始時刻[ i ];\r
2407                                                 cwav.rSound[ i ].t再生を再開する( cwav.n一時停止時刻[ i ] - cwav.n再生開始時刻[ i ] );\r
2408                                                 cwav.n再生開始時刻[ i ] += CDTXMania.Timer.nシステム時刻 - cwav.n一時停止時刻[ i ];\r
2409                                         }\r
2410                                 }\r
2411                         }\r
2412                 }\r
2413                 public void t全チップの再生停止()\r
2414                 {\r
2415                         foreach( CWAV cwav in this.listWAV.Values )\r
2416                         {\r
2417                                 this.tWavの再生停止( cwav.n内部番号 );\r
2418                         }\r
2419                 }\r
2420                 public void t入力( string strファイル名, bool bヘッダのみ )\r
2421                 {\r
2422                         this.t入力( strファイル名, bヘッダのみ, 1.0, 0 );\r
2423                 }\r
2424                 public void t入力( string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust )\r
2425                 {\r
2426                         this.bヘッダのみ = bヘッダのみ;\r
2427                         this.strファイル名の絶対パス = Path.GetFullPath( strファイル名 );\r
2428                         this.strファイル名 = Path.GetFileName( this.strファイル名の絶対パス );\r
2429                         this.strフォルダ名 = Path.GetDirectoryName( this.strファイル名の絶対パス ) + @"\";\r
2430                         string str3 = Path.GetExtension( this.strファイル名 ).ToLower();\r
2431                         if( str3 != null )\r
2432                         {\r
2433                                 if( !( str3 == ".dtx" ) )\r
2434                                 {\r
2435                                         if( str3 == ".gda" )\r
2436                                         {\r
2437                                                 this.e種別 = E種別.GDA;\r
2438                                         }\r
2439                                         else if( str3 == ".g2d" )\r
2440                                         {\r
2441                                                 this.e種別 = E種別.G2D;\r
2442                                         }\r
2443                                         else if( str3 == ".bms" )\r
2444                                         {\r
2445                                                 this.e種別 = E種別.BMS;\r
2446                                         }\r
2447                                         else if( str3 == ".bme" )\r
2448                                         {\r
2449                                                 this.e種別 = E種別.BME;\r
2450                                         }\r
2451                                         else if( str3 == ".mid" )\r
2452                                         {\r
2453                                                 this.e種別 = E種別.SMF;\r
2454                                         }\r
2455                                 }\r
2456                                 else\r
2457                                 {\r
2458                                         this.e種別 = E種別.DTX;\r
2459                                 }\r
2460                         }\r
2461                         if( this.e種別 != E種別.SMF )\r
2462                         {\r
2463                                 StreamReader reader = new StreamReader( strファイル名, Encoding.GetEncoding( "shift-jis" ) );\r
2464                                 string str2 = reader.ReadToEnd();\r
2465                                 reader.Close();\r
2466                                 this.t入力・全入力文字列から( str2, db再生速度, nBGMAdjust );\r
2467                         }\r
2468                         else\r
2469                         {\r
2470                                 Trace.TraceWarning( "SMF の演奏は未対応です。(検討中)" );\r
2471                         }\r
2472                 }\r
2473                 public void t入力・全入力文字列から( string str全入力文字列 )\r
2474                 {\r
2475                         this.t入力・全入力文字列から( str全入力文字列, 1.0, 0 );\r
2476                 }\r
2477                 public unsafe void t入力・全入力文字列から( string str全入力文字列, double db再生速度, int nBGMAdjust )\r
2478                 {\r
2479                         if( !string.IsNullOrEmpty( str全入力文字列 ) )\r
2480                         {\r
2481                                 this.db再生速度 = db再生速度;\r
2482                                 str全入力文字列 = str全入力文字列.Replace( Environment.NewLine, "\n" );\r
2483                                 str全入力文字列 = str全入力文字列.Replace( '\t', ' ' );\r
2484                                 str全入力文字列 = str全入力文字列 + "\n";\r
2485                                 for( int j = 0; j < 36 * 36; j++ )\r
2486                                 {\r
2487                                         this.n無限管理WAV[ j ] = -j;\r
2488                                         this.n無限管理BPM[ j ] = -j;\r
2489                                         this.n無限管理VOL[ j ] = -j;\r
2490                                         this.n無限管理PAN[ j ] = -10000 - j;\r
2491                                         this.n無限管理SIZE[ j ] = -j;\r
2492                                 }\r
2493                                 this.n内部番号WAV1to = 1;\r
2494                                 this.n内部番号BPM1to = 1;\r
2495                                 this.bstackIFからENDIFをスキップする = new Stack<bool>();\r
2496                                 this.bstackIFからENDIFをスキップする.Push( false );\r
2497                                 this.n現在の乱数 = 0;\r
2498                                 for( int k = 0; k < 7; k++ )\r
2499                                 {\r
2500                                         this.nRESULTIMAGE用優先順位[ k ] = 0;\r
2501                                         this.nRESULTMOVIE用優先順位[ k ] = 0;\r
2502                                         this.nRESULTSOUND用優先順位[ k ] = 0;\r
2503                                 }\r
2504                                 CharEnumerator ce = str全入力文字列.GetEnumerator();\r
2505                                 if( ce.MoveNext() )\r
2506                                 {\r
2507                                         this.n現在の行数 = 1;\r
2508                                         do\r
2509                                         {\r
2510                                                 if( !this.t入力・空白と改行をスキップする( ref ce ) )\r
2511                                                 {\r
2512                                                         break;\r
2513                                                 }\r
2514                                                 if( ce.Current == '#' )\r
2515                                                 {\r
2516                                                         if( ce.MoveNext() )\r
2517                                                         {\r
2518                                                                 StringBuilder builder = new StringBuilder( 0x20 );\r
2519                                                                 if( this.t入力・コマンド文字列を抜き出す( ref ce, ref builder ) )\r
2520                                                                 {\r
2521                                                                         StringBuilder builder2 = new StringBuilder( 0x400 );\r
2522                                                                         if( this.t入力・パラメータ文字列を抜き出す( ref ce, ref builder2 ) )\r
2523                                                                         {\r
2524                                                                                 StringBuilder builder3 = new StringBuilder( 0x400 );\r
2525                                                                                 if( this.t入力・コメント文字列を抜き出す( ref ce, ref builder3 ) )\r
2526                                                                                 {\r
2527                                                                                         this.t入力・行解析( ref builder, ref builder2, ref builder3 );\r
2528                                                                                         this.n現在の行数++;\r
2529                                                                                         continue;\r
2530                                                                                 }\r
2531                                                                         }\r
2532                                                                 }\r
2533                                                         }\r
2534                                                         break;\r
2535                                                 }\r
2536                                         }\r
2537                                         while( this.t入力・コメントをスキップする( ref ce ) );\r
2538                                         this.n無限管理WAV = null;\r
2539                                         this.n無限管理BPM = null;\r
2540                                         this.n無限管理VOL = null;\r
2541                                         this.n無限管理PAN = null;\r
2542                                         this.n無限管理SIZE = null;\r
2543                                         if( !this.bヘッダのみ )\r
2544                                         {\r
2545                                                 int num26;\r
2546                                                 CBPM cbpm = null;\r
2547                                                 foreach( CBPM cbpm2 in this.listBPM.Values )\r
2548                                                 {\r
2549                                                         if( cbpm2.n表記上の番号 == 0 )\r
2550                                                         {\r
2551                                                                 cbpm = cbpm2;\r
2552                                                                 break;\r
2553                                                         }\r
2554                                                 }\r
2555                                                 if( cbpm == null )\r
2556                                                 {\r
2557                                                         cbpm = new CBPM();\r
2558                                                         cbpm.n内部番号 = this.n内部番号BPM1to++;\r
2559                                                         cbpm.n表記上の番号 = 0;\r
2560                                                         cbpm.dbBPM値 = 120.0;\r
2561                                                         this.listBPM.Add( cbpm.n内部番号, cbpm );\r
2562                                                         CChip item = new CChip();\r
2563                                                         item.n発声位置 = 0;\r
2564                                                         item.nチャンネル番号 = 8;\r
2565                                                         item.n整数値 = 0;\r
2566                                                         item.n整数値・内部番号 = cbpm.n内部番号;\r
2567                                                         this.listChip.Add( item );\r
2568                                                 }\r
2569                                                 else\r
2570                                                 {\r
2571                                                         CChip chip2 = new CChip();\r
2572                                                         chip2.n発声位置 = 0;\r
2573                                                         chip2.nチャンネル番号 = 8;\r
2574                                                         chip2.n整数値 = 0;\r
2575                                                         chip2.n整数値・内部番号 = cbpm.n内部番号;\r
2576                                                         this.listChip.Add( chip2 );\r
2577                                                 }\r
2578                                                 if( this.listBMP.ContainsKey( 0 ) )\r
2579                                                 {\r
2580                                                         CChip chip4 = new CChip();\r
2581                                                         chip4.n発声位置 = 0;\r
2582                                                         chip4.nチャンネル番号 = 4;\r
2583                                                         chip4.n整数値 = 0;\r
2584                                                         chip4.n整数値・内部番号 = 0;\r
2585                                                         CChip chip3 = chip4;\r
2586                                                         this.listChip.Add( chip3 );\r
2587                                                 }\r
2588                                                 foreach( CWAV cwav in this.listWAV.Values )\r
2589                                                 {\r
2590                                                         if( cwav.nチップサイズ < 0 )\r
2591                                                         {\r
2592                                                                 cwav.nチップサイズ = 100;\r
2593                                                         }\r
2594                                                         if( cwav.n位置 <= -10000 )\r
2595                                                         {\r
2596                                                                 cwav.n位置 = 0;\r
2597                                                         }\r
2598                                                         if( cwav.n音量 < 0 )\r
2599                                                         {\r
2600                                                                 cwav.n音量 = 100;\r
2601                                                         }\r
2602                                                 }\r
2603                                                 foreach( CWAV cwav2 in this.listWAV.Values )\r
2604                                                 {\r
2605                                                         foreach( CChip chip5 in this.listChip )\r
2606                                                         {\r
2607                                                                 if( chip5.n整数値・内部番号 == cwav2.n内部番号 )\r
2608                                                                 {\r
2609                                                                         chip5.dbチップサイズ倍率 = ( (double) cwav2.nチップサイズ ) / 100.0;\r
2610                                                                 }\r
2611                                                         }\r
2612                                                 }\r
2613                                                 for( int m = 0xb1; m <= 0xbb; m++ )\r
2614                                                 {\r
2615                                                         foreach( CChip chip6 in this.listChip )\r
2616                                                         {\r
2617                                                                 if( chip6.nチャンネル番号 == m )\r
2618                                                                 {\r
2619                                                                         CChip chip7 = new CChip();\r
2620                                                                         chip7.n発声位置 = 0;\r
2621                                                                         chip7.nチャンネル番号 = chip6.nチャンネル番号;\r
2622                                                                         chip7.n整数値 = chip6.n整数値;\r
2623                                                                         chip7.n整数値・内部番号 = chip6.n整数値・内部番号;\r
2624                                                                         this.listChip.Add( chip7 );\r
2625                                                                         break;\r
2626                                                                 }\r
2627                                                         }\r
2628                                                 }\r
2629                                                 if( this.listChip.Count > 0 )\r
2630                                                 {\r
2631                                                         this.listChip.Sort();\r
2632                                                         double num4 = 1.0;\r
2633                                                         int num5 = ( this.listChip[ this.listChip.Count - 1 ].n発声位置 + 0x180 ) - ( this.listChip[ this.listChip.Count - 1 ].n発声位置 % 0x180 );\r
2634                                                         for( int num6 = 0; num6 <= num5; num6 += 0x180 )\r
2635                                                         {\r
2636                                                                 CChip chip8 = new CChip();\r
2637                                                                 chip8.n発声位置 = num6;\r
2638                                                                 chip8.nチャンネル番号 = 80;\r
2639                                                                 chip8.n整数値 = 0x50f;\r
2640                                                                 this.listChip.Add( chip8 );\r
2641                                                         }\r
2642                                                         this.listChip.Sort();\r
2643                                                         int num7 = 0;\r
2644                                                         int num8 = 0;\r
2645                                                         for( int num9 = 0; num9 < num5; num9 += 0x180 )\r
2646                                                         {\r
2647                                                                 int num10 = 0;\r
2648                                                                 while( ( num8 < this.listChip.Count ) && ( this.listChip[ num8 ].n発声位置 < ( num9 + 0x180 ) ) )\r
2649                                                                 {\r
2650                                                                         if( this.listChip[ num8 ].nチャンネル番号 == 0xc1 )\r
2651                                                                         {\r
2652                                                                                 num10 = this.listChip[ num8 ].n発声位置 - num9;\r
2653                                                                         }\r
2654                                                                         num8++;\r
2655                                                                 }\r
2656                                                                 if( ( this.e種別 == E種別.BMS ) || ( this.e種別 == E種別.BME ) )\r
2657                                                                 {\r
2658                                                                         num4 = 1.0;\r
2659                                                                 }\r
2660                                                                 while( ( num7 < this.listChip.Count ) && ( this.listChip[ num7 ].n発声位置 <= num9 ) )\r
2661                                                                 {\r
2662                                                                         if( this.listChip[ num7 ].nチャンネル番号 == 2 )\r
2663                                                                         {\r
2664                                                                                 num4 = this.listChip[ num7 ].db実数値;\r
2665                                                                         }\r
2666                                                                         num7++;\r
2667                                                                 }\r
2668                                                                 for( int num11 = 0; num11 < 100; num11++ )\r
2669                                                                 {\r
2670                                                                         int num12 = (int) ( ( (double) ( 0x180 * num11 ) ) / ( 4.0 * num4 ) );\r
2671                                                                         if( ( num12 + num10 ) >= 0x180 )\r
2672                                                                         {\r
2673                                                                                 break;\r
2674                                                                         }\r
2675                                                                         if( ( ( num12 + num10 ) % 0x180 ) != 0 )\r
2676                                                                         {\r
2677                                                                                 CChip chip9 = new CChip();\r
2678                                                                                 chip9.n発声位置 = ( num9 + num12 ) + num10;\r
2679                                                                                 chip9.nチャンネル番号 = 0x51;\r
2680                                                                                 chip9.n整数値 = 0x50f;\r
2681                                                                                 this.listChip.Add( chip9 );\r
2682                                                                         }\r
2683                                                                 }\r
2684                                                         }\r
2685                                                         this.listChip.Sort();\r
2686                                                 }\r
2687                                                 bool flag = true;\r
2688                                                 Predicate<CChip> match = null;\r
2689                                                 for( int i = 0; i < this.listChip.Count; i++ )\r
2690                                                 {\r
2691                                                         int startIndex = i;\r
2692                                                         while( true )\r
2693                                                         {\r
2694                                                                 if( match == null )\r
2695                                                                 {\r
2696                                                                         match = delegate( CChip c )\r
2697                                                                         {\r
2698                                                                                 return ( c.nチャンネル番号 == 0xc2 ) && ( c.n発声位置 == this.listChip[ i ].n発声位置 );\r
2699                                                                         };\r
2700                                                                 }\r
2701                                                                 startIndex = this.listChip.FindIndex( startIndex, match );\r
2702                                                                 if( startIndex == -1 )\r
2703                                                                 {\r
2704                                                                         break;\r
2705                                                                 }\r
2706                                                                 if( this.listChip[ startIndex ].n整数値 == 1 )\r
2707                                                                 {\r
2708                                                                         flag = true;\r
2709                                                                 }\r
2710                                                                 if( this.listChip[ startIndex ].n整数値 == 2 )\r
2711                                                                 {\r
2712                                                                         flag = false;\r
2713                                                                 }\r
2714                                                                 startIndex++;\r
2715                                                         }\r
2716                                                         if( ( ( this.listChip[ i ].nチャンネル番号 == 80 ) || ( this.listChip[ i ].nチャンネル番号 == 0x51 ) ) && ( this.listChip[ i ].n整数値 == 0x50f ) )\r
2717                                                         {\r
2718                                                                 this.listChip[ i ].b可視 = flag;\r
2719                                                         }\r
2720                                                 }\r
2721                                                 double num14 = 120.0;\r
2722                                                 double num15 = 1.0;\r
2723                                                 int num16 = 0;\r
2724                                                 int num17 = 0;\r
2725                                                 int num18 = 0;\r
2726                                                 foreach( CChip chip10 in this.listChip )\r
2727                                                 {\r
2728                                                         chip10.n発声時刻ms = num17 + ( (int) ( ( ( 0x271 * ( chip10.n発声位置 - num16 ) ) * num15 ) / num14 ) );\r
2729                                                         if( ( ( this.e種別 == E種別.BMS ) || ( this.e種別 == E種別.BME ) ) && ( ( num15 != 1.0 ) && ( ( chip10.n発声位置 / 0x180 ) != num18 ) ) )\r
2730                                                         {\r
2731                                                                 num16 = chip10.n発声位置;\r
2732                                                                 num17 = chip10.n発声時刻ms;\r
2733                                                                 num15 = 1.0;\r
2734                                                         }\r
2735                                                         num18 = chip10.n発声位置 / 0x180;\r
2736                                                         num26 = chip10.nチャンネル番号;\r
2737                                                         switch( num26 )\r
2738                                                         {\r
2739                                                                 case 2:\r
2740                                                                         {\r
2741                                                                                 num16 = chip10.n発声位置;\r
2742                                                                                 num17 = chip10.n発声時刻ms;\r
2743                                                                                 num15 = chip10.db実数値;\r
2744                                                                                 continue;\r
2745                                                                         }\r
2746                                                                 case 3:\r
2747                                                                         {\r
2748                                                                                 num16 = chip10.n発声位置;\r
2749                                                                                 num17 = chip10.n発声時刻ms;\r
2750                                                                                 num14 = this.BASEBPM + chip10.n整数値;\r
2751                                                                                 continue;\r
2752                                                                         }\r
2753                                                                 case 4:\r
2754                                                                 case 7:\r
2755                                                                 case 0x55:\r
2756                                                                 case 0x56:\r
2757                                                                 case 0x57:\r
2758                                                                 case 0x58:\r
2759                                                                 case 0x59:\r
2760                                                                 case 0x60:\r
2761                                                                         break;\r
2762 \r
2763                                                                 case 5:\r
2764                                                                 case 6:\r
2765                                                                 case 90:\r
2766                                                                 case 0x5b:\r
2767                                                                 case 0x5c:\r
2768                                                                 case 0x5d:\r
2769                                                                 case 0x5e:\r
2770                                                                 case 0x5f:\r
2771                                                                         {\r
2772                                                                                 continue;\r
2773                                                                         }\r
2774                                                                 case 8:\r
2775                                                                         {\r
2776                                                                                 num16 = chip10.n発声位置;\r
2777                                                                                 num17 = chip10.n発声時刻ms;\r
2778                                                                                 if( this.listBPM.ContainsKey( chip10.n整数値・内部番号 ) )\r
2779                                                                                 {\r
2780                                                                                         num14 = ( ( this.listBPM[ chip10.n整数値・内部番号 ].n表記上の番号 == 0 ) ? 0.0 : this.BASEBPM ) + this.listBPM[ chip10.n整数値・内部番号 ].dbBPM値;\r
2781                                                                                 }\r
2782                                                                                 continue;\r
2783                                                                         }\r
2784                                                                 case 0x54:\r
2785                                                                         {\r
2786                                                                                 if( this.listAVIPAN.ContainsKey( chip10.n整数値 ) )\r
2787                                                                                 {\r
2788                                                                                         int num21 = num17 + ( (int) ( ( ( 0x271 * ( chip10.n発声位置 - num16 ) ) * num15 ) / num14 ) );\r
2789                                                                                         int num22 = num17 + ( (int) ( ( ( 0x271 * ( ( chip10.n発声位置 + this.listAVIPAN[ chip10.n整数値 ].n移動時間ct ) - num16 ) ) * num15 ) / num14 ) );\r
2790                                                                                         chip10.n総移動時間 = num22 - num21;\r
2791                                                                                 }\r
2792                                                                                 continue;\r
2793                                                                         }\r
2794                                                                 default:\r
2795                                                                         {\r
2796                                                                                 continue;\r
2797                                                                         }\r
2798                                                         }\r
2799                                                         if( this.listBGAPAN.ContainsKey( chip10.n整数値 ) )\r
2800                                                         {\r
2801                                                                 int num19 = num17 + ( (int) ( ( ( 0x271 * ( chip10.n発声位置 - num16 ) ) * num15 ) / num14 ) );\r
2802                                                                 int num20 = num17 + ( (int) ( ( ( 0x271 * ( ( chip10.n発声位置 + this.listBGAPAN[ chip10.n整数値 ].n移動時間ct ) - num16 ) ) * num15 ) / num14 ) );\r
2803                                                                 chip10.n総移動時間 = num20 - num19;\r
2804                                                         }\r
2805                                                 }\r
2806                                                 if( this.db再生速度 > 0.0 )\r
2807                                                 {\r
2808                                                         foreach( CChip chip11 in this.listChip )\r
2809                                                         {\r
2810                                                                 chip11.n発声時刻ms = (int) ( ( (double) chip11.n発声時刻ms ) / this.db再生速度 );\r
2811                                                         }\r
2812                                                 }\r
2813                                                 this.nBGMAdjust = 0;\r
2814                                                 this.t各自動再生音チップの再生時刻を変更する( nBGMAdjust );\r
2815                                                 for( int n = 0; n < 12; n++ )\r
2816                                                 {\r
2817                                                         this.n可視チップ数[ n ] = 0;\r
2818                                                 }\r
2819                                                 foreach( CChip chip12 in this.listChip )\r
2820                                                 {\r
2821                                                         int num24 = chip12.nチャンネル番号;\r
2822                                                         if( ( 0x11 <= num24 ) && ( num24 <= 0x1a ) )\r
2823                                                         {\r
2824                                                                 this.n可視チップ数[ num24 - 0x11 ]++;\r
2825                                                         }\r
2826                                                         if( ( 0x20 <= num24 ) && ( num24 <= 0x27 ) )\r
2827                                                         {\r
2828                                                                 this.n可視チップ数.Guitar++;\r
2829                                                         }\r
2830                                                         if( ( 160 <= num24 ) && ( num24 <= 0xa7 ) )\r
2831                                                         {\r
2832                                                                 this.n可視チップ数.Bass++;\r
2833                                                         }\r
2834                                                 }\r
2835                                                 foreach( CChip chip13 in this.listChip )\r
2836                                                 {\r
2837                                                         if( ( chip13.bWAVを使うチャンネルである && this.listWAV.ContainsKey( chip13.n整数値・内部番号 ) ) && !this.listWAV[ chip13.n整数値・内部番号 ].listこのWAVを使用するチャンネル番号の集合.Contains( chip13.nチャンネル番号 ) )\r
2838                                                         {\r
2839                                                                 this.listWAV[ chip13.n整数値・内部番号 ].listこのWAVを使用するチャンネル番号の集合.Add( chip13.nチャンネル番号 );\r
2840                                                         }\r
2841                                                 }\r
2842                                                 byte[] buffer = null;\r
2843                                                 try\r
2844                                                 {\r
2845                                                         FileStream stream = new FileStream( this.strファイル名の絶対パス, FileMode.Open, FileAccess.Read );\r
2846                                                         buffer = new byte[ stream.Length ];\r
2847                                                         stream.Read( buffer, 0, (int) stream.Length );\r
2848                                                         stream.Close();\r
2849                                                 }\r
2850                                                 catch( Exception exception )\r
2851                                                 {\r
2852                                                         Trace.TraceError( exception.Message );\r
2853                                                         Trace.TraceError( "DTXのハッシュの計算に失敗しました。({0})", new object[] { this.strファイル名の絶対パス } );\r
2854                                                 }\r
2855                                                 if( buffer != null )\r
2856                                                 {\r
2857                                                         byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash( buffer );\r
2858                                                         StringBuilder builder4 = new StringBuilder();\r
2859                                                         foreach( byte num25 in buffer2 )\r
2860                                                         {\r
2861                                                                 builder4.Append( num25.ToString( "x2" ) );\r
2862                                                         }\r
2863                                                         this.strハッシュofDTXファイル = builder4.ToString();\r
2864                                                 }\r
2865                                                 else\r
2866                                                 {\r
2867                                                         this.strハッシュofDTXファイル = "00000000000000000000000000000000";\r
2868                                                 }\r
2869                                                 if( CDTXMania.ConfigIni.bLogDTX詳細ログ出力 )\r
2870                                                 {\r
2871                                                         foreach( CWAV cwav3 in this.listWAV.Values )\r
2872                                                         {\r
2873                                                                 Trace.TraceInformation( cwav3.ToString() );\r
2874                                                         }\r
2875                                                         foreach( CAVI cavi in this.listAVI.Values )\r
2876                                                         {\r
2877                                                                 Trace.TraceInformation( cavi.ToString() );\r
2878                                                         }\r
2879                                                         foreach( CAVIPAN cavipan in this.listAVIPAN.Values )\r
2880                                                         {\r
2881                                                                 Trace.TraceInformation( cavipan.ToString() );\r
2882                                                         }\r
2883                                                         foreach( CBGA cbga in this.listBGA.Values )\r
2884                                                         {\r
2885                                                                 Trace.TraceInformation( cbga.ToString() );\r
2886                                                         }\r
2887                                                         foreach( CBGAPAN cbgapan in this.listBGAPAN.Values )\r
2888                                                         {\r
2889                                                                 Trace.TraceInformation( cbgapan.ToString() );\r
2890                                                         }\r
2891                                                         foreach( CBMP cbmp in this.listBMP.Values )\r
2892                                                         {\r
2893                                                                 Trace.TraceInformation( cbmp.ToString() );\r
2894                                                         }\r
2895                                                         foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )\r
2896                                                         {\r
2897                                                                 Trace.TraceInformation( cbmptex.ToString() );\r
2898                                                         }\r
2899                                                         foreach( CBPM cbpm3 in this.listBPM.Values )\r
2900                                                         {\r
2901                                                                 Trace.TraceInformation( cbpm3.ToString() );\r
2902                                                         }\r
2903                                                         foreach( CChip chip14 in this.listChip )\r
2904                                                         {\r
2905                                                                 Trace.TraceInformation( chip14.ToString() );\r
2906                                                         }\r
2907                                                 }\r
2908                                         }\r
2909                                 }\r
2910                         }\r
2911                 }\r
2912 \r
2913 \r
2914                 // CActivity 実装\r
2915 \r
2916                 public override void On活性化()\r
2917                 {\r
2918                         this.listWAV = new Dictionary<int, CWAV>();\r
2919                         this.listBMP = new Dictionary<int, CBMP>();\r
2920                         this.listBMPTEX = new Dictionary<int, CBMPTEX>();\r
2921                         this.listBPM = new Dictionary<int, CBPM>();\r
2922                         this.listBGAPAN = new Dictionary<int, CBGAPAN>();\r
2923                         this.listBGA = new Dictionary<int, CBGA>();\r
2924                         this.listAVIPAN = new Dictionary<int, CAVIPAN>();\r
2925                         this.listAVI = new Dictionary<int, CAVI>();\r
2926                         this.listChip = new List<CChip>();\r
2927                         base.On活性化();\r
2928                 }\r
2929                 public override void On非活性化()\r
2930                 {\r
2931                         if( this.listWAV != null )\r
2932                         {\r
2933                                 foreach( CWAV cwav in this.listWAV.Values )\r
2934                                 {\r
2935                                         cwav.Dispose();\r
2936                                 }\r
2937                                 this.listWAV = null;\r
2938                         }\r
2939                         if( this.listBMP != null )\r
2940                         {\r
2941                                 foreach( CBMP cbmp in this.listBMP.Values )\r
2942                                 {\r
2943                                         cbmp.Dispose();\r
2944                                 }\r
2945                                 this.listBMP = null;\r
2946                         }\r
2947                         if( this.listBMPTEX != null )\r
2948                         {\r
2949                                 foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )\r
2950                                 {\r
2951                                         cbmptex.Dispose();\r
2952                                 }\r
2953                                 this.listBMPTEX = null;\r
2954                         }\r
2955                         if( this.listAVI != null )\r
2956                         {\r
2957                                 foreach( CAVI cavi in this.listAVI.Values )\r
2958                                 {\r
2959                                         cavi.Dispose();\r
2960                                 }\r
2961                                 this.listAVI = null;\r
2962                         }\r
2963                         if( this.listBPM != null )\r
2964                         {\r
2965                                 this.listBPM.Clear();\r
2966                                 this.listBPM = null;\r
2967                         }\r
2968                         if( this.listBGAPAN != null )\r
2969                         {\r
2970                                 this.listBGAPAN.Clear();\r
2971                                 this.listBGAPAN = null;\r
2972                         }\r
2973                         if( this.listBGA != null )\r
2974                         {\r
2975                                 this.listBGA.Clear();\r
2976                                 this.listBGA = null;\r
2977                         }\r
2978                         if( this.listAVIPAN != null )\r
2979                         {\r
2980                                 this.listAVIPAN.Clear();\r
2981                                 this.listAVIPAN = null;\r
2982                         }\r
2983                         if( this.listChip != null )\r
2984                         {\r
2985                                 this.listChip.Clear();\r
2986                         }\r
2987                         base.On非活性化();\r
2988                 }\r
2989                 public override void OnManagedリソースの作成()\r
2990                 {\r
2991                         if( !base.b活性化してない )\r
2992                         {\r
2993                                 this.tBMP_BMPTEXの読み込み();\r
2994                                 this.tAVIの読み込み();\r
2995                                 base.OnManagedリソースの作成();\r
2996                         }\r
2997                 }\r
2998                 public override void OnManagedリソースの解放()\r
2999                 {\r
3000                         if( !base.b活性化してない )\r
3001                         {\r
3002                                 if( this.listBMP != null )\r
3003                                 {\r
3004                                         foreach( CBMP cbmp in this.listBMP.Values )\r
3005                                         {\r
3006                                                 cbmp.Dispose();\r
3007                                         }\r
3008                                 }\r
3009                                 if( this.listBMPTEX != null )\r
3010                                 {\r
3011                                         foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )\r
3012                                         {\r
3013                                                 cbmptex.Dispose();\r
3014                                         }\r
3015                                 }\r
3016                                 if( this.listAVI != null )\r
3017                                 {\r
3018                                         foreach( CAVI cavi in this.listAVI.Values )\r
3019                                         {\r
3020                                                 cavi.Dispose();\r
3021                                         }\r
3022                                 }\r
3023                                 base.OnManagedリソースの解放();\r
3024                         }\r
3025                 }\r
3026 \r
3027 \r
3028                 // その他\r
3029                 \r
3030                 #region [ private ]\r
3031                 //-----------------\r
3032                 [StructLayout( LayoutKind.Sequential )]\r
3033                 private struct STGDAPARAM\r
3034                 {\r
3035                         public string s;\r
3036                         public int c;\r
3037                 }\r
3038 \r
3039                 private readonly STGDAPARAM[] stGDAParam;\r
3040                 private bool bヘッダのみ;\r
3041                 private Stack<bool> bstackIFからENDIFをスキップする;\r
3042         \r
3043                 private int n現在の行数;\r
3044                 private int n現在の乱数;\r
3045 \r
3046                 private int n内部番号BPM1to;\r
3047                 private int n内部番号WAV1to;\r
3048                 private int[] n無限管理BPM;\r
3049                 private int[] n無限管理PAN;\r
3050                 private int[] n無限管理SIZE;\r
3051                 private int[] n無限管理VOL;\r
3052                 private int[] n無限管理WAV;\r
3053                 private int[] nRESULTIMAGE用優先順位;\r
3054                 private int[] nRESULTMOVIE用優先順位;\r
3055                 private int[] nRESULTSOUND用優先順位;\r
3056 \r
3057                 private bool t入力・コマンド文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
3058                 {\r
3059                         if( this.t入力・空白をスキップする( ref ce ) )\r
3060                         {\r
3061                                 while( ( ( ce.Current != ':' ) && ( ce.Current != ' ' ) ) && ( ( ce.Current != ';' ) && ( ce.Current != '\n' ) ) )\r
3062                                 {\r
3063                                         sb文字列.Append( ce.Current );\r
3064                                         if( !ce.MoveNext() )\r
3065                                         {\r
3066                                                 return false;\r
3067                                         }\r
3068                                 }\r
3069                                 if( ce.Current == ':' )\r
3070                                 {\r
3071                                         if( !ce.MoveNext() )\r
3072                                         {\r
3073                                                 return false;\r
3074                                         }\r
3075                                         if( !this.t入力・空白をスキップする( ref ce ) )\r
3076                                         {\r
3077                                                 return false;\r
3078                                         }\r
3079                                 }\r
3080                                 return true;\r
3081                         }\r
3082                         return false;\r
3083                 }\r
3084                 private bool t入力・コメントをスキップする( ref CharEnumerator ce )\r
3085                 {\r
3086                         while( ce.Current != '\n' )\r
3087                         {\r
3088                                 if( !ce.MoveNext() )\r
3089                                 {\r
3090                                         return false;\r
3091                                 }\r
3092                         }\r
3093                         return ce.MoveNext();\r
3094                 }\r
3095                 private bool t入力・コメント文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
3096                 {\r
3097                         if( ce.Current != ';' )\r
3098                         {\r
3099                                 return true;\r
3100                         }\r
3101                         if( ce.MoveNext() )\r
3102                         {\r
3103                                 while( ce.Current != '\n' )\r
3104                                 {\r
3105                                         sb文字列.Append( ce.Current );\r
3106                                         if( !ce.MoveNext() )\r
3107                                         {\r
3108                                                 return false;\r
3109                                         }\r
3110                                 }\r
3111                                 return true;\r
3112                         }\r
3113                         return false;\r
3114                 }\r
3115                 private void t入力・パラメータ食い込みチェック( string strコマンド名, ref string strコマンド, ref string strパラメータ )\r
3116                 {\r
3117                         if( ( strコマンド.Length > strコマンド名.Length ) && strコマンド.StartsWith( strコマンド名, StringComparison.OrdinalIgnoreCase ) )\r
3118                         {\r
3119                                 strパラメータ = strコマンド.Substring( strコマンド名.Length ).Trim();\r
3120                                 strコマンド = strコマンド.Substring( 0, strコマンド名.Length );\r
3121                         }\r
3122                 }\r
3123                 private bool t入力・パラメータ文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
3124                 {\r
3125                         if( this.t入力・空白をスキップする( ref ce ) )\r
3126                         {\r
3127                                 while( ( ce.Current != '\n' ) && ( ce.Current != ';' ) )\r
3128                                 {\r
3129                                         sb文字列.Append( ce.Current );\r
3130                                         if( !ce.MoveNext() )\r
3131                                         {\r
3132                                                 return false;\r
3133                                         }\r
3134                                 }\r
3135                                 return true;\r
3136                         }\r
3137                         return false;\r
3138                 }\r
3139                 private bool t入力・空白と改行をスキップする( ref CharEnumerator ce )\r
3140                 {\r
3141                         while( ( ce.Current == ' ' ) || ( ce.Current == '\n' ) )\r
3142                         {\r
3143                                 if( ce.Current == '\n' )\r
3144                                 {\r
3145                                         this.n現在の行数++;\r
3146                                 }\r
3147                                 if( !ce.MoveNext() )\r
3148                                 {\r
3149                                         return false;\r
3150                                 }\r
3151                         }\r
3152                         return true;\r
3153                 }\r
3154                 private bool t入力・空白をスキップする( ref CharEnumerator ce )\r
3155                 {\r
3156                         while( ce.Current == ' ' )\r
3157                         {\r
3158                                 if( !ce.MoveNext() )\r
3159                                 {\r
3160                                         return false;\r
3161                                 }\r
3162                         }\r
3163                         return true;\r
3164                 }\r
3165                 private void t入力・行解析( ref StringBuilder sbコマンド, ref StringBuilder sbパラメータ, ref StringBuilder sbコメント )\r
3166                 {\r
3167                         string str = sbコマンド.ToString();\r
3168                         string str2 = sbパラメータ.ToString().Trim();\r
3169                         string str3 = sbコメント.ToString();\r
3170                         if( str.StartsWith( "IF", StringComparison.OrdinalIgnoreCase ) )\r
3171                         {\r
3172                                 this.t入力・パラメータ食い込みチェック( "IF", ref str, ref str2 );\r
3173                                 if( this.bstackIFからENDIFをスキップする.Count == 0xff )\r
3174                                 {\r
3175                                         Trace.TraceWarning( "#IF の入れ子の数が 255 を超えました。この #IF を無視します。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3176                                 }\r
3177                                 else if( this.bstackIFからENDIFをスキップする.Peek() )\r
3178                                 {\r
3179                                         this.bstackIFからENDIFをスキップする.Push( true );\r
3180                                 }\r
3181                                 else\r
3182                                 {\r
3183                                         int result = 0;\r
3184                                         if( !int.TryParse( str2, out result ) )\r
3185                                         {\r
3186                                                 result = 1;\r
3187                                         }\r
3188                                         this.bstackIFからENDIFをスキップする.Push( result != this.n現在の乱数 );\r
3189                                 }\r
3190                         }\r
3191                         else if( str.StartsWith( "ENDIF", StringComparison.OrdinalIgnoreCase ) )\r
3192                         {\r
3193                                 this.t入力・パラメータ食い込みチェック( "ENDIF", ref str, ref str2 );\r
3194                                 if( this.bstackIFからENDIFをスキップする.Count > 1 )\r
3195                                 {\r
3196                                         this.bstackIFからENDIFをスキップする.Pop();\r
3197                                 }\r
3198                                 else\r
3199                                 {\r
3200                                         Trace.TraceWarning( "#ENDIF に対応する #IF がありません。この #ENDIF を無視します。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3201                                 }\r
3202                         }\r
3203                         else if( !this.bstackIFからENDIFをスキップする.Peek() )\r
3204                         {\r
3205                                 if( str.StartsWith( "PATH_WAV", StringComparison.OrdinalIgnoreCase ) )\r
3206                                 {\r
3207                                         this.t入力・パラメータ食い込みチェック( "PATH_WAV", ref str, ref str2 );\r
3208                                         this.PATH_WAV = str2;\r
3209                                 }\r
3210                                 else if( str.StartsWith( "TITLE", StringComparison.OrdinalIgnoreCase ) )\r
3211                                 {\r
3212                                         this.t入力・パラメータ食い込みチェック( "TITLE", ref str, ref str2 );\r
3213                                         this.TITLE = str2;\r
3214                                 }\r
3215                                 else if( str.StartsWith( "ARTIST", StringComparison.OrdinalIgnoreCase ) )\r
3216                                 {\r
3217                                         this.t入力・パラメータ食い込みチェック( "ARTIST", ref str, ref str2 );\r
3218                                         this.ARTIST = str2;\r
3219                                 }\r
3220                                 else if( str.StartsWith( "COMMENT", StringComparison.OrdinalIgnoreCase ) )\r
3221                                 {\r
3222                                         this.t入力・パラメータ食い込みチェック( "COMMENT", ref str, ref str2 );\r
3223                                         this.COMMENT = str2;\r
3224                                 }\r
3225                                 else if( str.StartsWith( "DLEVEL", StringComparison.OrdinalIgnoreCase ) || str.StartsWith( "PLAYLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
3226                                 {\r
3227                                         int num2;\r
3228                                         this.t入力・パラメータ食い込みチェック( "DLEVEL", ref str, ref str2 );\r
3229                                         this.t入力・パラメータ食い込みチェック( "PLAYLEVEL", ref str, ref str2 );\r
3230                                         if( int.TryParse( str2, out num2 ) )\r
3231                                         {\r
3232                                                 if( num2 < 0 )\r
3233                                                 {\r
3234                                                         num2 = 0;\r
3235                                                 }\r
3236                                                 else if( num2 > 100 )\r
3237                                                 {\r
3238                                                         num2 = 100;\r
3239                                                 }\r
3240                                                 this.LEVEL.Drums = num2;\r
3241                                         }\r
3242                                 }\r
3243                                 else if( str.StartsWith( "GLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
3244                                 {\r
3245                                         int num3;\r
3246                                         this.t入力・パラメータ食い込みチェック( "GLEVEL", ref str, ref str2 );\r
3247                                         if( int.TryParse( str2, out num3 ) )\r
3248                                         {\r
3249                                                 if( num3 < 0 )\r
3250                                                 {\r
3251                                                         num3 = 0;\r
3252                                                 }\r
3253                                                 else if( num3 > 100 )\r
3254                                                 {\r
3255                                                         num3 = 100;\r
3256                                                 }\r
3257                                                 this.LEVEL.Guitar = num3;\r
3258                                         }\r
3259                                 }\r
3260                                 else if( str.StartsWith( "BLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
3261                                 {\r
3262                                         int num4;\r
3263                                         this.t入力・パラメータ食い込みチェック( "BLEVEL", ref str, ref str2 );\r
3264                                         if( int.TryParse( str2, out num4 ) )\r
3265                                         {\r
3266                                                 if( num4 < 0 )\r
3267                                                 {\r
3268                                                         num4 = 0;\r
3269                                                 }\r
3270                                                 else if( num4 > 100 )\r
3271                                                 {\r
3272                                                         num4 = 100;\r
3273                                                 }\r
3274                                                 this.LEVEL.Bass = num4;\r
3275                                         }\r
3276                                 }\r
3277                                 else if( str.StartsWith( "GENRE", StringComparison.OrdinalIgnoreCase ) )\r
3278                                 {\r
3279                                         this.t入力・パラメータ食い込みチェック( "GENRE", ref str, ref str2 );\r
3280                                         this.GENRE = str2;\r
3281                                 }\r
3282                                 else\r
3283                                 {\r
3284                                         if( str.StartsWith( "HIDDENLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
3285                                         {\r
3286                                                 this.t入力・パラメータ食い込みチェック( "HIDDENLEVEL", ref str, ref str2 );\r
3287                                                 this.HIDDENLEVEL = str2.ToLower().Equals( "on" );\r
3288                                         }\r
3289                                         if( str.StartsWith( "STAGEFILE", StringComparison.OrdinalIgnoreCase ) )\r
3290                                         {\r
3291                                                 this.t入力・パラメータ食い込みチェック( "STAGEFILE", ref str, ref str2 );\r
3292                                                 this.STAGEFILE = str2;\r
3293                                         }\r
3294                                         else if( str.StartsWith( "PREVIEW", StringComparison.OrdinalIgnoreCase ) )\r
3295                                         {\r
3296                                                 this.t入力・パラメータ食い込みチェック( "PREVIEW", ref str, ref str2 );\r
3297                                                 this.PREVIEW = str2;\r
3298                                         }\r
3299                                         else if( str.StartsWith( "PREIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
3300                                         {\r
3301                                                 this.t入力・パラメータ食い込みチェック( "PREIMAGE", ref str, ref str2 );\r
3302                                                 this.PREIMAGE = str2;\r
3303                                         }\r
3304                                         else if( str.StartsWith( "PREMOVIE", StringComparison.OrdinalIgnoreCase ) )\r
3305                                         {\r
3306                                                 this.t入力・パラメータ食い込みチェック( "PREMOVIE", ref str, ref str2 );\r
3307                                                 this.PREMOVIE = str2;\r
3308                                         }\r
3309                                         else if( str.StartsWith( "BACKGROUND_GR", StringComparison.OrdinalIgnoreCase ) )\r
3310                                         {\r
3311                                                 this.t入力・パラメータ食い込みチェック( "BACKGROUND_GR", ref str, ref str2 );\r
3312                                                 this.BACKGROUND_GR = str2;\r
3313                                         }\r
3314                                         else if( str.StartsWith( "BACKGROUND", StringComparison.OrdinalIgnoreCase ) || str.StartsWith( "WALL", StringComparison.OrdinalIgnoreCase ) )\r
3315                                         {\r
3316                                                 this.t入力・パラメータ食い込みチェック( "BACKGROUND", ref str, ref str2 );\r
3317                                                 this.t入力・パラメータ食い込みチェック( "WALL", ref str, ref str2 );\r
3318                                                 this.BACKGROUND = str2;\r
3319                                         }\r
3320                                         else\r
3321                                         {\r
3322                                                 if( str.StartsWith( "RANDOM", StringComparison.OrdinalIgnoreCase ) )\r
3323                                                 {\r
3324                                                         this.t入力・パラメータ食い込みチェック( "RANDOM", ref str, ref str2 );\r
3325                                                         int num5 = 1;\r
3326                                                         if( !int.TryParse( str2, out num5 ) )\r
3327                                                         {\r
3328                                                                 num5 = 1;\r
3329                                                         }\r
3330                                                         this.n現在の乱数 = CDTXMania.Random.Next( num5 ) + 1;\r
3331                                                 }\r
3332                                                 if( str.StartsWith( "SOUND_NOWLOADING", StringComparison.OrdinalIgnoreCase ) )\r
3333                                                 {\r
3334                                                         this.t入力・パラメータ食い込みチェック( "SOUND_NOWLOADING", ref str, ref str2 );\r
3335                                                         this.SOUND_NOWLOADING = str2;\r
3336                                                 }\r
3337                                                 else if( !this.bヘッダのみ )\r
3338                                                 {\r
3339                                                         if( str.StartsWith( "PANEL", StringComparison.OrdinalIgnoreCase ) )\r
3340                                                         {\r
3341                                                                 this.t入力・パラメータ食い込みチェック( "PANEL", ref str, ref str2 );\r
3342                                                                 int dummyResult;                                                                // #23885 2010.12.12 yyagi: not to confuse "#PANEL strings (panel)" and "#PANEL int (panpot of EL)"\r
3343                                                                 if (!int.TryParse( str2, out dummyResult) ) {   // 数値じゃないならPANELとみなす\r
3344                                                                         this.PANEL = str2;                                                      //\r
3345                                                                         goto EOL;                                                                       //\r
3346                                                                 }                                                                                               // 数値ならPAN ELとみなす\r
3347 \r
3348                                                         }\r
3349                                                         if( str.StartsWith( "MIDIFILE", StringComparison.OrdinalIgnoreCase ) )\r
3350                                                         {\r
3351                                                                 this.t入力・パラメータ食い込みチェック( "MIDIFILE", ref str, ref str2 );\r
3352                                                                 this.MIDIFILE = str2;\r
3353                                                         }\r
3354                                                         else\r
3355                                                         {\r
3356                                                                 if( str.StartsWith( "MIDINOTE", StringComparison.OrdinalIgnoreCase ) )\r
3357                                                                 {\r
3358                                                                         this.t入力・パラメータ食い込みチェック( "MIDINOTE", ref str, ref str2 );\r
3359                                                                         this.MIDINOTE = str2.ToLower().Equals( "on" );\r
3360                                                                 }\r
3361                                                                 if( str.StartsWith( "BLACKCOLORKEY", StringComparison.OrdinalIgnoreCase ) )\r
3362                                                                 {\r
3363                                                                         this.t入力・パラメータ食い込みチェック( "BLACKCOLORKEY", ref str, ref str2 );\r
3364                                                                         this.BLACKCOLORKEY = str2.ToLower().Equals( "on" );\r
3365                                                                 }\r
3366                                                                 if( str.StartsWith( "BASEBPM", StringComparison.OrdinalIgnoreCase ) )\r
3367                                                                 {\r
3368                                                                         this.t入力・パラメータ食い込みチェック( "BASEBPM", ref str, ref str2 );\r
3369                                                                         double num6 = 0.0;\r
3370                                                                         if( double.TryParse( str2, out num6 ) && ( num6 > 0.0 ) )\r
3371                                                                         {\r
3372                                                                                 this.BASEBPM = num6;\r
3373                                                                         }\r
3374                                                                 }\r
3375                                                                 else if( str.StartsWith( "SOUND_STAGEFAILED", StringComparison.OrdinalIgnoreCase ) )\r
3376                                                                 {\r
3377                                                                         this.t入力・パラメータ食い込みチェック( "SOUND_STAGEFAILED", ref str, ref str2 );\r
3378                                                                         this.SOUND_STAGEFAILED = str2;\r
3379                                                                 }\r
3380                                                                 else if( str.StartsWith( "SOUND_FULLCOMBO", StringComparison.OrdinalIgnoreCase ) )\r
3381                                                                 {\r
3382                                                                         this.t入力・パラメータ食い込みチェック( "SOUND_FULLCOMBO", ref str, ref str2 );\r
3383                                                                         this.SOUND_FULLCOMBO = str2;\r
3384                                                                 }\r
3385                                                                 else if( str.StartsWith( "SOUND_AUDIENCE", StringComparison.OrdinalIgnoreCase ) )\r
3386                                                                 {\r
3387                                                                         this.t入力・パラメータ食い込みチェック( "SOUND_AUDIENCE", ref str, ref str2 );\r
3388                                                                         this.SOUND_AUDIENCE = str2;\r
3389                                                                 }\r
3390                                                                 else if( ( ( ( ( ( ( ( ( ( ( ( ( !this.t入力・行解析・WAVVOL_VOLUME( str, str2, str3 ) && !this.t入力・行解析・WAVPAN_PAN( str, str2, str3 ) ) && !this.t入力・行解析・WAV( str, str2, str3 ) ) && !this.t入力・行解析・BMPTEX( str, str2, str3 ) ) && !this.t入力・行解析・BMP( str, str2, str3 ) ) && !this.t入力・行解析・BGAPAN( str, str2, str3 ) ) && !this.t入力・行解析・BGA( str, str2, str3 ) ) && !this.t入力・行解析・AVIPAN( str, str2, str3 ) ) && !this.t入力・行解析・AVI_VIDEO( str, str2, str3 ) ) && !this.t入力・行解析・BPM_BPMzz( str, str2, str3 ) ) && !this.t入力・行解析・RESULTIMAGE( str, str2, str3 ) ) && !this.t入力・行解析・RESULTMOVIE( str, str2, str3 ) ) && !this.t入力・行解析・RESULTSOUND( str, str2, str3 ) ) && !this.t入力・行解析・SIZE( str, str2, str3 ) )\r
3391                                                                 {\r
3392                                                                         this.t入力・行解析・チップ配置( str, str2, str3 );\r
3393                                                                 }\r
3394                                                         }\r
3395                                                 EOL:\r
3396                                                         int xx = 0;             // #23885 2010.12.12 yyagi: dummy line to exit parsing the line\r
3397                                                 }\r
3398                                         }\r
3399                                 }\r
3400                         }\r
3401                 }\r
3402                 private bool t入力・行解析・AVI_VIDEO( string strコマンド, string strパラメータ, string strコメント )\r
3403                 {\r
3404                         if( strコマンド.StartsWith( "AVI", StringComparison.OrdinalIgnoreCase ) )\r
3405                         {\r
3406                                 strコマンド = strコマンド.Substring( 3 );\r
3407                         }\r
3408                         else if( strコマンド.StartsWith( "VIDEO", StringComparison.OrdinalIgnoreCase ) )\r
3409                         {\r
3410                                 strコマンド = strコマンド.Substring( 5 );\r
3411                         }\r
3412                         else\r
3413                         {\r
3414                                 return false;\r
3415                         }\r
3416                         if( strコマンド.Length < 2 )\r
3417                         {\r
3418                                 return false;\r
3419                         }\r
3420                         int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
3421                         if( ( key < 0 ) || ( key >= 36 * 36 ) )\r
3422                         {\r
3423                                 Trace.TraceError( "AVI(VIDEO)番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3424                                 return false;\r
3425                         }\r
3426                         CAVI cavi = new CAVI();\r
3427                         cavi.n番号 = key;\r
3428                         cavi.strファイル名 = strパラメータ;\r
3429                         cavi.strコメント文 = strコメント;\r
3430                         if( this.listAVI.ContainsKey( key ) )\r
3431                         {\r
3432                                 this.listAVI.Remove( key );\r
3433                         }\r
3434                         this.listAVI.Add( key, cavi );\r
3435                         return true;\r
3436                 }\r
3437                 private bool t入力・行解析・AVIPAN( string strコマンド, string strパラメータ, string strコメント )\r
3438                 {\r
3439                         if( strコマンド.StartsWith( "AVIPAN", StringComparison.OrdinalIgnoreCase ) )\r
3440                         {\r
3441                                 strコマンド = strコマンド.Substring( 6 );\r
3442                         }\r
3443                         else\r
3444                         {\r
3445                                 return false;\r
3446                         }\r
3447                         if( strコマンド.Length < 2 )\r
3448                         {\r
3449                                 return false;\r
3450                         }\r
3451                         int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
3452                         if( ( key < 0 ) || ( key >= 36 * 36 ) )\r
3453                         {\r
3454                                 Trace.TraceError( "AVIPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3455                                 return false;\r
3456                         }\r
3457                         CAVIPAN cavipan = new CAVIPAN();\r
3458                         cavipan.n番号 = key;\r
3459                         string[] strArray = strパラメータ.Split( new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries );\r
3460                         if( strArray.Length < 14 )\r
3461                         {\r
3462                                 Trace.TraceError( "AVIPAN: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3463                                 return false;\r
3464                         }\r
3465                         int index = 0;\r
3466                         int result = 0;\r
3467                         if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )\r
3468                         {\r
3469                                 Trace.TraceError( "AVIPAN: {2}番目の数(AVI番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3470                                 return false;\r
3471                         }\r
3472                         cavipan.nAVI番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );\r
3473                         if( ( cavipan.nAVI番号 < 1 ) || ( cavipan.nAVI番号 >= 36 * 36 ) )\r
3474                         {\r
3475                                 Trace.TraceError( "AVIPAN: {2}番目の数(AVI番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3476                                 return false;\r
3477                         }\r
3478                         index++;\r
3479                         result = 0;\r
3480                         if( !int.TryParse( strArray[ index ], out result ) )\r
3481                         {\r
3482                                 Trace.TraceError( "AVIPAN: {2}番目の引数(開始転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3483                                 return false;\r
3484                         }\r
3485                         cavipan.sz開始サイズ.Width = result;\r
3486                         index++;\r
3487                         result = 0;\r
3488                         if( !int.TryParse( strArray[ index ], out result ) )\r
3489                         {\r
3490                                 Trace.TraceError( "AVIPAN: {2}番目の引数(開始転送サイズ・高さ)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3491                                 return false;\r
3492                         }\r
3493                         cavipan.sz開始サイズ.Height = result;\r
3494                         index++;\r
3495                         result = 0;\r
3496                         if( !int.TryParse( strArray[ index ], out result ) )\r
3497                         {\r
3498                                 Trace.TraceError( "AVIPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3499                                 return false;\r
3500                         }\r
3501                         cavipan.sz終了サイズ.Width = result;\r
3502                         index++;\r
3503                         result = 0;\r
3504                         if( !int.TryParse( strArray[ index ], out result ) )\r
3505                         {\r
3506                                 Trace.TraceError( "AVIPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3507                                 return false;\r
3508                         }\r
3509                         cavipan.sz終了サイズ.Height = result;\r
3510                         index++;\r
3511                         result = 0;\r
3512                         if( !int.TryParse( strArray[ index ], out result ) )\r
3513                         {\r
3514                                 Trace.TraceError( "AVIPAN: {2}番目の引数(画像側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3515                                 return false;\r
3516                         }\r
3517                         cavipan.pt動画側開始位置.X = result;\r
3518                         index++;\r
3519                         result = 0;\r
3520                         if( !int.TryParse( strArray[ index ], out result ) )\r
3521                         {\r
3522                                 Trace.TraceError( "AVIPAN: {2}番目の引数(画像側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3523                                 return false;\r
3524                         }\r
3525                         cavipan.pt動画側開始位置.Y = result;\r
3526                         index++;\r
3527                         result = 0;\r
3528                         if( !int.TryParse( strArray[ index ], out result ) )\r
3529                         {\r
3530                                 Trace.TraceError( "AVIPAN: {2}番目の引数(画像側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3531                                 return false;\r
3532                         }\r
3533                         cavipan.pt動画側終了位置.X = result;\r
3534                         index++;\r
3535                         result = 0;\r
3536                         if( !int.TryParse( strArray[ index ], out result ) )\r
3537                         {\r
3538                                 Trace.TraceError( "AVIPAN: {2}番目の引数(画像側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3539                                 return false;\r
3540                         }\r
3541                         cavipan.pt動画側終了位置.Y = result;\r
3542                         index++;\r
3543                         result = 0;\r
3544                         if( !int.TryParse( strArray[ index ], out result ) )\r
3545                         {\r
3546                                 Trace.TraceError( "AVIPAN: {2}番目の引数(表示側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3547                                 return false;\r
3548                         }\r
3549                         cavipan.pt表示側開始位置.X = result;\r
3550                         index++;\r
3551                         result = 0;\r
3552                         if( !int.TryParse( strArray[ index ], out result ) )\r
3553                         {\r
3554                                 Trace.TraceError( "AVIPAN: {2}番目の引数(表示側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3555                                 return false;\r
3556                         }\r
3557                         cavipan.pt表示側開始位置.Y = result;\r
3558                         index++;\r
3559                         result = 0;\r
3560                         if( !int.TryParse( strArray[ index ], out result ) )\r
3561                         {\r
3562                                 Trace.TraceError( "AVIPAN: {2}番目の引数(表示側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3563                                 return false;\r
3564                         }\r
3565                         cavipan.pt表示側終了位置.X = result;\r
3566                         index++;\r
3567                         result = 0;\r
3568                         if( !int.TryParse( strArray[ index ], out result ) )\r
3569                         {\r
3570                                 Trace.TraceError( "AVIPAN: {2}番目の引数(表示側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3571                                 return false;\r
3572                         }\r
3573                         cavipan.pt表示側終了位置.Y = result;\r
3574                         index++;\r
3575                         result = 0;\r
3576                         if( !int.TryParse( strArray[ index ], out result ) )\r
3577                         {\r
3578                                 Trace.TraceError( "AVIPAN: {2}番目の引数(移動時間)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3579                                 return false;\r
3580                         }\r
3581                         if( result < 0 )\r
3582                         {\r
3583                                 result = 0;\r
3584                         }\r
3585                         cavipan.n移動時間ct = result;\r
3586                         index++;\r
3587                         if( this.listAVIPAN.ContainsKey( key ) )\r
3588                         {\r
3589                                 this.listAVIPAN.Remove( key );\r
3590                         }\r
3591                         this.listAVIPAN.Add( key, cavipan );\r
3592                         return true;\r
3593                 }\r
3594                 private bool t入力・行解析・BGA( string strコマンド, string strパラメータ, string strコメント )\r
3595                 {\r
3596                         if( strコマンド.StartsWith( "BGA", StringComparison.OrdinalIgnoreCase ) )\r
3597                         {\r
3598                                 strコマンド = strコマンド.Substring( 3 );\r
3599                         }\r
3600                         else\r
3601                         {\r
3602                                 return false;\r
3603                         }\r
3604                         if( strコマンド.Length < 2 )\r
3605                         {\r
3606                                 return false;\r
3607                         }\r
3608                         int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
3609                         if( ( key < 0 ) || ( key >= 36 * 36 ) )\r
3610                         {\r
3611                                 Trace.TraceError( "BGA番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3612                                 return false;\r
3613                         }\r
3614                         CBGA cbga = new CBGA();\r
3615                         cbga.n番号 = key;\r
3616                         string[] strArray = strパラメータ.Split( new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries );\r
3617                         if( strArray.Length < 7 )\r
3618                         {\r
3619                                 Trace.TraceError( "BGA: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3620                                 return false;\r
3621                         }\r
3622                         int index = 0;\r
3623                         int result = 0;\r
3624                         if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )\r
3625                         {\r
3626                                 Trace.TraceError( "BGA: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3627                                 return false;\r
3628                         }\r
3629                         cbga.nBMP番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );\r
3630                         if( ( cbga.nBMP番号 < 1 ) || ( cbga.nBMP番号 >= 36 * 36 ) )\r
3631                         {\r
3632                                 Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3633                                 return false;\r
3634                         }\r
3635                         index++;\r
3636                         result = 0;\r
3637                         if( !int.TryParse( strArray[ index ], out result ) )\r
3638                         {\r
3639                                 Trace.TraceError( "BGA: {2}番目の引数(画像側位置1・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3640                                 return false;\r
3641                         }\r
3642                         cbga.pt画像側左上座標.X = result;\r
3643                         index++;\r
3644                         result = 0;\r
3645                         if( !int.TryParse( strArray[ index ], out result ) )\r
3646                         {\r
3647                                 Trace.TraceError( "BGA: {2}番目の引数(画像側位置1・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3648                                 return false;\r
3649                         }\r
3650                         cbga.pt画像側左上座標.Y = result;\r
3651                         index++;\r
3652                         result = 0;\r
3653                         if( !int.TryParse( strArray[ index ], out result ) )\r
3654                         {\r
3655                                 Trace.TraceError( "BGA: {2}番目の引数(画像側座標2・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3656                                 return false;\r
3657                         }\r
3658                         cbga.pt画像側右下座標.X = result;\r
3659                         index++;\r
3660                         result = 0;\r
3661                         if( !int.TryParse( strArray[ index ], out result ) )\r
3662                         {\r
3663                                 Trace.TraceError( "BGA: {2}番目の引数(画像側座標2・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3664                                 return false;\r
3665                         }\r
3666                         cbga.pt画像側右下座標.Y = result;\r
3667                         index++;\r
3668                         result = 0;\r
3669                         if( !int.TryParse( strArray[ index ], out result ) )\r
3670                         {\r
3671                                 Trace.TraceError( "BGA: {2}番目の引数(表示位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3672                                 return false;\r
3673                         }\r
3674                         cbga.pt表示座標.X = result;\r
3675                         index++;\r
3676                         result = 0;\r
3677                         if( !int.TryParse( strArray[ index ], out result ) )\r
3678                         {\r
3679                                 Trace.TraceError( "BGA: {2}番目の引数(表示位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3680                                 return false;\r
3681                         }\r
3682                         cbga.pt表示座標.Y = result;\r
3683                         index++;\r
3684                         if( cbga.pt画像側左上座標.X > cbga.pt画像側右下座標.X )\r
3685                         {\r
3686                                 result = cbga.pt画像側左上座標.X;\r
3687                                 cbga.pt画像側左上座標.X = cbga.pt画像側右下座標.X;\r
3688                                 cbga.pt画像側右下座標.X = result;\r
3689                         }\r
3690                         if( cbga.pt画像側左上座標.Y > cbga.pt画像側右下座標.Y )\r
3691                         {\r
3692                                 result = cbga.pt画像側左上座標.Y;\r
3693                                 cbga.pt画像側左上座標.Y = cbga.pt画像側右下座標.Y;\r
3694                                 cbga.pt画像側右下座標.Y = result;\r
3695                         }\r
3696                         if( this.listBGA.ContainsKey( key ) )\r
3697                         {\r
3698                                 this.listBGA.Remove( key );\r
3699                         }\r
3700                         this.listBGA.Add( key, cbga );\r
3701                         return true;\r
3702                 }\r
3703                 private bool t入力・行解析・BGAPAN( string strコマンド, string strパラメータ, string strコメント )\r
3704                 {\r
3705                         if( strコマンド.StartsWith( "BGAPAN", StringComparison.OrdinalIgnoreCase ) )\r
3706                         {\r
3707                                 strコマンド = strコマンド.Substring( 6 );\r
3708                         }\r
3709                         else\r
3710                         {\r
3711                                 return false;\r
3712                         }\r
3713                         if( strコマンド.Length < 2 )\r
3714                         {\r
3715                                 return false;\r
3716                         }\r
3717                         int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
3718                         if( ( key < 0 ) || ( key >= 36 * 36 ) )\r
3719                         {\r
3720                                 Trace.TraceError( "BGAPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3721                                 return false;\r
3722                         }\r
3723                         CBGAPAN cbgapan = new CBGAPAN();\r
3724                         cbgapan.n番号 = key;\r
3725                         string[] strArray = strパラメータ.Split( new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries );\r
3726                         if( strArray.Length < 14 )\r
3727                         {\r
3728                                 Trace.TraceError( "BGAPAN: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3729                                 return false;\r
3730                         }\r
3731                         int index = 0;\r
3732                         int result = 0;\r
3733                         if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )\r
3734                         {\r
3735                                 Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3736                                 return false;\r
3737                         }\r
3738                         cbgapan.nBMP番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );\r
3739                         if( ( cbgapan.nBMP番号 < 1 ) || ( cbgapan.nBMP番号 >= 36 * 36 ) )\r
3740                         {\r
3741                                 Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3742                                 return false;\r
3743                         }\r
3744                         index++;\r
3745                         result = 0;\r
3746                         if( !int.TryParse( strArray[ index ], out result ) )\r
3747                         {\r
3748                                 Trace.TraceError( "BGAPAN: {2}番目の引数(開始転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3749                                 return false;\r
3750                         }\r
3751                         cbgapan.sz開始サイズ.Width = result;\r
3752                         index++;\r
3753                         result = 0;\r
3754                         if( !int.TryParse( strArray[ index ], out result ) )\r
3755                         {\r
3756                                 Trace.TraceError( "BGAPAN: {2}番目の引数(開始転送サイズ・高さ)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3757                                 return false;\r
3758                         }\r
3759                         cbgapan.sz開始サイズ.Height = result;\r
3760                         index++;\r
3761                         result = 0;\r
3762                         if( !int.TryParse( strArray[ index ], out result ) )\r
3763                         {\r
3764                                 Trace.TraceError( "BGAPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3765                                 return false;\r
3766                         }\r
3767                         cbgapan.sz終了サイズ.Width = result;\r
3768                         index++;\r
3769                         result = 0;\r
3770                         if( !int.TryParse( strArray[ index ], out result ) )\r
3771                         {\r
3772                                 Trace.TraceError( "BGAPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3773                                 return false;\r
3774                         }\r
3775                         cbgapan.sz終了サイズ.Height = result;\r
3776                         index++;\r
3777                         result = 0;\r
3778                         if( !int.TryParse( strArray[ index ], out result ) )\r
3779                         {\r
3780                                 Trace.TraceError( "BGAPAN: {2}番目の引数(画像側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3781                                 return false;\r
3782                         }\r
3783                         cbgapan.pt画像側開始位置.X = result;\r
3784                         index++;\r
3785                         result = 0;\r
3786                         if( !int.TryParse( strArray[ index ], out result ) )\r
3787                         {\r
3788                                 Trace.TraceError( "BGAPAN: {2}番目の引数(画像側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3789                                 return false;\r
3790                         }\r
3791                         cbgapan.pt画像側開始位置.Y = result;\r
3792                         index++;\r
3793                         result = 0;\r
3794                         if( !int.TryParse( strArray[ index ], out result ) )\r
3795                         {\r
3796                                 Trace.TraceError( "BGAPAN: {2}番目の引数(画像側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3797                                 return false;\r
3798                         }\r
3799                         cbgapan.pt画像側終了位置.X = result;\r
3800                         index++;\r
3801                         result = 0;\r
3802                         if( !int.TryParse( strArray[ index ], out result ) )\r
3803                         {\r
3804                                 Trace.TraceError( "BGAPAN: {2}番目の引数(画像側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3805                                 return false;\r
3806                         }\r
3807                         cbgapan.pt画像側終了位置.Y = result;\r
3808                         index++;\r
3809                         result = 0;\r
3810                         if( !int.TryParse( strArray[ index ], out result ) )\r
3811                         {\r
3812                                 Trace.TraceError( "BGAPAN: {2}番目の引数(表示側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3813                                 return false;\r
3814                         }\r
3815                         cbgapan.pt表示側開始位置.X = result;\r
3816                         index++;\r
3817                         result = 0;\r
3818                         if( !int.TryParse( strArray[ index ], out result ) )\r
3819                         {\r
3820                                 Trace.TraceError( "BGAPAN: {2}番目の引数(表示側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3821                                 return false;\r
3822                         }\r
3823                         cbgapan.pt表示側開始位置.Y = result;\r
3824                         index++;\r
3825                         result = 0;\r
3826                         if( !int.TryParse( strArray[ index ], out result ) )\r
3827                         {\r
3828                                 Trace.TraceError( "BGAPAN: {2}番目の引数(表示側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3829                                 return false;\r
3830                         }\r
3831                         cbgapan.pt表示側終了位置.X = result;\r
3832                         index++;\r
3833                         result = 0;\r
3834                         if( !int.TryParse( strArray[ index ], out result ) )\r
3835                         {\r
3836                                 Trace.TraceError( "BGAPAN: {2}番目の引数(表示側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3837                                 return false;\r
3838                         }\r
3839                         cbgapan.pt表示側終了位置.Y = result;\r
3840                         index++;\r
3841                         result = 0;\r
3842                         if( !int.TryParse( strArray[ index ], out result ) )\r
3843                         {\r
3844                                 Trace.TraceError( "BGAPAN: {2}番目の引数(移動時間)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );\r
3845                                 return false;\r
3846                         }\r
3847                         if( result < 0 )\r
3848                         {\r
3849                                 result = 0;\r
3850                         }\r
3851                         cbgapan.n移動時間ct = result;\r
3852                         index++;\r
3853                         if( this.listBGAPAN.ContainsKey( key ) )\r
3854                         {\r
3855                                 this.listBGAPAN.Remove( key );\r
3856                         }\r
3857                         this.listBGAPAN.Add( key, cbgapan );\r
3858                         return true;\r
3859                 }\r
3860                 private bool t入力・行解析・BMP( string strコマンド, string strパラメータ, string strコメント )\r
3861                 {\r
3862                         if( strコマンド.StartsWith( "BMP", StringComparison.OrdinalIgnoreCase ) )\r
3863                         {\r
3864                                 strコマンド = strコマンド.Substring( 3 );\r
3865                         }\r
3866                         else\r
3867                         {\r
3868                                 return false;\r
3869                         }\r
3870                         int key = 0;\r
3871                         if( strコマンド.Length < 2 )\r
3872                         {\r
3873                                 key = 0;\r
3874                         }\r
3875                         else\r
3876                         {\r
3877                                 key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
3878                                 if( ( key < 0 ) || ( key >= 36 * 36 ) )\r
3879                                 {\r
3880                                         Trace.TraceError( "BMP番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3881                                         return false;\r
3882                                 }\r
3883                         }\r
3884                         CBMP cbmp = new CBMP();\r
3885                         cbmp.n番号 = key;\r
3886                         cbmp.strファイル名 = strパラメータ;\r
3887                         cbmp.strコメント文 = strコメント;\r
3888                         if( this.listBMP.ContainsKey( key ) )\r
3889                         {\r
3890                                 this.listBMP.Remove( key );\r
3891                         }\r
3892                         this.listBMP.Add( key, cbmp );\r
3893                         return true;\r
3894                 }\r
3895                 private bool t入力・行解析・BMPTEX( string strコマンド, string strパラメータ, string strコメント )\r
3896                 {\r
3897                         if( strコマンド.StartsWith( "BMPTEX", StringComparison.OrdinalIgnoreCase ) )\r
3898                         {\r
3899                                 strコマンド = strコマンド.Substring( 6 );\r
3900                         }\r
3901                         else\r
3902                         {\r
3903                                 return false;\r
3904                         }\r
3905                         if( strコマンド.Length < 2 )\r
3906                         {\r
3907                                 return false;\r
3908                         }\r
3909                         int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
3910                         if( ( key < 0 ) || ( key >= 36 * 36 ) )\r
3911                         {\r
3912                                 Trace.TraceError( "BMPTEX番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3913                                 return false;\r
3914                         }\r
3915                         CBMPTEX cbmptex = new CBMPTEX();\r
3916                         cbmptex.n番号 = key;\r
3917                         cbmptex.strファイル名 = strパラメータ;\r
3918                         cbmptex.strコメント文 = strコメント;\r
3919                         if( this.listBMPTEX.ContainsKey( key ) )\r
3920                         {\r
3921                                 this.listBMPTEX.Remove( key );\r
3922                         }\r
3923                         this.listBMPTEX.Add( key, cbmptex );\r
3924                         return true;\r
3925                 }\r
3926                 private bool t入力・行解析・BPM_BPMzz( string strコマンド, string strパラメータ, string strコメント )\r
3927                 {\r
3928                         if( strコマンド.StartsWith( "BPM", StringComparison.OrdinalIgnoreCase ) )\r
3929                         {\r
3930                                 strコマンド = strコマンド.Substring( 3 );\r
3931                         }\r
3932                         else\r
3933                         {\r
3934                                 return false;\r
3935                         }\r
3936                         int index = 0;\r
3937                         if( strコマンド.Length < 2 )\r
3938                         {\r
3939                                 index = 0;\r
3940                         }\r
3941                         else\r
3942                         {\r
3943                                 index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
3944                                 if( ( index < 0 ) || ( index >= 36 * 36 ) )\r
3945                                 {\r
3946                                         Trace.TraceError( "BPM番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
3947                                         return false;\r
3948                                 }\r
3949                         }\r
3950                         double result = 0.0;\r
3951                         if( !double.TryParse( strパラメータ, out result ) )\r
3952                         {\r
3953                                 return false;\r
3954                         }\r
3955                         if( result <= 0.0 )\r
3956                         {\r
3957                                 return false;\r
3958                         }\r
3959                         if( index == 0 )\r
3960                         {\r
3961                                 this.BPM = result;\r
3962                         }\r
3963                         CBPM cbpm = new CBPM();\r
3964                         cbpm.n内部番号 = this.n内部番号BPM1to;\r
3965                         cbpm.n表記上の番号 = index;\r
3966                         cbpm.dbBPM値 = result;\r
3967                         this.listBPM.Add( this.n内部番号BPM1to, cbpm );\r
3968                         if( this.n無限管理BPM[ index ] == -index )\r
3969                         {\r
3970                                 for( int i = 0; i < this.listChip.Count; i++ )\r
3971                                 {\r
3972                                         CChip chip = this.listChip[ i ];\r
3973                                         if( chip.bBPMチップである && ( chip.n整数値・内部番号 == -index ) )\r
3974                                         {\r
3975                                                 chip.n整数値・内部番号 = this.n内部番号BPM1to;\r
3976                                         }\r
3977                                 }\r
3978                         }\r
3979                         this.n無限管理BPM[ index ] = this.n内部番号BPM1to;\r
3980                         this.n内部番号BPM1to++;\r
3981                         return true;\r
3982                 }\r
3983                 private bool t入力・行解析・RESULTIMAGE( string strコマンド, string strパラメータ, string strコメント )\r
3984                 {\r
3985                         if( strコマンド.StartsWith( "RESULTIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
3986                         {\r
3987                                 strコマンド = strコマンド.Substring( 11 );\r
3988                         }\r
3989                         else\r
3990                         {\r
3991                                 return false;\r
3992                         }\r
3993                         if( strコマンド.Length < 2 )\r
3994                         {\r
3995                                 for( int i = 0; i < 7; i++ )\r
3996                                 {\r
3997                                         if( this.nRESULTIMAGE用優先順位[ i ] == 0 )\r
3998                                         {\r
3999                                                 this.RESULTIMAGE[ i ] = strパラメータ.Trim();\r
4000                                         }\r
4001                                 }\r
4002                         }\r
4003                         else\r
4004                         {\r
4005                                 switch( strコマンド.ToUpper() )\r
4006                                 {\r
4007                                         case "_SS":\r
4008                                                 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 0, strパラメータ );\r
4009                                                 goto Label_0142;\r
4010 \r
4011                                         case "_S":\r
4012                                                 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 1, strパラメータ );\r
4013                                                 goto Label_0142;\r
4014 \r
4015                                         case "_A":\r
4016                                                 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 2, strパラメータ );\r
4017                                                 goto Label_0142;\r
4018 \r
4019                                         case "_B":\r
4020                                                 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 3, strパラメータ );\r
4021                                                 goto Label_0142;\r
4022 \r
4023                                         case "_C":\r
4024                                                 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 4, strパラメータ );\r
4025                                                 goto Label_0142;\r
4026 \r
4027                                         case "_D":\r
4028                                                 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 5, strパラメータ );\r
4029                                                 goto Label_0142;\r
4030 \r
4031                                         case "_E":\r
4032                                                 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 6, strパラメータ );\r
4033                                                 goto Label_0142;\r
4034                                 }\r
4035                         }\r
4036                 Label_0142:\r
4037                         return true;\r
4038                 }\r
4039                 private void t入力・行解析・RESULTIMAGE・ファイルを設定する( int nランク0to6, string strファイル名 )\r
4040                 {\r
4041                         if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )\r
4042                         {\r
4043                                 for( int i = nランク0to6; i >= 0; i-- )\r
4044                                 {\r
4045                                         if( this.nRESULTIMAGE用優先順位[ i ] < ( 7 - nランク0to6 ) )\r
4046                                         {\r
4047                                                 this.nRESULTIMAGE用優先順位[ i ] = 7 - nランク0to6;\r
4048                                                 this.RESULTIMAGE[ i ] = strファイル名;\r
4049                                         }\r
4050                                 }\r
4051                         }\r
4052                 }\r
4053                 private bool t入力・行解析・RESULTMOVIE( string strコマンド, string strパラメータ, string strコメント )\r
4054                 {\r
4055                         if( strコマンド.StartsWith( "RESULTMOVIE", StringComparison.OrdinalIgnoreCase ) )\r
4056                         {\r
4057                                 strコマンド = strコマンド.Substring( 11 );\r
4058                         }\r
4059                         else\r
4060                         {\r
4061                                 return false;\r
4062                         }\r
4063                         if( strコマンド.Length < 2 )\r
4064                         {\r
4065                                 for( int i = 0; i < 7; i++ )\r
4066                                 {\r
4067                                         if( this.nRESULTMOVIE用優先順位[ i ] == 0 )\r
4068                                         {\r
4069                                                 this.RESULTMOVIE[ i ] = strパラメータ.Trim();\r
4070                                         }\r
4071                                 }\r
4072                         }\r
4073                         else\r
4074                         {\r
4075                                 switch( strコマンド.ToUpper() )\r
4076                                 {\r
4077                                         case "_SS":\r
4078                                                 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 0, strパラメータ );\r
4079                                                 goto Label_0142;\r
4080 \r
4081                                         case "_S":\r
4082                                                 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 1, strパラメータ );\r
4083                                                 goto Label_0142;\r
4084 \r
4085                                         case "_A":\r
4086                                                 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 2, strパラメータ );\r
4087                                                 goto Label_0142;\r
4088 \r
4089                                         case "_B":\r
4090                                                 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 3, strパラメータ );\r
4091                                                 goto Label_0142;\r
4092 \r
4093                                         case "_C":\r
4094                                                 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 4, strパラメータ );\r
4095                                                 goto Label_0142;\r
4096 \r
4097                                         case "_D":\r
4098                                                 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 5, strパラメータ );\r
4099                                                 goto Label_0142;\r
4100 \r
4101                                         case "_E":\r
4102                                                 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 6, strパラメータ );\r
4103                                                 goto Label_0142;\r
4104                                 }\r
4105                         }\r
4106                 Label_0142:\r
4107                         return true;\r
4108                 }\r
4109                 private void t入力・行解析・RESULTMOVIE・ファイルを設定する( int nランク0to6, string strファイル名 )\r
4110                 {\r
4111                         if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )\r
4112                         {\r
4113                                 for( int i = nランク0to6; i >= 0; i-- )\r
4114                                 {\r
4115                                         if( this.nRESULTMOVIE用優先順位[ i ] < ( 7 - nランク0to6 ) )\r
4116                                         {\r
4117                                                 this.nRESULTMOVIE用優先順位[ i ] = 7 - nランク0to6;\r
4118                                                 this.RESULTMOVIE[ i ] = strファイル名;\r
4119                                         }\r
4120                                 }\r
4121                         }\r
4122                 }\r
4123                 private bool t入力・行解析・RESULTSOUND( string strコマンド, string strパラメータ, string strコメント )\r
4124                 {\r
4125                         if( strコマンド.StartsWith( "RESULTSOUND", StringComparison.OrdinalIgnoreCase ) )\r
4126                         {\r
4127                                 strコマンド = strコマンド.Substring( 11 );\r
4128                         }\r
4129                         else\r
4130                         {\r
4131                                 return false;\r
4132                         }\r
4133                         if( strコマンド.Length < 2 )\r
4134                         {\r
4135                                 for( int i = 0; i < 7; i++ )\r
4136                                 {\r
4137                                         if( this.nRESULTSOUND用優先順位[ i ] == 0 )\r
4138                                         {\r
4139                                                 this.RESULTSOUND[ i ] = strパラメータ.Trim();\r
4140                                         }\r
4141                                 }\r
4142                         }\r
4143                         else\r
4144                         {\r
4145                                 switch( strコマンド.ToUpper() )\r
4146                                 {\r
4147                                         case "_SS":\r
4148                                                 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 0, strパラメータ );\r
4149                                                 goto Label_0142;\r
4150 \r
4151                                         case "_S":\r
4152                                                 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 1, strパラメータ );\r
4153                                                 goto Label_0142;\r
4154 \r
4155                                         case "_A":\r
4156                                                 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 2, strパラメータ );\r
4157                                                 goto Label_0142;\r
4158 \r
4159                                         case "_B":\r
4160                                                 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 3, strパラメータ );\r
4161                                                 goto Label_0142;\r
4162 \r
4163                                         case "_C":\r
4164                                                 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 4, strパラメータ );\r
4165                                                 goto Label_0142;\r
4166 \r
4167                                         case "_D":\r
4168                                                 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 5, strパラメータ );\r
4169                                                 goto Label_0142;\r
4170 \r
4171                                         case "_E":\r
4172                                                 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 6, strパラメータ );\r
4173                                                 goto Label_0142;\r
4174                                 }\r
4175                         }\r
4176                 Label_0142:\r
4177                         return true;\r
4178                 }\r
4179                 private void t入力・行解析・RESULTSOUND・ファイルを設定する( int nランク0to6, string strファイル名 )\r
4180                 {\r
4181                         if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )\r
4182                         {\r
4183                                 for( int i = nランク0to6; i >= 0; i-- )\r
4184                                 {\r
4185                                         if( this.nRESULTSOUND用優先順位[ i ] < ( 7 - nランク0to6 ) )\r
4186                                         {\r
4187                                                 this.nRESULTSOUND用優先順位[ i ] = 7 - nランク0to6;\r
4188                                                 this.RESULTSOUND[ i ] = strファイル名;\r
4189                                         }\r
4190                                 }\r
4191                         }\r
4192                 }\r
4193                 private bool t入力・行解析・SIZE( string strコマンド, string strパラメータ, string strコメント )\r
4194                 {\r
4195                         int num2;\r
4196                         if( strコマンド.StartsWith( "SIZE", StringComparison.OrdinalIgnoreCase ) )\r
4197                         {\r
4198                                 strコマンド = strコマンド.Substring( 4 );\r
4199                         }\r
4200                         else\r
4201                         {\r
4202                                 return false;\r
4203                         }\r
4204                         if( strコマンド.Length < 2 )\r
4205                         {\r
4206                                 return false;\r
4207                         }\r
4208                         int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
4209                         if( ( index < 0 ) || ( index >= 36 * 36 ) )\r
4210                         {\r
4211                                 Trace.TraceError( "SIZE番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
4212                                 return false;\r
4213                         }\r
4214                         if( int.TryParse( strパラメータ, out num2 ) )\r
4215                         {\r
4216                                 if( num2 < 0 )\r
4217                                 {\r
4218                                         num2 = 0;\r
4219                                 }\r
4220                                 else if( num2 > 100 )\r
4221                                 {\r
4222                                         num2 = 100;\r
4223                                 }\r
4224                                 if( this.n無限管理SIZE[ index ] == -index )\r
4225                                 {\r
4226                                         foreach( CWAV cwav in this.listWAV.Values )\r
4227                                         {\r
4228                                                 if( cwav.nチップサイズ == -index )\r
4229                                                 {\r
4230                                                         cwav.nチップサイズ = num2;\r
4231                                                 }\r
4232                                         }\r
4233                                 }\r
4234                                 this.n無限管理SIZE[ index ] = num2;\r
4235                         }\r
4236                         return true;\r
4237                 }\r
4238                 private bool t入力・行解析・WAV( string strコマンド, string strパラメータ, string strコメント )\r
4239                 {\r
4240                         if( strコマンド.StartsWith( "WAV", StringComparison.OrdinalIgnoreCase ) )\r
4241                         {\r
4242                                 strコマンド = strコマンド.Substring( 3 );\r
4243                         }\r
4244                         else\r
4245                         {\r
4246                                 return false;\r
4247                         }\r
4248                         if( strコマンド.Length < 2 )\r
4249                         {\r
4250                                 return false;\r
4251                         }\r
4252                         int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
4253                         if( ( index < 0 ) || ( index >= 36 * 36 ) )\r
4254                         {\r
4255                                 Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
4256                                 return false;\r
4257                         }\r
4258                         CWAV cwav = new CWAV();\r
4259                         cwav.n内部番号 = this.n内部番号WAV1to;\r
4260                         cwav.n表記上の番号 = index;\r
4261                         cwav.nチップサイズ = this.n無限管理SIZE[ index ];\r
4262                         cwav.n位置 = this.n無限管理PAN[ index ];\r
4263                         cwav.n音量 = this.n無限管理VOL[ index ];\r
4264                         cwav.strファイル名 = strパラメータ;\r
4265                         cwav.strコメント文 = strコメント;\r
4266                         this.listWAV.Add( this.n内部番号WAV1to, cwav );\r
4267                         if( this.n無限管理WAV[ index ] == -index )\r
4268                         {\r
4269                                 for( int i = 0; i < this.listChip.Count; i++ )\r
4270                                 {\r
4271                                         CChip chip = this.listChip[ i ];\r
4272                                         if( chip.bWAVを使うチャンネルである && ( chip.n整数値・内部番号 == -index ) )\r
4273                                         {\r
4274                                                 chip.n整数値・内部番号 = this.n内部番号WAV1to;\r
4275                                         }\r
4276                                 }\r
4277                         }\r
4278                         this.n無限管理WAV[ index ] = this.n内部番号WAV1to;\r
4279                         this.n内部番号WAV1to++;\r
4280                         return true;\r
4281                 }\r
4282                 private bool t入力・行解析・WAVPAN_PAN( string strコマンド, string strパラメータ, string strコメント )\r
4283                 {\r
4284                         int num2;\r
4285                         if( strコマンド.StartsWith( "WAVPAN", StringComparison.OrdinalIgnoreCase ) )\r
4286                         {\r
4287                                 strコマンド = strコマンド.Substring(6);\r
4288                         }\r
4289                         else if( strコマンド.StartsWith( "PAN", StringComparison.OrdinalIgnoreCase ) )\r
4290                         {\r
4291                                 strコマンド = strコマンド.Substring(3);\r
4292                         }\r
4293                         else\r
4294                         {\r
4295                                 return false;\r
4296                         }\r
4297                         if( strコマンド.Length < 2 )\r
4298                         {\r
4299                                 return false;\r
4300                         }\r
4301                         int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
4302                         if( ( index < 0 ) || ( index >= 36 * 36 ) )\r
4303                         {\r
4304                                 Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
4305                                 return false;\r
4306                         }\r
4307                         if( int.TryParse( strパラメータ, out num2 ) )\r
4308                         {\r
4309                                 if( num2 < -100 )\r
4310                                 {\r
4311                                         num2 = -100;\r
4312                                 }\r
4313                                 else if( num2 >= 100 )\r
4314                                 {\r
4315                                         num2 = 100;\r
4316                                 }\r
4317                                 if( this.n無限管理PAN[ index ] == ( -10000 - index ) )\r
4318                                 {\r
4319                                         foreach( CWAV cwav in this.listWAV.Values )\r
4320                                         {\r
4321                                                 if( cwav.n位置 == ( -10000 - index ) )\r
4322                                                 {\r
4323                                                         cwav.n位置 = num2;\r
4324                                                 }\r
4325                                         }\r
4326                                 }\r
4327                                 this.n無限管理PAN[ index ] = num2;\r
4328                         }\r
4329                         return true;\r
4330                 }\r
4331                 private bool t入力・行解析・WAVVOL_VOLUME( string strコマンド, string strパラメータ, string strコメント )\r
4332                 {\r
4333                         int num2;\r
4334                         if( strコマンド.StartsWith( "WAVVOL", StringComparison.OrdinalIgnoreCase ) )\r
4335                         {\r
4336                                 strコマンド = strコマンド.Substring( 6 );\r
4337                         }\r
4338                         else if( strコマンド.StartsWith( "VOLUME", StringComparison.OrdinalIgnoreCase ) )\r
4339                         {\r
4340                                 strコマンド = strコマンド.Substring( 6 );\r
4341                         }\r
4342                         else\r
4343                         {\r
4344                                 return false;\r
4345                         }\r
4346                         if( strコマンド.Length < 2 )\r
4347                         {\r
4348                                 return false;\r
4349                         }\r
4350                         int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
4351                         if( ( index < 0 ) || ( index >= 36 * 36 ) )\r
4352                         {\r
4353                                 Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
4354                                 return false;\r
4355                         }\r
4356                         if( int.TryParse( strパラメータ, out num2 ) )\r
4357                         {\r
4358                                 if( num2 < 0 )\r
4359                                 {\r
4360                                         num2 = 0;\r
4361                                 }\r
4362                                 else if( num2 >= 100 )\r
4363                                 {\r
4364                                         num2 = 100;\r
4365                                 }\r
4366                                 if( this.n無限管理VOL[ index ] == -index )\r
4367                                 {\r
4368                                         foreach( CWAV cwav in this.listWAV.Values )\r
4369                                         {\r
4370                                                 if( cwav.n音量 == -index )\r
4371                                                 {\r
4372                                                         cwav.n音量 = num2;\r
4373                                                 }\r
4374                                         }\r
4375                                 }\r
4376                                 this.n無限管理VOL[ index ] = num2;\r
4377                         }\r
4378                         return true;\r
4379                 }\r
4380                 private bool t入力・行解析・チップ配置( string strコマンド, string strパラメータ, string strコメント )\r
4381                 {\r
4382                         if( strコマンド.Length != 5 )\r
4383                         {\r
4384                                 return false;\r
4385                         }\r
4386                         int num = C変換.n小節番号の文字列3桁を数値に変換して返す( strコマンド.Substring( 0, 3 ) );\r
4387                         if( num < 0 )\r
4388                         {\r
4389                                 return false;\r
4390                         }\r
4391                         num++;\r
4392                         int c = -1;\r
4393                         if( ( this.e種別 != E種別.GDA ) && ( this.e種別 != E種別.G2D ) )\r
4394                         {\r
4395                                 c = C変換.n16進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 3, 2 ) );\r
4396                                 if( c < 0 )\r
4397                                 {\r
4398                                         return false;\r
4399                                 }\r
4400                         }\r
4401                         else\r
4402                         {\r
4403                                 string str = strコマンド.Substring( 3, 2 );\r
4404                                 foreach( STGDAPARAM stgdaparam in this.stGDAParam )\r
4405                                 {\r
4406                                         if( str.Equals( stgdaparam.s, StringComparison.OrdinalIgnoreCase ) )\r
4407                                         {\r
4408                                                 c = stgdaparam.c;\r
4409                                                 break;\r
4410                                         }\r
4411                                 }\r
4412                                 if( c < 0 )\r
4413                                 {\r
4414                                         return false;\r
4415                                 }\r
4416                         }\r
4417                         if( ( c >= 0x11 ) && ( c <= 0x1a ) )\r
4418                         {\r
4419                                 this.bチップがある.Drums = true;\r
4420                         }\r
4421                         else if( ( c >= 0x20 ) && ( c <= 0x27 ) )\r
4422                         {\r
4423                                 this.bチップがある.Guitar = true;\r
4424                         }\r
4425                         else if( ( c >= 160 ) && ( c <= 0xa7 ) )\r
4426                         {\r
4427                                 this.bチップがある.Bass = true;\r
4428                         }\r
4429                         if( c == 0x18 )\r
4430                         {\r
4431                                 this.bチップがある.HHOpen = true;\r
4432                         }\r
4433                         switch( c )\r
4434                         {\r
4435                                 case 0x19:\r
4436                                         this.bチップがある.Ride = true;\r
4437                                         break;\r
4438 \r
4439                                 case 0x1a:\r
4440                                         this.bチップがある.LeftCymbal = true;\r
4441                                         break;\r
4442 \r
4443                                 case 0x20:\r
4444                                         this.bチップがある.OpenGuitar = true;\r
4445                                         break;\r
4446 \r
4447                                 case 160:\r
4448                                         this.bチップがある.OpenBass = true;\r
4449                                         break;\r
4450 \r
4451                                 case 2:\r
4452                                         {\r
4453                                                 double result = 0.0;\r
4454                                                 if( !double.TryParse( strパラメータ, out result ) )\r
4455                                                 {\r
4456                                                         Trace.TraceError( "小節長倍率に不正な値を指定しました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
4457                                                         return false;\r
4458                                                 }\r
4459                                                 CChip item = new CChip();\r
4460                                                 item.n発声位置 = num * 0x180;\r
4461                                                 item.nチャンネル番号 = c;\r
4462                                                 item.db実数値 = result;\r
4463                                                 this.listChip.Add( item );\r
4464                                                 return true;\r
4465                                         }\r
4466                         }\r
4467                         if( string.IsNullOrEmpty( strパラメータ ) )\r
4468                         {\r
4469                                 return false;\r
4470                         }\r
4471                         int num4 = 0;\r
4472                         StringBuilder builder = new StringBuilder( strパラメータ.Length );\r
4473                         CharEnumerator enumerator = strパラメータ.GetEnumerator();\r
4474                         while( enumerator.MoveNext() )\r
4475                         {\r
4476                                 if( enumerator.Current != '_' )\r
4477                                 {\r
4478                                         if( "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".IndexOf( enumerator.Current ) < 0 )\r
4479                                         {\r
4480                                                 Trace.TraceError( "不正なオブジェクト指定があります。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );\r
4481                                                 return false;\r
4482                                         }\r
4483                                         builder.Append( enumerator.Current );\r
4484                                         num4++;\r
4485                                 }\r
4486                         }\r
4487                         strパラメータ = builder.ToString();\r
4488                         if( ( num4 % 2 ) != 0 )\r
4489                         {\r
4490                                 num4--;\r
4491                         }\r
4492                         for( int i = 0; i < ( num4 / 2 ); i++ )\r
4493                         {\r
4494                                 int index = 0;\r
4495                                 if( c == 3 )\r
4496                                 {\r
4497                                         index = C変換.n16進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
4498                                 }\r
4499                                 else\r
4500                                 {\r
4501                                         index = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
4502                                 }\r
4503                                 if( index != 0 )\r
4504                                 {\r
4505                                         CChip chip2 = new CChip();\r
4506                                         chip2.n発声位置 = ( num * 0x180 ) + ( ( 0x180 * i ) / ( num4 / 2 ) );\r
4507                                         chip2.nチャンネル番号 = c;\r
4508                                         chip2.n整数値 = index;\r
4509                                         chip2.n整数値・内部番号 = index;\r
4510                                         if( ( c >= 0x11 ) && ( c <= 0x1a ) )\r
4511                                         {\r
4512                                                 chip2.e楽器パート = E楽器パート.DRUMS;\r
4513                                         }\r
4514                                         if( ( c >= 0x20 ) && ( c <= 0x27 ) )\r
4515                                         {\r
4516                                                 chip2.e楽器パート = E楽器パート.GUITAR;\r
4517                                         }\r
4518                                         if( ( c >= 160 ) && ( c <= 0xa7 ) )\r
4519                                         {\r
4520                                                 chip2.e楽器パート = E楽器パート.BASS;\r
4521                                         }\r
4522                                         if( chip2.bWAVを使うチャンネルである )\r
4523                                         {\r
4524                                                 chip2.n整数値・内部番号 = this.n無限管理WAV[ index ];\r
4525                                         }\r
4526                                         else if( chip2.bBPMチップである )\r
4527                                         {\r
4528                                                 chip2.n整数値・内部番号 = this.n無限管理BPM[ index ];\r
4529                                         }\r
4530                                         if( c == 0x53 )\r
4531                                         {\r
4532                                                 if( ( index > 0 ) && ( index != 2 ) )\r
4533                                                 {\r
4534                                                         chip2.n発声位置 -= 0x20;\r
4535                                                 }\r
4536                                                 else if( index == 2 )\r
4537                                                 {\r
4538                                                         chip2.n発声位置 += 0x20;\r
4539                                                 }\r
4540                                         }\r
4541                                         this.listChip.Add( chip2 );\r
4542                                 }\r
4543                         }\r
4544                         return true;\r
4545                 }\r
4546                 //-----------------\r
4547                 #endregion\r
4548         }\r
4549 }\r