OSDN Git Service

#36043 CDTXMania 内の app 以外の static メンバをインスタンスメンバにし、appを介してアクセスするように変更。CChipのメンバの多くをpr...
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / スコア、曲 / CDTXNestedTypes.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Linq;\r
4 using System.Text;\r
5 using System.Threading.Tasks;\r
6 using System.Drawing;\r
7 using System.Diagnostics;\r
8 using FDK;\r
9 using System.IO;\r
10 \r
11 namespace DTXMania\r
12 {\r
13         public partial class CDTX\r
14         {\r
15                 // クラス\r
16 \r
17                 public class CAVI : IDisposable\r
18                 {\r
19                         public CAviDS avi;\r
20                         private bool bDispose済み;\r
21 \r
22                         int n番号;\r
23                         string strコメント文 = "";\r
24                         string strファイル名 = "";\r
25                         double dbPlaySpeed = 1;\r
26 \r
27                         public CAVI(int number, string filename, string comment, double playSpeed)\r
28                         {\r
29                                 n番号 = number;\r
30                                 strファイル名 = filename;\r
31                                 strコメント文 = comment;\r
32                                 dbPlaySpeed = playSpeed;\r
33                         }\r
34 \r
35                         public void OnDeviceCreated()\r
36                         {\r
37                                 #region [ strAVIファイル名の作成。]\r
38                                 //-----------------\r
39                                 string strAVIファイル名;\r
40 \r
41                                 if (CDTXMania.app.DTX != null && !Path.IsPathRooted(this.strファイル名))   // CDTX抜きでCAVI単体で使うことを考慮(選曲画面, リザルト画面)\r
42                                 {                                                                                                                                                       // 演奏終了直後はCDTXオブジェクトが残っているので、ファイル名がフルパスかどうかでプレビュー判定する\r
43                                         if (!string.IsNullOrEmpty(CDTXMania.app.DTX.PATH_WAV))\r
44                                                 strAVIファイル名 = CDTXMania.app.DTX.PATH_WAV + this.strファイル名;\r
45                                         else\r
46                                                 strAVIファイル名 = CDTXMania.app.DTX.strフォルダ名 + this.strファイル名;\r
47                                 }\r
48                                 else\r
49                                 {\r
50                                         strAVIファイル名 = this.strファイル名;\r
51                                 }\r
52                                 //-----------------\r
53                                 #endregion\r
54 \r
55                                 if (!File.Exists(strAVIファイル名))\r
56                                 {\r
57                                         Trace.TraceWarning("CAVI: ファイルが存在しません。({0})({1})", this.strコメント文, Path.GetFileName(strAVIファイル名));\r
58                                         this.avi = null;\r
59                                         return;\r
60                                 }\r
61 \r
62                                 // AVI の生成。\r
63 \r
64                                 try\r
65                                 {\r
66                                         this.avi = new CAviDS(strAVIファイル名, this.dbPlaySpeed);\r
67                                         Trace.TraceInformation("CAviDS: 動画を生成しました。({0})({1})({2}msec)", this.strコメント文, Path.GetFileName(strAVIファイル名), this.avi.GetDuration());\r
68                                 }\r
69                                 catch (Exception e)\r
70                                 {\r
71                                         Trace.TraceError(e.Message);\r
72                                         Trace.TraceError("CAviDS: 動画の生成に失敗しました。({0})({1})", this.strコメント文, Path.GetFileName(strAVIファイル名));\r
73                                         this.avi = null;\r
74                                 }\r
75                         }\r
76                         public override string ToString()\r
77                         {\r
78                                 return string.Format("CAVI{0}: File:{1}, Comment:{2}", CDTX.tZZ(this.n番号), this.strファイル名, this.strコメント文);\r
79                         }\r
80 \r
81                         #region [ IDisposable 実装 ]\r
82                         //-----------------\r
83                         public void Dispose()\r
84                         {\r
85                                 if (this.bDispose済み)\r
86                                         return;\r
87 \r
88                                 if (this.avi != null)\r
89                                 {\r
90                                         #region [ strAVIファイル名 の作成。なぜDispose時にファイル名の生成をしているのかと思ったら、デバッグログ用でした。 ]\r
91                                         //-----------------\r
92                                         string strAVIファイル名;\r
93                                         if (CDTXMania.app.DTX != null && !Path.IsPathRooted(this.strファイル名))   // CDTX抜きでCAVI単体で使うことを考慮(選曲画面, リザルト画面)\r
94                                         {                                                                                                                                                       // 演奏終了直後はCDTXオブジェクトが残っているので、ファイル名がフルパスかどうかでプレビュー判定する\r
95                                                 if (!string.IsNullOrEmpty(CDTXMania.app.DTX.PATH_WAV))\r
96                                                         strAVIファイル名 = CDTXMania.app.DTX.PATH_WAV + this.strファイル名;\r
97                                                 else\r
98                                                         strAVIファイル名 = CDTXMania.app.DTX.strフォルダ名 + this.strファイル名;\r
99                                         }\r
100                                         else\r
101                                         {\r
102                                                 strAVIファイル名 = this.strファイル名;\r
103                                         }\r
104                                         //-----------------\r
105                                         #endregion\r
106 \r
107                                         this.avi.Dispose();\r
108                                         this.avi = null;\r
109 \r
110                                         Trace.TraceInformation("動画を解放しました。({0})({1})", this.strコメント文, Path.GetFileName(strAVIファイル名));\r
111                                 }\r
112                                 this.bDispose済み = true;\r
113                         }\r
114                         //-----------------\r
115                         #endregion\r
116                 }\r
117                 public class CAVIPAN\r
118                 {\r
119                         public int nAVI番号;\r
120                         public int n移動時間ct;\r
121                         public int n番号;\r
122                         public Point pt動画側開始位置 = new Point(0, 0);\r
123                         public Point pt動画側終了位置 = new Point(0, 0);\r
124                         public Point pt表示側開始位置 = new Point(0, 0);\r
125                         public Point pt表示側終了位置 = new Point(0, 0);\r
126                         public Size sz開始サイズ = new Size(0, 0);\r
127                         public Size sz終了サイズ = new Size(0, 0);\r
128 \r
129                         public override string ToString()\r
130                         {\r
131                                 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",\r
132                                   CDTX.tZZ(this.n番号),\r
133                                   this.sz開始サイズ.Width, this.sz開始サイズ.Height,\r
134                                   this.sz終了サイズ.Width, this.sz終了サイズ.Height,\r
135                                   this.pt動画側開始位置.X, this.pt動画側開始位置.Y,\r
136                                   this.pt動画側終了位置.X, this.pt動画側終了位置.Y,\r
137                                   this.pt表示側開始位置.X, this.pt表示側開始位置.Y,\r
138                                   this.pt表示側終了位置.X, this.pt表示側終了位置.Y,\r
139                                   this.n移動時間ct,\r
140                                   CDTX.tZZ(this.nAVI番号));\r
141                         }\r
142                 }\r
143                 public class CBGA\r
144                 {\r
145                         public int nBMP番号;\r
146                         public int n番号;\r
147                         public Point pt画像側右下座標 = new Point(0, 0);\r
148                         public Point pt画像側左上座標 = new Point(0, 0);\r
149                         public Point pt表示座標 = new Point(0, 0);\r
150 \r
151                         public override string ToString()\r
152                         {\r
153                                 return string.Format("CBGA{0}, BMP:{1}, 画像側左上座標:{2}x{3}, 画像側右下座標:{4}x{5}, 表示座標:{6}x{7}",\r
154                                   CDTX.tZZ(this.n番号),\r
155                                   CDTX.tZZ(this.nBMP番号),\r
156                                   this.pt画像側左上座標.X, this.pt画像側左上座標.Y,\r
157                                   this.pt画像側右下座標.X, this.pt画像側右下座標.Y,\r
158                                   this.pt表示座標.X, this.pt表示座標.Y);\r
159                         }\r
160                 }\r
161                 public class CBGAPAN\r
162                 {\r
163                         public int nBMP番号;\r
164                         public int n移動時間ct;\r
165                         public int n番号;\r
166                         public Point pt画像側開始位置 = new Point(0, 0);\r
167                         public Point pt画像側終了位置 = new Point(0, 0);\r
168                         public Point pt表示側開始位置 = new Point(0, 0);\r
169                         public Point pt表示側終了位置 = new Point(0, 0);\r
170                         public Size sz開始サイズ = new Size(0, 0);\r
171                         public Size sz終了サイズ = new Size(0, 0);\r
172 \r
173                         public override string ToString()\r
174                         {\r
175                                 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",\r
176                                   CDTX.tZZ(this.nBMP番号),\r
177                                   this.sz開始サイズ.Width, this.sz開始サイズ.Height,\r
178                                   this.sz終了サイズ.Width, this.sz終了サイズ.Height,\r
179                                   this.pt画像側開始位置.X, this.pt画像側開始位置.Y,\r
180                                   this.pt画像側終了位置.X, this.pt画像側終了位置.Y,\r
181                                   this.pt表示側開始位置.X, this.pt表示側開始位置.Y,\r
182                                   this.pt表示側終了位置.X, this.pt表示側終了位置.Y,\r
183                                   this.n移動時間ct,\r
184                                   CDTX.tZZ(this.nBMP番号));\r
185                         }\r
186                 }\r
187                 public class CBMP : CBMPbase, IDisposable\r
188                 {\r
189                         public CBMP()\r
190                         {\r
191                                 b黒を透過する = true;     // BMPでは、黒を透過色とする\r
192                         }\r
193                         public override void PutLog(string strテクスチャファイル名)\r
194                         {\r
195                                 Trace.TraceInformation("テクスチャを生成しました。({0})({1})({2}x{3})", this.strコメント文, strテクスチャファイル名, this.n幅, this.n高さ);\r
196                         }\r
197                         public override string ToString()\r
198                         {\r
199                                 return string.Format("CBMP{0}: File:{1}, Comment:{2}", CDTX.tZZ(this.n番号), this.strファイル名, this.strコメント文);\r
200                         }\r
201 \r
202                 }\r
203                 public class CBMPTEX : CBMPbase, IDisposable\r
204                 {\r
205                         public CBMPTEX()\r
206                         {\r
207                                 b黒を透過する = false;    // BMPTEXでは、透過色はαで表現する\r
208                         }\r
209                         public override void PutLog(string strテクスチャファイル名)\r
210                         {\r
211                                 Trace.TraceInformation("テクスチャを生成しました。({0})({1})(Gr:{2}x{3})(Tx:{4}x{5})", this.strコメント文, strテクスチャファイル名, this.tx画像.sz画像サイズ.Width, this.tx画像.sz画像サイズ.Height, this.tx画像.szテクスチャサイズ.Width, this.tx画像.szテクスチャサイズ.Height);\r
212                         }\r
213                         public override string ToString()\r
214                         {\r
215                                 return string.Format("CBMPTEX{0}: File:{1}, Comment:{2}", CDTX.tZZ(this.n番号), this.strファイル名, this.strコメント文);\r
216                         }\r
217                 }\r
218                 public class CBMPbase : IDisposable\r
219                 {\r
220                         public bool bUse;\r
221                         public int n番号;\r
222                         public string strコメント文 = "";\r
223                         public string strファイル名 = "";\r
224                         public CTexture tx画像;\r
225                         public int n高さ\r
226                         {\r
227                                 get\r
228                                 {\r
229                                         return this.tx画像.sz画像サイズ.Height;\r
230                                 }\r
231                         }\r
232                         public int n幅\r
233                         {\r
234                                 get\r
235                                 {\r
236                                         return this.tx画像.sz画像サイズ.Width;\r
237                                 }\r
238                         }\r
239                         public bool b黒を透過する;\r
240                         public Bitmap bitmap;\r
241 \r
242                         public string GetFullPathname\r
243                         {\r
244                                 get\r
245                                 {\r
246                                         if (!string.IsNullOrEmpty(CDTXMania.app.DTX.PATH_WAV))\r
247                                                 return CDTXMania.app.DTX.PATH_WAV + this.strファイル名;\r
248                                         else\r
249                                                 return CDTXMania.app.DTX.strフォルダ名 + this.strファイル名;\r
250                                 }\r
251                         }\r
252 \r
253                         public void OnDeviceCreated()\r
254                         {\r
255                                 #region [ strテクスチャファイル名 を作成。]\r
256                                 string strテクスチャファイル名 = this.GetFullPathname;\r
257                                 #endregion\r
258 \r
259                                 if (!File.Exists(strテクスチャファイル名))\r
260                                 {\r
261                                         Trace.TraceWarning("ファイルが存在しません。({0})({1})", this.strコメント文, strテクスチャファイル名);\r
262                                         this.tx画像 = null;\r
263                                         return;\r
264                                 }\r
265 \r
266                                 // テクスチャを作成。\r
267                                 byte[] txData = File.ReadAllBytes(strテクスチャファイル名);\r
268                                 this.tx画像 = TextureFactory.tテクスチャの生成(txData, b黒を透過する);\r
269 \r
270                                 if (this.tx画像 != null)\r
271                                 {\r
272                                         // 作成成功。\r
273                                         if (CDTXMania.app.ConfigIni.bLog作成解放ログ出力)\r
274                                                 PutLog(strテクスチャファイル名);\r
275                                         txData = null;\r
276                                         this.bUse = true;\r
277                                 }\r
278                                 else\r
279                                 {\r
280                                         // 作成失敗。\r
281                                         Trace.TraceError("テクスチャの生成に失敗しました。({0})({1})", this.strコメント文, strテクスチャファイル名);\r
282                                         this.tx画像 = null;\r
283                                 }\r
284                         }\r
285                         /// <summary>\r
286                         /// BGA画像のデコードをTexture()に渡す前に行う、OnDeviceCreate()\r
287                         /// </summary>\r
288                         /// <param name="bitmap">テクスチャ画像</param>\r
289                         /// <param name="strテクスチャファイル名">ファイル名</param>\r
290                         public void OnDeviceCreated(Bitmap bitmap, string strテクスチャファイル名)\r
291                         {\r
292                                 if (bitmap != null && b黒を透過する)\r
293                                 {\r
294                                         bitmap.MakeTransparent(Color.Black);            // 黒を透過色にする\r
295                                 }\r
296                                 this.tx画像 = TextureFactory.tテクスチャの生成(bitmap, b黒を透過する);\r
297 \r
298                                 if (this.tx画像 != null)\r
299                                 {\r
300                                         // 作成成功。\r
301                                         if (CDTXMania.app.ConfigIni.bLog作成解放ログ出力)\r
302                                                 PutLog(strテクスチャファイル名);\r
303                                         this.bUse = true;\r
304                                 }\r
305                                 else\r
306                                 {\r
307                                         // 作成失敗。\r
308                                         Trace.TraceError("テクスチャの生成に失敗しました。({0})({1})", this.strコメント文, strテクスチャファイル名);\r
309                                         this.tx画像 = null;\r
310                                 }\r
311                                 if (bitmap != null)\r
312                                 {\r
313                                         bitmap.Dispose();\r
314                                 }\r
315                         }\r
316 \r
317                         public virtual void PutLog(string strテクスチャファイル名)\r
318                         {\r
319                         }\r
320 \r
321                         #region [ IDisposable 実装 ]\r
322                         //-----------------\r
323                         public void Dispose()\r
324                         {\r
325                                 if (this.bDisposed済み)\r
326                                         return;\r
327 \r
328                                 if (this.tx画像 != null)\r
329                                 {\r
330                                         #region [ strテクスチャファイル名 を作成。]\r
331                                         //-----------------\r
332                                         string strテクスチャファイル名 = this.GetFullPathname;\r
333                                         //if( !string.IsNullOrEmpty( CDTXMania.app.DTX.PATH_WAV ) )\r
334                                         //    strテクスチャファイル名 = CDTXMania.app.DTX.PATH_WAV + this.strファイル名;\r
335                                         //else\r
336                                         //    strテクスチャファイル名 = CDTXMania.app.DTX.strフォルダ名 + this.strファイル名;\r
337                                         //-----------------\r
338                                         #endregion\r
339 \r
340                                         TextureFactory.tテクスチャの解放(ref this.tx画像);\r
341 \r
342                                         if (CDTXMania.app.ConfigIni.bLog作成解放ログ出力)\r
343                                                 Trace.TraceInformation("テクスチャを解放しました。({0})({1})", this.strコメント文, strテクスチャファイル名);\r
344                                 }\r
345                                 this.bUse = false;\r
346 \r
347                                 this.bDisposed済み = true;\r
348                         }\r
349                         #endregion\r
350                         #region [ private ]\r
351                         //-----------------\r
352                         private bool bDisposed済み;\r
353                         //-----------------\r
354                         #endregion\r
355                 }\r
356                 public class CBPM\r
357                 {\r
358                         public double dbBPM値;\r
359                         public int n内部番号;\r
360                         public int n表記上の番号;\r
361 \r
362                         public override string ToString()\r
363                         {\r
364                                 StringBuilder builder = new StringBuilder(0x80);\r
365                                 if (this.n内部番号 != this.n表記上の番号)\r
366                                 {\r
367                                         builder.Append(string.Format("CBPM{0}(内部{1})", CDTX.tZZ(this.n表記上の番号), this.n内部番号));\r
368                                 }\r
369                                 else\r
370                                 {\r
371                                         builder.Append(string.Format("CBPM{0}", CDTX.tZZ(this.n表記上の番号)));\r
372                                 }\r
373                                 builder.Append(string.Format(", BPM:{0}", this.dbBPM値));\r
374                                 return builder.ToString();\r
375                         }\r
376                 }\r
377                 public class CWAV : IDisposable\r
378                 {\r
379                         public bool bBGMとして使う;\r
380                         public List<Ech定義> listこのWAVを使用するチャンネル番号の集合 = new List<Ech定義>(16);\r
381                         public int nチップサイズ = 100;\r
382                         public int n位置;\r
383                         public long[] n一時停止時刻 = new long[CDTXMania.app.ConfigIni.nPoliphonicSounds];        // 4\r
384                         public int n音量 = 100;\r
385                         public int n現在再生中のサウンド番号;\r
386                         public long[] n再生開始時刻 = new long[CDTXMania.app.ConfigIni.nPoliphonicSounds];        // 4\r
387                         public int n内部番号;\r
388                         public int n表記上の番号;\r
389                         public CSound[] rSound = new CSound[CDTXMania.app.ConfigIni.nPoliphonicSounds];         // 4\r
390                         public string strコメント文 = "";\r
391                         public string strファイル名 = "";\r
392                         public bool bBGMとして使わない\r
393                         {\r
394                                 get\r
395                                 {\r
396                                         return !this.bBGMとして使う;\r
397                                 }\r
398                                 set\r
399                                 {\r
400                                         this.bBGMとして使う = !value;\r
401                                 }\r
402                         }\r
403                         public bool bIsBassSound = false;\r
404                         public bool bIsGuitarSound = false;\r
405                         public bool bIsDrumsSound = false;\r
406                         public bool bIsSESound = false;\r
407                         public bool bIsBGMSound = false;\r
408 \r
409                         public override string ToString()\r
410                         {\r
411                                 var sb = new StringBuilder(128);\r
412 \r
413                                 if (this.n表記上の番号 == this.n内部番号)\r
414                                 {\r
415                                         sb.Append(string.Format("CWAV{0}: ", CDTX.tZZ(this.n表記上の番号)));\r
416                                 }\r
417                                 else\r
418                                 {\r
419                                         sb.Append(string.Format("CWAV{0}(内部{1}): ", CDTX.tZZ(this.n表記上の番号), this.n内部番号));\r
420                                 }\r
421                                 sb.Append(string.Format("音量:{0}, 位置:{1}, サイズ:{2}, BGM:{3}, File:{4}, Comment:{5}", this.n音量, this.n位置, this.nチップサイズ, this.bBGMとして使う ? 'Y' : 'N', this.strファイル名, this.strコメント文));\r
422 \r
423                                 return sb.ToString();\r
424                         }\r
425 \r
426                         #region [ Dispose-Finalize パターン実装 ]\r
427                         //-----------------\r
428                         public void Dispose()\r
429                         {\r
430                                 this.Dispose(true);\r
431                                 GC.SuppressFinalize(this);\r
432                         }\r
433                         public void Dispose(bool bManagedリソースの解放も行う)\r
434                         {\r
435                                 if (this.bDisposed済み)\r
436                                         return;\r
437 \r
438                                 if (bManagedリソースの解放も行う)\r
439                                 {\r
440                                         for (int i = 0; i < CDTXMania.app.ConfigIni.nPoliphonicSounds; i++)     // 4\r
441                                         {\r
442                                                 if (this.rSound[i] != null)\r
443                                                         CDTXMania.app.Sound管理.tサウンドを破棄する(this.rSound[i]);\r
444                                                 this.rSound[i] = null;\r
445 \r
446                                                 if ((i == 0) && CDTXMania.app.ConfigIni.bLog作成解放ログ出力)\r
447                                                         Trace.TraceInformation("サウンドを解放しました。({0})({1})", this.strコメント文, this.strファイル名);\r
448                                         }\r
449                                 }\r
450 \r
451                                 this.bDisposed済み = true;\r
452                         }\r
453                         ~CWAV()\r
454                         {\r
455                                 this.Dispose(false);\r
456                         }\r
457                         //-----------------\r
458                         #endregion\r
459 \r
460                         #region [ private ]\r
461                         //-----------------\r
462                         private bool bDisposed済み;\r
463                         //-----------------\r
464                         #endregion\r
465                 }\r
466 \r
467 \r
468                 // 構造体\r
469                 public struct STLANEINT\r
470                 {\r
471                         public int HH;\r
472                         public int SD;\r
473                         public int BD;\r
474                         public int HT;\r
475                         public int LT;\r
476                         public int CY;\r
477                         public int FT;\r
478                         public int HHO;\r
479                         public int RD;\r
480                         public int LC;\r
481 \r
482                         public int LP;\r
483                         public int LBD;\r
484 \r
485                         public int Drums\r
486                         {\r
487                                 get\r
488                                 {\r
489                                         return this.HH + this.SD + this.BD + this.HT + this.LT + this.CY + this.FT + this.HHO + this.RD + this.LC + this.LP + this.LBD;\r
490                                 }\r
491                         }\r
492                         public int Guitar;\r
493                         public int Bass;\r
494 \r
495                         public int this[int index]\r
496                         {\r
497                                 get\r
498                                 {\r
499                                         switch (index)\r
500                                         {\r
501                                                 case 0:\r
502                                                         return this.HH;\r
503 \r
504                                                 case 1:\r
505                                                         return this.SD;\r
506 \r
507                                                 case 2:\r
508                                                         return this.BD;\r
509 \r
510                                                 case 3:\r
511                                                         return this.HT;\r
512 \r
513                                                 case 4:\r
514                                                         return this.LT;\r
515 \r
516                                                 case 5:\r
517                                                         return this.CY;\r
518 \r
519                                                 case 6:\r
520                                                         return this.FT;\r
521 \r
522                                                 case 7:\r
523                                                         return this.HHO;\r
524 \r
525                                                 case 8:\r
526                                                         return this.RD;\r
527 \r
528                                                 case 9:\r
529                                                         return this.LC;\r
530 \r
531                                                 case 10:\r
532                                                         return this.Guitar;\r
533 \r
534                                                 case 11:\r
535                                                         return this.Bass;\r
536 \r
537                                                 case 12:\r
538                                                         return this.LP;\r
539 \r
540                                                 case 13:\r
541                                                         return this.LBD;\r
542                                         }\r
543                                         throw new IndexOutOfRangeException();\r
544                                 }\r
545                                 set\r
546                                 {\r
547                                         if (value < 0)\r
548                                         {\r
549                                                 throw new ArgumentOutOfRangeException();\r
550                                         }\r
551                                         switch (index)\r
552                                         {\r
553                                                 case 0:\r
554                                                         this.HH = value;\r
555                                                         return;\r
556 \r
557                                                 case 1:\r
558                                                         this.SD = value;\r
559                                                         return;\r
560 \r
561                                                 case 2:\r
562                                                         this.BD = value;\r
563                                                         return;\r
564 \r
565                                                 case 3:\r
566                                                         this.HT = value;\r
567                                                         return;\r
568 \r
569                                                 case 4:\r
570                                                         this.LT = value;\r
571                                                         return;\r
572 \r
573                                                 case 5:\r
574                                                         this.CY = value;\r
575                                                         return;\r
576 \r
577                                                 case 6:\r
578                                                         this.FT = value;\r
579                                                         return;\r
580 \r
581                                                 case 7:\r
582                                                         this.HHO = value;\r
583                                                         return;\r
584 \r
585                                                 case 8:\r
586                                                         this.RD = value;\r
587                                                         return;\r
588 \r
589                                                 case 9:\r
590                                                         this.LC = value;\r
591                                                         return;\r
592 \r
593                                                 case 10:\r
594                                                         this.Guitar = value;\r
595                                                         return;\r
596 \r
597                                                 case 11:\r
598                                                         this.Bass = value;\r
599                                                         return;\r
600 \r
601                                                 case 12:\r
602                                                         this.LP = value;\r
603                                                         return;\r
604 \r
605                                                 case 13:\r
606                                                         this.LBD = value;\r
607                                                         return;\r
608                                         }\r
609                                         throw new IndexOutOfRangeException();\r
610                                 }\r
611                         }\r
612                 }\r
613                 public struct STRESULT\r
614                 {\r
615                         public string SS;\r
616                         public string S;\r
617                         public string A;\r
618                         public string B;\r
619                         public string C;\r
620                         public string D;\r
621                         public string E;\r
622 \r
623                         public string this[int index]\r
624                         {\r
625                                 get\r
626                                 {\r
627                                         switch (index)\r
628                                         {\r
629                                                 case 0:\r
630                                                         return this.SS;\r
631 \r
632                                                 case 1:\r
633                                                         return this.S;\r
634 \r
635                                                 case 2:\r
636                                                         return this.A;\r
637 \r
638                                                 case 3:\r
639                                                         return this.B;\r
640 \r
641                                                 case 4:\r
642                                                         return this.C;\r
643 \r
644                                                 case 5:\r
645                                                         return this.D;\r
646 \r
647                                                 case 6:\r
648                                                         return this.E;\r
649                                         }\r
650                                         throw new IndexOutOfRangeException();\r
651                                 }\r
652                                 set\r
653                                 {\r
654                                         switch (index)\r
655                                         {\r
656                                                 case 0:\r
657                                                         this.SS = value;\r
658                                                         return;\r
659 \r
660                                                 case 1:\r
661                                                         this.S = value;\r
662                                                         return;\r
663 \r
664                                                 case 2:\r
665                                                         this.A = value;\r
666                                                         return;\r
667 \r
668                                                 case 3:\r
669                                                         this.B = value;\r
670                                                         return;\r
671 \r
672                                                 case 4:\r
673                                                         this.C = value;\r
674                                                         return;\r
675 \r
676                                                 case 5:\r
677                                                         this.D = value;\r
678                                                         return;\r
679 \r
680                                                 case 6:\r
681                                                         this.E = value;\r
682                                                         return;\r
683                                         }\r
684                                         throw new IndexOutOfRangeException();\r
685                                 }\r
686                         }\r
687                 }\r
688                 public struct STチップがある\r
689                 {\r
690                         public bool Drums;\r
691                         public bool Guitar;\r
692                         public bool Bass;\r
693 \r
694                         public bool HHOpen;\r
695                         public bool Ride;\r
696                         public bool LeftCymbal;\r
697                         public bool OpenGuitar;\r
698                         public bool OpenBass;\r
699 \r
700                         public bool BGA;\r
701                         public bool Movie;\r
702 \r
703                         public bool LeftPedal;\r
704                         public bool LeftBassDrum;\r
705 \r
706                         public bool this[int index]\r
707                         {\r
708                                 get\r
709                                 {\r
710                                         switch (index)\r
711                                         {\r
712                                                 case 0:\r
713                                                         return this.Drums;\r
714 \r
715                                                 case 1:\r
716                                                         return this.Guitar;\r
717 \r
718                                                 case 2:\r
719                                                         return this.Bass;\r
720 \r
721                                                 case 3:\r
722                                                         return this.HHOpen;\r
723 \r
724                                                 case 4:\r
725                                                         return this.Ride;\r
726 \r
727                                                 case 5:\r
728                                                         return this.LeftCymbal;\r
729 \r
730                                                 case 6:\r
731                                                         return this.OpenGuitar;\r
732 \r
733                                                 case 7:\r
734                                                         return this.OpenBass;\r
735 \r
736                                                 case 8:\r
737                                                         return this.LeftPedal;\r
738 \r
739                                                 case 9:\r
740                                                         return this.LeftBassDrum;\r
741                                         }\r
742                                         throw new IndexOutOfRangeException();\r
743                                 }\r
744                                 set\r
745                                 {\r
746                                         switch (index)\r
747                                         {\r
748                                                 case 0:\r
749                                                         this.Drums = value;\r
750                                                         return;\r
751 \r
752                                                 case 1:\r
753                                                         this.Guitar = value;\r
754                                                         return;\r
755 \r
756                                                 case 2:\r
757                                                         this.Bass = value;\r
758                                                         return;\r
759 \r
760                                                 case 3:\r
761                                                         this.HHOpen = value;\r
762                                                         return;\r
763 \r
764                                                 case 4:\r
765                                                         this.Ride = value;\r
766                                                         return;\r
767 \r
768                                                 case 5:\r
769                                                         this.LeftCymbal = value;\r
770                                                         return;\r
771 \r
772                                                 case 6:\r
773                                                         this.OpenGuitar = value;\r
774                                                         return;\r
775 \r
776                                                 case 7:\r
777                                                         this.OpenBass = value;\r
778                                                         return;\r
779 \r
780                                                 case 8:\r
781                                                         this.LeftPedal = value;\r
782                                                         return;\r
783 \r
784                                                 case 9:\r
785                                                         this.LeftBassDrum = value;\r
786                                                         return;\r
787                                         }\r
788                                         throw new IndexOutOfRangeException();\r
789                                 }\r
790                         }\r
791                 }\r
792 \r
793         }\r
794 }\r