2 using System.Collections.Generic;
\r
5 using System.Threading.Tasks;
\r
6 using System.Drawing;
\r
7 using System.Diagnostics;
\r
13 public partial class CDTX
\r
17 public class CAVI : IDisposable
\r
20 private bool bDispose済み;
\r
23 string strコメント文 = "";
\r
24 string strファイル名 = "";
\r
25 double dbPlaySpeed = 1;
\r
27 public CAVI(int number, string filename, string comment, double playSpeed)
\r
30 strファイル名 = filename;
\r
32 dbPlaySpeed = playSpeed;
\r
35 public void OnDeviceCreated()
\r
37 #region [ strAVIファイル名の作成。]
\r
41 if (CDTXMania.Instance.DTX != null && !Path.IsPathRooted(this.strファイル名)) // CDTX抜きでCAVI単体で使うことを考慮(選曲画面, リザルト画面)
\r
42 { // 演奏終了直後はCDTXオブジェクトが残っているので、ファイル名がフルパスかどうかでプレビュー判定する
\r
43 if (!string.IsNullOrEmpty(CDTXMania.Instance.DTX.PATH_WAV))
\r
44 strAVIファイル名 = CDTXMania.Instance.DTX.PATH_WAV + this.strファイル名;
\r
46 strAVIファイル名 = CDTXMania.Instance.DTX.strフォルダ名 + this.strファイル名;
\r
50 strAVIファイル名 = this.strファイル名;
\r
55 if (!File.Exists(strAVIファイル名))
\r
57 Trace.TraceWarning("CAVI: ファイルが存在しません。({0})({1})", this.strコメント文, Path.GetFileName(strAVIファイル名));
\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
71 Trace.TraceError(e.Message);
\r
72 Trace.TraceError("CAviDS: 動画の生成に失敗しました。({0})({1})", this.strコメント文, Path.GetFileName(strAVIファイル名));
\r
76 public override string ToString()
\r
78 return string.Format("CAVI{0}: File:{1}, Comment:{2}", CDTX.tZZ(this.n番号), this.strファイル名, this.strコメント文);
\r
81 #region [ IDisposable 実装 ]
\r
83 public void Dispose()
\r
85 if (this.bDispose済み)
\r
88 if (this.avi != null)
\r
90 #region [ strAVIファイル名 の作成。なぜDispose時にファイル名の生成をしているのかと思ったら、デバッグログ用でした。 ]
\r
93 if (CDTXMania.Instance.DTX != null && !Path.IsPathRooted(this.strファイル名)) // CDTX抜きでCAVI単体で使うことを考慮(選曲画面, リザルト画面)
\r
94 { // 演奏終了直後はCDTXオブジェクトが残っているので、ファイル名がフルパスかどうかでプレビュー判定する
\r
95 if (!string.IsNullOrEmpty(CDTXMania.Instance.DTX.PATH_WAV))
\r
96 strAVIファイル名 = CDTXMania.Instance.DTX.PATH_WAV + this.strファイル名;
\r
98 strAVIファイル名 = CDTXMania.Instance.DTX.strフォルダ名 + this.strファイル名;
\r
102 strAVIファイル名 = this.strファイル名;
\r
104 //-----------------
\r
107 this.avi.Dispose();
\r
110 Trace.TraceInformation("動画を解放しました。({0})({1})", this.strコメント文, Path.GetFileName(strAVIファイル名));
\r
112 this.bDispose済み = true;
\r
114 //-----------------
\r
117 public class CAVIPAN
\r
120 public int n移動時間ct;
\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
129 public override string ToString()
\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
140 CDTX.tZZ(this.nAVI番号));
\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
151 public override string ToString()
\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
161 public class CBGAPAN
\r
164 public int n移動時間ct;
\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
173 public override string ToString()
\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
184 CDTX.tZZ(this.nBMP番号));
\r
187 public class CBMP : CBMPbase, IDisposable
\r
191 b黒を透過する = true; // BMPでは、黒を透過色とする
\r
193 public override void PutLog(string strテクスチャファイル名)
\r
195 Trace.TraceInformation("テクスチャを生成しました。({0})({1})({2}x{3})", this.strコメント文, strテクスチャファイル名, this.n幅, this.n高さ);
\r
197 public override string ToString()
\r
199 return string.Format("CBMP{0}: File:{1}, Comment:{2}", CDTX.tZZ(this.n番号), this.strファイル名, this.strコメント文);
\r
203 public class CBMPTEX : CBMPbase, IDisposable
\r
207 b黒を透過する = false; // BMPTEXでは、透過色はαで表現する
\r
209 public override void PutLog(string strテクスチャファイル名)
\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
213 public override string ToString()
\r
215 return string.Format("CBMPTEX{0}: File:{1}, Comment:{2}", CDTX.tZZ(this.n番号), this.strファイル名, this.strコメント文);
\r
218 public class CBMPbase : IDisposable
\r
222 public string strコメント文 = "";
\r
223 public string strファイル名 = "";
\r
224 public CTexture tx画像;
\r
229 return this.tx画像.sz画像サイズ.Height;
\r
236 return this.tx画像.sz画像サイズ.Width;
\r
239 public bool b黒を透過する;
\r
240 public Bitmap bitmap;
\r
242 public string GetFullPathname
\r
246 if (!string.IsNullOrEmpty(CDTXMania.Instance.DTX.PATH_WAV))
\r
247 return CDTXMania.Instance.DTX.PATH_WAV + this.strファイル名;
\r
249 return CDTXMania.Instance.DTX.strフォルダ名 + this.strファイル名;
\r
253 public void OnDeviceCreated()
\r
255 #region [ strテクスチャファイル名 を作成。]
\r
256 string strテクスチャファイル名 = this.GetFullPathname;
\r
259 if (!File.Exists(strテクスチャファイル名))
\r
261 Trace.TraceWarning("ファイルが存在しません。({0})({1})", this.strコメント文, strテクスチャファイル名);
\r
267 byte[] txData = File.ReadAllBytes(strテクスチャファイル名);
\r
268 this.tx画像 = TextureFactory.tテクスチャの生成(txData, b黒を透過する);
\r
270 if (this.tx画像 != null)
\r
273 if (CDTXMania.Instance.ConfigIni.bLogCreateRelease)
\r
274 PutLog(strテクスチャファイル名);
\r
281 Trace.TraceError("テクスチャの生成に失敗しました。({0})({1})", this.strコメント文, strテクスチャファイル名);
\r
286 /// BGA画像のデコードをTexture()に渡す前に行う、OnDeviceCreate()
\r
288 /// <param name="bitmap">テクスチャ画像</param>
\r
289 /// <param name="strテクスチャファイル名">ファイル名</param>
\r
290 public void OnDeviceCreated(Bitmap bitmap, string strテクスチャファイル名)
\r
292 if (bitmap != null && b黒を透過する)
\r
294 bitmap.MakeTransparent(Color.Black); // 黒を透過色にする
\r
296 this.tx画像 = TextureFactory.tテクスチャの生成(bitmap, b黒を透過する);
\r
298 if (this.tx画像 != null)
\r
301 if (CDTXMania.Instance.ConfigIni.bLogCreateRelease)
\r
302 PutLog(strテクスチャファイル名);
\r
308 Trace.TraceError("テクスチャの生成に失敗しました。({0})({1})", this.strコメント文, strテクスチャファイル名);
\r
311 if (bitmap != null)
\r
317 public virtual void PutLog(string strテクスチャファイル名)
\r
321 #region [ IDisposable 実装 ]
\r
322 //-----------------
\r
323 public void Dispose()
\r
325 if (this.bDisposed済み)
\r
328 if (this.tx画像 != null)
\r
330 #region [ strテクスチャファイル名 を作成。]
\r
331 //-----------------
\r
332 string strテクスチャファイル名 = this.GetFullPathname;
\r
333 //if( !string.IsNullOrEmpty( CDTXMania.Instance.DTX.PATH_WAV ) )
\r
334 // strテクスチャファイル名 = CDTXMania.Instance.DTX.PATH_WAV + this.strファイル名;
\r
336 // strテクスチャファイル名 = CDTXMania.Instance.DTX.strフォルダ名 + this.strファイル名;
\r
337 //-----------------
\r
340 TextureFactory.tテクスチャの解放(ref this.tx画像);
\r
342 if (CDTXMania.Instance.ConfigIni.bLogCreateRelease)
\r
343 Trace.TraceInformation("テクスチャを解放しました。({0})({1})", this.strコメント文, strテクスチャファイル名);
\r
347 this.bDisposed済み = true;
\r
350 #region [ private ]
\r
351 //-----------------
\r
352 private bool bDisposed済み;
\r
353 //-----------------
\r
358 public double dbBPM値;
\r
360 public int n表記上の番号;
\r
362 public override string ToString()
\r
364 StringBuilder builder = new StringBuilder(0x80);
\r
365 if (this.n内部番号 != this.n表記上の番号)
\r
367 builder.Append(string.Format("CBPM{0}(内部{1})", CDTX.tZZ(this.n表記上の番号), this.n内部番号));
\r
371 builder.Append(string.Format("CBPM{0}", CDTX.tZZ(this.n表記上の番号)));
\r
373 builder.Append(string.Format(", BPM:{0}", this.dbBPM値));
\r
374 return builder.ToString();
\r
377 public class CWAV : IDisposable
\r
379 public bool bBGMとして使う;
\r
380 public List<EChannel> listこのWAVを使用するチャンネル番号の集合 = new List<EChannel>(16);
\r
381 public int nチップサイズ = 100;
\r
383 public long[] n一時停止時刻 = new long[CDTXMania.Instance.ConfigIni.nPolyphonicSounds]; // 4
\r
384 public int n音量 = 100;
\r
385 public int n現在再生中のサウンド番号;
\r
386 public long[] n再生開始時刻 = new long[CDTXMania.Instance.ConfigIni.nPolyphonicSounds]; // 4
\r
388 public int n表記上の番号;
\r
389 public CSound[] rSound = new CSound[CDTXMania.Instance.ConfigIni.nPolyphonicSounds]; // 4
\r
390 public string strコメント文 = "";
\r
391 public string strファイル名 = "";
\r
392 public bool bBGMとして使わない
\r
396 return !this.bBGMとして使う;
\r
400 this.bBGMとして使う = !value;
\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
409 public override string ToString()
\r
411 var sb = new StringBuilder(128);
\r
413 if (this.n表記上の番号 == this.n内部番号)
\r
415 sb.Append(string.Format("CWAV{0}: ", CDTX.tZZ(this.n表記上の番号)));
\r
419 sb.Append(string.Format("CWAV{0}(内部{1}): ", CDTX.tZZ(this.n表記上の番号), this.n内部番号));
\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
423 return sb.ToString();
\r
426 #region [ Dispose-Finalize パターン実装 ]
\r
427 //-----------------
\r
428 public void Dispose()
\r
430 this.Dispose(true);
\r
431 GC.SuppressFinalize(this);
\r
433 public void Dispose(bool bManagedリソースの解放も行う)
\r
435 if (this.bDisposed済み)
\r
438 if (bManagedリソースの解放も行う)
\r
440 for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++) // 4
\r
442 if (this.rSound[i] != null)
\r
443 CDTXMania.Instance.Sound管理.tサウンドを破棄する(this.rSound[i]);
\r
444 this.rSound[i] = null;
\r
446 if ((i == 0) && CDTXMania.Instance.ConfigIni.bLogCreateRelease)
\r
447 Trace.TraceInformation("サウンドを解放しました。({0})({1})", this.strコメント文, this.strファイル名);
\r
451 this.bDisposed済み = true;
\r
455 this.Dispose(false);
\r
457 //-----------------
\r
460 #region [ private ]
\r
461 //-----------------
\r
462 private bool bDisposed済み;
\r
463 //-----------------
\r
469 public struct STRESULT
\r
479 public string this[int index]
\r
506 throw new IndexOutOfRangeException();
\r
540 throw new IndexOutOfRangeException();
\r
544 public struct STチップがある
\r
547 public bool Guitar;
\r
550 public bool HHOpen;
\r
552 public bool LeftCymbal;
\r
553 public bool OpenGuitar;
\r
554 public bool OpenBass;
\r
559 public bool LeftPedal;
\r
560 public bool LeftBassDrum;
\r
562 public bool this[EPart inst]
\r
567 if (inst == EPart.Drums)
\r
571 else if (inst == EPart.Guitar)
\r
575 else if (inst == EPart.Bass)
\r
583 public bool this[int index]
\r
593 return this.Guitar;
\r
599 return this.HHOpen;
\r
605 return this.LeftCymbal;
\r
608 return this.OpenGuitar;
\r
611 return this.OpenBass;
\r
614 return this.LeftPedal;
\r
617 return this.LeftBassDrum;
\r
619 throw new IndexOutOfRangeException();
\r
626 this.Drums = value;
\r
630 this.Guitar = value;
\r
638 this.HHOpen = value;
\r
646 this.LeftCymbal = value;
\r
650 this.OpenGuitar = value;
\r
654 this.OpenBass = value;
\r
658 this.LeftPedal = value;
\r
662 this.LeftBassDrum = value;
\r
665 throw new IndexOutOfRangeException();
\r