2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
5 using System.Drawing;
\r
6 using System.Diagnostics;
\r
8 using System.Security.Cryptography;
\r
9 using System.Reflection;
\r
14 internal class CDTX : CActivity
\r
30 public class CAVI : IDisposable
\r
33 private bool bDisposed;
\r
35 public string strコメント文 = "";
\r
36 public string strファイル名 = "";
\r
38 public void OnDeviceCreated()
\r
41 string str2 = CDTXMania.DTX.PATH_WAV;
\r
42 if( ( str2 != null ) && ( str2.Length > 0 ) )
\r
44 str = str2 + this.strファイル名;
\r
48 str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;
\r
50 if( File.Exists( str ) )
\r
54 this.avi = new CAvi( str );
\r
55 Trace.TraceInformation( "動画を生成しました。({0})({1})({2}frames)", new object[] { this.strコメント文, str, this.avi.GetMaxFrameCount() } );
\r
57 catch( Exception exception )
\r
59 Trace.TraceError( exception.Message );
\r
60 Trace.TraceError( "動画の生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );
\r
66 Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );
\r
70 public override string ToString()
\r
72 return string.Format( "CAVI{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );
\r
75 #region [ IDisposable 実装 ]
\r
77 public void Dispose()
\r
79 if( !this.bDisposed )
\r
81 if( this.avi != null )
\r
84 string str2 = CDTXMania.DTX.PATH_WAV;
\r
85 if( ( str2 != null ) && ( str2.Length > 0 ) )
\r
87 str = str2 + this.strファイル名;
\r
91 str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;
\r
95 Trace.TraceInformation( "動画を解放しました。({0})({1})", new object[] { this.strコメント文, str } );
\r
97 this.bDisposed = true;
\r
100 //-----------------
\r
103 public class CAVIPAN
\r
106 public int n移動時間ct;
\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
115 public override string ToString()
\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
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
128 public override string ToString()
\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
133 public class CBGAPAN
\r
136 public int n移動時間ct;
\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
145 public override string ToString()
\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
150 public class CBMP : IDisposable
\r
154 public string strコメント文 = "";
\r
155 public string strファイル名 = "";
\r
156 public CTexture tx画像;
\r
161 return this.tx画像.sz画像サイズ.Height;
\r
168 return this.tx画像.sz画像サイズ.Width;
\r
172 public void OnDeviceCreated()
\r
175 string str2 = CDTXMania.DTX.PATH_WAV;
\r
176 if( ( str2 != null ) && ( str2.Length > 0 ) )
\r
178 str = str2 + this.strファイル名;
\r
182 str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;
\r
184 if( File.Exists( str ) )
\r
186 this.tx画像 = CDTXMania.tテクスチャの生成( str, true );
\r
187 if( this.tx画像 != null )
\r
189 if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )
\r
191 Trace.TraceInformation( "テクスチャを生成しました。({0})({1})({2}x{3})", new object[] { this.strコメント文, str, this.n幅, this.n高さ } );
\r
197 Trace.TraceError( "テクスチャの生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );
\r
203 Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );
\r
207 public override string ToString()
\r
209 return string.Format( "CBMP{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );
\r
212 #region [ IDisposable 実装 ]
\r
213 //-----------------
\r
214 public void Dispose()
\r
216 if( !this.bDisposed済み )
\r
218 if( this.tx画像 != null )
\r
221 string str2 = CDTXMania.DTX.PATH_WAV;
\r
222 if( ( str2 != null ) && ( str2.Length > 0 ) )
\r
224 str = str2 + this.strファイル名;
\r
228 str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;
\r
230 CDTXMania.tテクスチャの解放( ref this.tx画像 );
\r
231 if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )
\r
233 Trace.TraceInformation( "テクスチャを解放しました。({0})({1})", new object[] { this.strコメント文, str } );
\r
237 this.bDisposed済み = true;
\r
240 //-----------------
\r
243 #region [ private ]
\r
244 //-----------------
\r
245 private bool bDisposed済み;
\r
246 //-----------------
\r
249 public class CBMPTEX : IDisposable
\r
253 public string strコメント文 = "";
\r
254 public string strファイル名 = "";
\r
255 public CTexture tx画像;
\r
260 return this.tx画像.sz画像サイズ.Height;
\r
267 return this.tx画像.sz画像サイズ.Width;
\r
271 public void OnDeviceCreated()
\r
274 string str2 = CDTXMania.DTX.PATH_WAV;
\r
275 if( ( str2 != null ) && ( str2.Length > 0 ) )
\r
277 str = str2 + this.strファイル名;
\r
281 str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;
\r
283 if( File.Exists( str ) )
\r
285 this.tx画像 = CDTXMania.tテクスチャの生成( str );
\r
286 if( this.tx画像 != null )
\r
288 if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )
\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
296 Trace.TraceError( "テクスチャの生成に失敗しました。({0})({1})", new object[] { this.strコメント文, str } );
\r
301 Trace.TraceWarning( "ファイルが存在しません。({0})({1})", new object[] { this.strコメント文, str } );
\r
305 public override string ToString()
\r
307 return string.Format( "CBMPTEX{0}: File:{1}, Comment:{2}", CDTX.tZZ( this.n番号 ), this.strファイル名, this.strコメント文 );
\r
310 #region [ IDisposable 実装 ]
\r
311 //-----------------
\r
312 public void Dispose()
\r
314 if( !this.bDisposed済み )
\r
316 if( this.tx画像 != null )
\r
319 string str2 = CDTXMania.DTX.PATH_WAV;
\r
320 if( ( str2 != null ) && ( str2.Length > 0 ) )
\r
322 str = str2 + this.strファイル名;
\r
326 str = CDTXMania.DTX.strフォルダ名 + this.strファイル名;
\r
328 CDTXMania.tテクスチャの解放( ref this.tx画像 );
\r
329 if( CDTXMania.ConfigIni.bLog作成解放ログ出力 )
\r
331 Trace.TraceInformation( "テクスチャを解放しました。({0})({1})", new object[] { this.strコメント文, str } );
\r
335 this.bDisposed済み = true;
\r
338 //-----------------
\r
341 #region [ private ]
\r
342 //-----------------
\r
343 private bool bDisposed済み;
\r
344 //-----------------
\r
349 public double dbBPM値;
\r
351 public int n表記上の番号;
\r
353 public override string ToString()
\r
355 StringBuilder builder = new StringBuilder( 0x80 );
\r
356 if( this.n内部番号 != this.n表記上の番号 )
\r
358 builder.Append( string.Format( "CBPM{0}(内部{1})", CDTX.tZZ( this.n表記上の番号 ), this.n内部番号 ) );
\r
362 builder.Append( string.Format( "CBPM{0}", CDTX.tZZ( this.n表記上の番号 ) ) );
\r
364 builder.Append( string.Format( ", BPM:{0}", this.dbBPM値 ) );
\r
365 return builder.ToString();
\r
368 public class CChip : IComparable<CDTX.CChip>
\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
380 public int n整数値・内部番号;
\r
382 public int n透明度 = 0xff;
\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
395 if( this.nチャンネル番号 != 3 )
\r
397 return ( this.nチャンネル番号 == 8 );
\r
402 public bool bWAVを使うチャンネルである
\r
406 switch( this.nチャンネル番号 )
\r
497 public bool b自動再生音チャンネルである
\r
501 int num = this.nチャンネル番号;
\r
502 if( ( ( ( num != 1 ) && ( ( 0x61 > num ) || ( num > 0x69 ) ) ) && ( ( 0x70 > num ) || ( num > 0x79 ) ) ) && ( ( 0x80 > num ) || ( num > 0x89 ) ) )
\r
504 return ( ( 0x90 <= num ) && ( num <= 0x92 ) );
\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
522 this.n整数値・内部番号 = 0;
\r
526 this.dbチップサイズ倍率 = 1.0;
\r
529 this.e楽器パート = E楽器パート.UNKNOWN;
\r
531 this.nバーからの距離dot.Drums = 0;
\r
532 this.nバーからの距離dot.Guitar = 0;
\r
533 this.nバーからの距離dot.Bass = 0;
\r
536 public override string ToString()
\r
539 switch( this.nチャンネル番号 )
\r
598 str = "RideCymbal";
\r
602 str = "LeftCymbal";
\r
642 str = "ギターWailing";
\r
646 str = "ギターWailing音切替";
\r
650 str = "HHClose(不可視)";
\r
654 str = "Snare(不可視)";
\r
662 str = "HiTom(不可視)";
\r
666 str = "LowTom(不可視)";
\r
670 str = "Cymbal(不可視)";
\r
674 str = "FloorTom(不可視)";
\r
678 str = "HHOpen(不可視)";
\r
682 str = "RideCymbal(不可視)";
\r
686 str = "LeftCymbal(不可視)";
\r
894 str = "ベースWailing";
\r
898 str = "ベースWailing音切替";
\r
902 str = "HHClose(空うち)";
\r
906 str = "Snare(空うち)";
\r
914 str = "HiTom(空うち)";
\r
918 str = "LowTom(空うち)";
\r
922 str = "Cymbal(空うち)";
\r
926 str = "FloorTom(空うち)";
\r
930 str = "HHOpen(空うち)";
\r
934 str = "RideCymbal(空うち)";
\r
946 str = "LeftCymbal(空うち)";
\r
950 str = "BGAスコープ画像切替1";
\r
954 str = "BGAスコープ画像切替2";
\r
958 str = "BGAスコープ画像切替3";
\r
962 str = "BGAスコープ画像切替4";
\r
966 str = "BGAスコープ画像切替5";
\r
970 str = "BGAスコープ画像切替6";
\r
974 str = "BGAスコープ画像切替7";
\r
978 str = "BGAスコープ画像切替8";
\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
988 #region [ IComparable 実装 ]
\r
989 //-----------------
\r
990 public int CompareTo( CDTX.CChip other )
\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
1010 if( this.n発声位置 < other.n発声位置 )
\r
1014 if( this.n発声位置 > other.n発声位置 )
\r
1018 if( buffer[ this.nチャンネル番号 ] < buffer[ other.nチャンネル番号 ] )
\r
1022 if( buffer[ this.nチャンネル番号 ] > buffer[ other.nチャンネル番号 ] )
\r
1028 //-----------------
\r
1031 public class CWAV : IDisposable
\r
1033 public bool bBGMとして使う;
\r
1034 public List<int> listこのWAVを使用するチャンネル番号の集合 = new List<int>( 0x10 );
\r
1035 public int nチップサイズ = 100;
\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
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
1050 return !this.bBGMとして使う;
\r
1054 this.bBGMとして使う = !value;
\r
1058 public override string ToString()
\r
1060 StringBuilder builder = new StringBuilder( 0x80 );
\r
1061 if( this.n表記上の番号 == this.n内部番号 )
\r
1063 builder.Append( string.Format( "CWAV{0}: ", CDTX.tZZ( this.n表記上の番号 ) ) );
\r
1067 builder.Append( string.Format( "CWAV{0}(内部{1}): ", CDTX.tZZ( this.n表記上の番号 ), this.n内部番号 ) );
\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
1073 #region [ IDisposable+α実装 ]
\r
1074 //-----------------
\r
1075 public void Dispose()
\r
1077 this.Dispose( true );
\r
1079 public void Dispose( bool bサウンドのDisposeも行う )
\r
1081 if( !this.bDisposed済み )
\r
1083 for( int i = 0; i < 4; i++ )
\r
1085 if( bサウンドのDisposeも行う && ( this.rSound[ i ] != null ) )
\r
1087 CDTXMania.Sound管理.tサウンドを破棄する( this.rSound[ i ] );
\r
1089 this.rSound[ i ] = null;
\r
1090 if( ( i == 0 ) && CDTXMania.ConfigIni.bLog作成解放ログ出力 )
\r
1092 Trace.TraceInformation( "サウンドを解放しました。({0})({1})", new object[] { this.strコメント文, this.strファイル名 } );
\r
1095 this.bDisposed済み = true;
\r
1098 //-----------------
\r
1101 #region [ private ]
\r
1102 //-----------------
\r
1103 private bool bDisposed済み;
\r
1104 //-----------------
\r
1111 [StructLayout( LayoutKind.Sequential )]
\r
1112 public struct STLANEINT
\r
1124 public int Guitar;
\r
1126 public int this[ int index ]
\r
1163 return this.Guitar;
\r
1168 throw new IndexOutOfRangeException();
\r
1174 throw new ArgumentOutOfRangeException();
\r
1219 this.Guitar = value;
\r
1223 this.Bass = value;
\r
1226 throw new IndexOutOfRangeException();
\r
1233 return ( ( ( ( ( ( ( ( ( this.HH + this.SD ) + this.BD ) + this.HT ) + this.LT ) + this.CY ) + this.FT ) + this.HHO ) + this.RD ) + this.LC );
\r
1238 [StructLayout( LayoutKind.Sequential )]
\r
1239 public struct STRESULT
\r
1248 public string this[ int index ]
\r
1275 throw new IndexOutOfRangeException();
\r
1309 throw new IndexOutOfRangeException();
\r
1314 [StructLayout( LayoutKind.Sequential )]
\r
1315 public struct STチップがある
\r
1317 public bool Drums;
\r
1318 public bool Guitar;
\r
1320 public bool HHOpen;
\r
1322 public bool LeftCymbal;
\r
1323 public bool OpenGuitar;
\r
1324 public bool OpenBass;
\r
1325 public bool this[ int index ]
\r
1332 return this.Drums;
\r
1335 return this.Guitar;
\r
1341 return this.HHOpen;
\r
1347 return this.LeftCymbal;
\r
1350 return this.OpenGuitar;
\r
1353 return this.OpenBass;
\r
1355 throw new IndexOutOfRangeException();
\r
1362 this.Drums = value;
\r
1366 this.Guitar = value;
\r
1370 this.Bass = value;
\r
1374 this.HHOpen = value;
\r
1378 this.Ride = value;
\r
1382 this.LeftCymbal = value;
\r
1386 this.OpenGuitar = value;
\r
1390 this.OpenBass = value;
\r
1393 throw new IndexOutOfRangeException();
\r
1401 public int nBGMAdjust
\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
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
1460 this.COMMENT = "";
\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
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
1491 this.RESULTIMAGE = stresult;
\r
1492 stresult4 = new STRESULT();
\r
1493 STRESULT stresult2 = stresult4;
\r
1494 stresult2.SS = "";
\r
1501 this.RESULTMOVIE = stresult2;
\r
1502 STRESULT stresult3 = new STRESULT();
\r
1503 stresult3.SS = "";
\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
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
1842 public CDTX( string str全入力文字列 )
\r
1846 this.t入力・全入力文字列から( str全入力文字列 );
\r
1848 public CDTX( string strファイル名, bool bヘッダのみ )
\r
1852 this.t入力( strファイル名, bヘッダのみ );
\r
1854 public CDTX( string str全入力文字列, double db再生速度, int nBGMAdjust )
\r
1858 this.t入力・全入力文字列から( str全入力文字列, db再生速度, nBGMAdjust );
\r
1860 public CDTX( string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust )
\r
1864 this.t入力( strファイル名, bヘッダのみ, db再生速度, nBGMAdjust );
\r
1870 public int nモニタを考慮した音量( E楽器パート part )
\r
1872 CConfigIni configIni = CDTXMania.ConfigIni;
\r
1875 case E楽器パート.DRUMS:
\r
1876 if( configIni.b演奏音を強調する.Drums )
\r
1878 return configIni.n自動再生音量;
\r
1880 return configIni.n手動再生音量;
\r
1882 case E楽器パート.GUITAR:
\r
1883 if( configIni.b演奏音を強調する.Guitar )
\r
1885 return configIni.n自動再生音量;
\r
1887 return configIni.n手動再生音量;
\r
1890 if( configIni.b演奏音を強調する.Bass )
\r
1892 return configIni.n自動再生音量;
\r
1894 return configIni.n手動再生音量;
\r
1896 if( ( !configIni.b演奏音を強調する.Drums && !configIni.b演奏音を強調する.Guitar ) && !configIni.b演奏音を強調する.Bass )
\r
1898 return configIni.n手動再生音量;
\r
1900 return configIni.n自動再生音量;
\r
1902 public void tAVIの読み込み()
\r
1904 if( this.listAVI != null )
\r
1906 foreach( CAVI cavi in this.listAVI.Values )
\r
1908 cavi.OnDeviceCreated();
\r
1911 if( !this.bヘッダのみ )
\r
1913 foreach( CChip chip in this.listChip )
\r
1915 if( chip.nチャンネル番号 == 0x54 )
\r
1917 chip.eAVI種別 = EAVI種別.Unknown;
\r
1919 chip.rAVIPan = null;
\r
1920 if( this.listAVIPAN.ContainsKey( chip.n整数値 ) )
\r
1922 CAVIPAN cavipan = this.listAVIPAN[ chip.n整数値 ];
\r
1923 if( this.listAVI.ContainsKey( cavipan.nAVI番号 ) && ( this.listAVI[ cavipan.nAVI番号 ].avi != null ) )
\r
1925 chip.eAVI種別 = EAVI種別.AVIPAN;
\r
1926 chip.rAVI = this.listAVI[ cavipan.nAVI番号 ];
\r
1927 chip.rAVIPan = cavipan;
\r
1931 if( this.listAVI.ContainsKey( chip.n整数値 ) && ( this.listAVI[ chip.n整数値 ].avi != null ) )
\r
1933 chip.eAVI種別 = EAVI種別.AVI;
\r
1934 chip.rAVI = this.listAVI[ chip.n整数値 ];
\r
1940 public void tBMP_BMPTEXの読み込み()
\r
1942 if( this.listBMP != null )
\r
1944 foreach( CBMP cbmp in this.listBMP.Values )
\r
1946 cbmp.OnDeviceCreated();
\r
1949 if( this.listBMPTEX != null )
\r
1951 foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )
\r
1953 cbmptex.OnDeviceCreated();
\r
1956 if( !this.bヘッダのみ )
\r
1958 foreach( CChip chip in this.listChip )
\r
1960 if( ( ( ( chip.nチャンネル番号 == 4 ) || ( chip.nチャンネル番号 == 7 ) ) || ( ( chip.nチャンネル番号 >= 0x55 ) && ( chip.nチャンネル番号 <= 0x59 ) ) ) || ( chip.nチャンネル番号 == 0x60 ) )
\r
1962 chip.eBGA種別 = EBGA種別.Unknown;
\r
1964 chip.rBMPTEX = null;
\r
1966 chip.rBGAPan = null;
\r
1967 if( this.listBGAPAN.ContainsKey( chip.n整数値 ) )
\r
1969 CBGAPAN cbgapan = this.listBGAPAN[ chip.n整数値 ];
\r
1970 if( this.listBMPTEX.ContainsKey( cbgapan.nBMP番号 ) && this.listBMPTEX[ cbgapan.nBMP番号 ].bUse )
\r
1972 chip.eBGA種別 = EBGA種別.BGAPAN;
\r
1973 chip.rBMPTEX = this.listBMPTEX[ cbgapan.nBMP番号 ];
\r
1974 chip.rBGAPan = cbgapan;
\r
1977 if( this.listBMP.ContainsKey( cbgapan.nBMP番号 ) && this.listBMP[ cbgapan.nBMP番号 ].bUse )
\r
1979 chip.eBGA種別 = EBGA種別.BGAPAN;
\r
1980 chip.rBMP = this.listBMP[ cbgapan.nBMP番号 ];
\r
1981 chip.rBGAPan = cbgapan;
\r
1985 if( this.listBGA.ContainsKey( chip.n整数値 ) )
\r
1987 CBGA cbga = this.listBGA[ chip.n整数値 ];
\r
1988 if( this.listBMPTEX.ContainsKey( cbga.nBMP番号 ) && this.listBMPTEX[ cbga.nBMP番号 ].bUse )
\r
1990 chip.eBGA種別 = EBGA種別.BGA;
\r
1991 chip.rBMPTEX = this.listBMPTEX[ cbga.nBMP番号 ];
\r
1995 if( this.listBMP.ContainsKey( cbga.nBMP番号 ) && this.listBMP[ cbga.nBMP番号 ].bUse )
\r
1997 chip.eBGA種別 = EBGA種別.BGA;
\r
1998 chip.rBMP = this.listBMP[ cbga.nBMP番号 ];
\r
2003 if( this.listBMPTEX.ContainsKey( chip.n整数値 ) && this.listBMPTEX[ chip.n整数値 ].bUse )
\r
2005 chip.eBGA種別 = EBGA種別.BMPTEX;
\r
2006 chip.rBMPTEX = this.listBMPTEX[ chip.n整数値 ];
\r
2009 if( this.listBMP.ContainsKey( chip.n整数値 ) && this.listBMP[ chip.n整数値 ].bUse )
\r
2011 chip.eBGA種別 = EBGA種別.BMP;
\r
2012 chip.rBMP = this.listBMP[ chip.n整数値 ];
\r
2016 if( ( ( ( chip.nチャンネル番号 == 0xc4 ) || ( chip.nチャンネル番号 == 0xc7 ) ) || ( ( chip.nチャンネル番号 >= 0xd5 ) && ( chip.nチャンネル番号 <= 0xd9 ) ) ) || ( chip.nチャンネル番号 == 0xe0 ) )
\r
2018 chip.eBGA種別 = EBGA種別.Unknown;
\r
2020 chip.rBMPTEX = null;
\r
2022 chip.rBGAPan = null;
\r
2023 if( this.listBMPTEX.ContainsKey( chip.n整数値 ) && this.listBMPTEX[ chip.n整数値 ].bUse )
\r
2025 chip.eBGA種別 = EBGA種別.BMPTEX;
\r
2026 chip.rBMPTEX = this.listBMPTEX[ chip.n整数値 ];
\r
2028 else if( this.listBMP.ContainsKey( chip.n整数値 ) && this.listBMP[ chip.n整数値 ].bUse )
\r
2030 chip.eBGA種別 = EBGA種別.BMP;
\r
2031 chip.rBMP = this.listBMP[ chip.n整数値 ];
\r
2037 public void tWave再生位置自動補正()
\r
2039 foreach( CWAV cwav in this.listWAV.Values )
\r
2041 this.tWave再生位置自動補正( cwav );
\r
2044 public void tWave再生位置自動補正( CWAV wc )
\r
2046 for( int i = 0; i < 4; i++ )
\r
2048 if( ( ( wc.rSound[ i ] != null ) && wc.rSound[ i ].b再生中 ) && ( wc.rSound[ i ].n総演奏時間ms >= 0x1388 ) )
\r
2050 long num2 = CDTXMania.Timer.nシステム時刻;
\r
2051 if( num2 > wc.n再生開始時刻[ i ] )
\r
2053 long num3 = num2 - wc.n再生開始時刻[ i ];
\r
2054 wc.rSound[ i ].t再生位置を変更する( wc.rSound[ i ].t時刻から位置を返す( num3 ) );
\r
2059 public void tWavの再生停止( int nWaveの内部番号 )
\r
2061 if( this.listWAV.ContainsKey( nWaveの内部番号 ) )
\r
2063 CWAV cwav = this.listWAV[ nWaveの内部番号 ];
\r
2064 for( int i = 0; i < 4; i++ )
\r
2066 if( cwav.rSound[ i ] != null )
\r
2068 cwav.rSound[ i ].t再生を停止する();
\r
2073 public void tWAVの読み込み()
\r
2075 foreach( CWAV cwav in this.listWAV.Values )
\r
2077 string str = string.IsNullOrEmpty( this.PATH_WAV ) ? this.strフォルダ名 : this.PATH_WAV;
\r
2078 str = str + cwav.strファイル名;
\r
2081 for( int i = 0; i < 4; i++ )
\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
2089 Trace.TraceInformation( "サウンドを作成しました。({3})({0})({1})({2}bytes)", new object[] { cwav.strコメント文, str, cwav.rSound[ i ].nサウンドバッファサイズ, cwav.rSound[ i ].bストリーム再生する ? "Stream" : "OnMemory" } );
\r
2094 cwav.rSound[ i ] = null;
\r
2097 Trace.TraceError( "サウンドの作成に失敗しました。({0})({1})", new object[] { cwav.strコメント文, str } );
\r
2100 if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].bストリーム再生する )
\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
2110 // for (int j = 1; j < 3; j++)
\r
2112 // SlimDX.DirectSound.SoundBuffer result;
\r
2113 // CDTXMania.Sound管理.Device.DuplicateSoundBuffer(
\r
2114 // cwav.rSound[0].Buffer,
\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
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
2130 catch( Exception exception )
\r
2132 Trace.TraceError( "サウンドの生成に失敗しました。({0})({1})({2})", new object[] { exception.Message, cwav.strコメント文, str } );
\r
2133 for( int j = 0; j < 4; j++ )
\r
2135 cwav.rSound[ j ] = null;
\r
2141 public static string tZZ( int n )
\r
2143 if( ( n < 0 ) || ( n >= 36 * 36) )
\r
2147 string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
\r
2148 return new string( new char[] { str[ n / 36 ], str[ n % 36 ] } );
\r
2152 /// ギターのレーンビットパターン
\r
2154 public enum Eレーンビットパターン
\r
2165 public void tギターとベースのランダム化(E楽器パート part, Eランダムモード eRandom)
\r
2167 if( ( ( part == E楽器パート.GUITAR ) || ( part == E楽器パート.BASS ) ) && ( eRandom != Eランダムモード.OFF ) )
\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
2175 int nRGBレーンビットパターン;
\r
2176 int n新RGBレーンビットパターン = 0; // 「未割り当てのローカル変数」ビルドエラー回避のために0を初期値に設定
\r
2178 if( ( chip.n発声位置 / 384 ) != n小節番号 ) // 小節が変化したら
\r
2180 n小節番号 = chip.n発声位置 / 384;
\r
2181 n小節内乱数6通り = CDTXMania.Random.Next( 6 );
\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
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
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
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
2206 break; // レーン1本相当でなければ、とりあえず先に進む
\r
2208 n新RGBレーンビットパターン = CDTXMania.Random.Next( 6 ) + 1; // レーン1本相当なら、レーン1本か2本(1~6)に変化して終了
\r
2212 continue; // goto Label_02C4;
\r
2214 switch( nRGBレーンビットパターン )
\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
2223 if( nRGBレーンビットパターン == (int)Eレーンビットパターン.RGB ) // RGB レーン3本相当
\r
2225 if( flag ) // OPENあり譜面の場合
\r
2227 int n乱数パーセント = CDTXMania.Random.Next( 100 );
\r
2228 if( n乱数パーセント < 30 )
\r
2230 n新RGBレーンビットパターン = (int)Eレーンビットパターン.OPEN;
\r
2232 else if( n乱数パーセント < 60 )
\r
2234 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGB;
\r
2236 else if( n乱数パーセント < 85 )
\r
2238 switch( CDTXMania.Random.Next( 3 ) )
\r
2241 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGB;
\r
2245 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RxB;
\r
2248 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGx;
\r
2252 switch( CDTXMania.Random.Next( 3 ) )
\r
2255 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xxB;
\r
2259 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGx;
\r
2262 n新RGBレーンビットパターン = (int)Eレーンビットパターン.Rxx;
\r
2265 else // OPENなし譜面の場合
\r
2267 int n乱数パーセント = CDTXMania.Random.Next( 100 );
\r
2268 if( n乱数パーセント < 60 )
\r
2270 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGB;
\r
2272 else if( n乱数パーセント < 85 )
\r
2274 switch( CDTXMania.Random.Next( 3 ) )
\r
2277 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGB;
\r
2281 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RxB;
\r
2284 n新RGBレーンビットパターン = (int)Eレーンビットパターン.RGx;
\r
2288 switch( CDTXMania.Random.Next( 3 ) )
\r
2291 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xxB;
\r
2295 n新RGBレーンビットパターン = (int)Eレーンビットパターン.xGx;
\r
2298 n新RGBレーンビットパターン = (int)Eレーンビットパターン.Rxx;
\r
2305 chip.nチャンネル番号 = ( nランダム化前チャンネル番号 & 0xF0 ) | n新RGBレーンビットパターン;
\r
2307 // GOTO_END++; // goto用のダミーコード
\r
2311 public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane )
\r
2313 this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, CDTXMania.ConfigIni.n自動再生音量, false, false );
\r
2315 public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane, int nVol )
\r
2317 this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, nVol, false, false );
\r
2319 public void tチップの再生( CChip rChip, long n再生開始システム時刻ms, int nLane, int nVol, bool bMIDIMonitor )
\r
2321 this.tチップの再生( rChip, n再生開始システム時刻ms, nLane, nVol, bMIDIMonitor, false );
\r
2323 public void tチップの再生( CChip pChip, long n再生開始システム時刻ms, int nLane, int nVol, bool bMIDIMonitor, bool bBad )
\r
2325 if( pChip.n整数値・内部番号 >= 0 )
\r
2327 if( ( nLane < 0 ) || ( nLane > 10 ) )
\r
2329 throw new ArgumentOutOfRangeException();
\r
2331 if( this.listWAV.ContainsKey( pChip.n整数値・内部番号 ) )
\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
2337 index = wc.n現在再生中のサウンド番号 = 0;
\r
2339 CSound sound = wc.rSound[ index ];
\r
2340 if( sound != null )
\r
2342 sound.n音量 = (int) ( ( (double) ( nVol * wc.n音量 ) ) / 100.0 );
\r
2343 sound.n位置 = wc.n位置;
\r
2346 sound.db周波数倍率 = ( (float) ( 100 + ( ( ( CDTXMania.Random.Next( 3 ) + 1 ) * 7 ) * ( 1 - ( CDTXMania.Random.Next( 2 ) * 2 ) ) ) ) ) / 100f;
\r
2350 sound.db周波数倍率 = 1.0;
\r
2352 sound.db再生速度 = ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0;
\r
2355 wc.n再生開始時刻[ wc.n現在再生中のサウンド番号 ] = n再生開始システム時刻ms;
\r
2356 this.tWave再生位置自動補正( wc );
\r
2360 public void t各自動再生音チップの再生時刻を変更する( int nBGMAdjustの増減値 )
\r
2362 this.nBGMAdjust += nBGMAdjustの増減値;
\r
2363 for( int i = 0; i < this.listChip.Count; i++ )
\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
2368 CChip local1 = this.listChip[ i ];
\r
2369 local1.n発声時刻ms += nBGMAdjustの増減値;
\r
2372 foreach( CWAV cwav in this.listWAV.Values )
\r
2374 for( int j = 0; j < 4; j++ )
\r
2376 if( ( cwav.rSound[ j ] != null ) && cwav.rSound[ j ].b再生中 )
\r
2378 cwav.n再生開始時刻[ j ] += nBGMAdjustの増減値;
\r
2383 public void t全チップの再生一時停止()
\r
2385 foreach( CWAV cwav in this.listWAV.Values )
\r
2387 for( int i = 0; i < 4; i++ )
\r
2389 if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].b再生中 )
\r
2391 cwav.rSound[ i ].t再生を一時停止する();
\r
2392 cwav.n一時停止時刻[ i ] = CDTXMania.Timer.nシステム時刻;
\r
2397 public void t全チップの再生再開()
\r
2399 foreach( CWAV cwav in this.listWAV.Values )
\r
2401 for( int i = 0; i < 4; i++ )
\r
2403 if( ( cwav.rSound[ i ] != null ) && cwav.rSound[ i ].b一時停止中 )
\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
2413 public void t全チップの再生停止()
\r
2415 foreach( CWAV cwav in this.listWAV.Values )
\r
2417 this.tWavの再生停止( cwav.n内部番号 );
\r
2420 public void t入力( string strファイル名, bool bヘッダのみ )
\r
2422 this.t入力( strファイル名, bヘッダのみ, 1.0, 0 );
\r
2424 public void t入力( string strファイル名, bool bヘッダのみ, double db再生速度, int nBGMAdjust )
\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
2433 if( !( str3 == ".dtx" ) )
\r
2435 if( str3 == ".gda" )
\r
2437 this.e種別 = E種別.GDA;
\r
2439 else if( str3 == ".g2d" )
\r
2441 this.e種別 = E種別.G2D;
\r
2443 else if( str3 == ".bms" )
\r
2445 this.e種別 = E種別.BMS;
\r
2447 else if( str3 == ".bme" )
\r
2449 this.e種別 = E種別.BME;
\r
2451 else if( str3 == ".mid" )
\r
2453 this.e種別 = E種別.SMF;
\r
2458 this.e種別 = E種別.DTX;
\r
2461 if( this.e種別 != E種別.SMF )
\r
2463 StreamReader reader = new StreamReader( strファイル名, Encoding.GetEncoding( "shift-jis" ) );
\r
2464 string str2 = reader.ReadToEnd();
\r
2466 this.t入力・全入力文字列から( str2, db再生速度, nBGMAdjust );
\r
2470 Trace.TraceWarning( "SMF の演奏は未対応です。(検討中)" );
\r
2473 public void t入力・全入力文字列から( string str全入力文字列 )
\r
2475 this.t入力・全入力文字列から( str全入力文字列, 1.0, 0 );
\r
2477 public unsafe void t入力・全入力文字列から( string str全入力文字列, double db再生速度, int nBGMAdjust )
\r
2479 if( !string.IsNullOrEmpty( str全入力文字列 ) )
\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
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
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
2498 for( int k = 0; k < 7; k++ )
\r
2500 this.nRESULTIMAGE用優先順位[ k ] = 0;
\r
2501 this.nRESULTMOVIE用優先順位[ k ] = 0;
\r
2502 this.nRESULTSOUND用優先順位[ k ] = 0;
\r
2504 CharEnumerator ce = str全入力文字列.GetEnumerator();
\r
2505 if( ce.MoveNext() )
\r
2510 if( !this.t入力・空白と改行をスキップする( ref ce ) )
\r
2514 if( ce.Current == '#' )
\r
2516 if( ce.MoveNext() )
\r
2518 StringBuilder builder = new StringBuilder( 0x20 );
\r
2519 if( this.t入力・コマンド文字列を抜き出す( ref ce, ref builder ) )
\r
2521 StringBuilder builder2 = new StringBuilder( 0x400 );
\r
2522 if( this.t入力・パラメータ文字列を抜き出す( ref ce, ref builder2 ) )
\r
2524 StringBuilder builder3 = new StringBuilder( 0x400 );
\r
2525 if( this.t入力・コメント文字列を抜き出す( ref ce, ref builder3 ) )
\r
2527 this.t入力・行解析( ref builder, ref builder2, ref builder3 );
\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
2547 foreach( CBPM cbpm2 in this.listBPM.Values )
\r
2549 if( cbpm2.n表記上の番号 == 0 )
\r
2555 if( cbpm == null )
\r
2557 cbpm = new CBPM();
\r
2558 cbpm.n内部番号 = this.n内部番号BPM1to++;
\r
2560 cbpm.dbBPM値 = 120.0;
\r
2561 this.listBPM.Add( cbpm.n内部番号, cbpm );
\r
2562 CChip item = new CChip();
\r
2564 item.nチャンネル番号 = 8;
\r
2566 item.n整数値・内部番号 = cbpm.n内部番号;
\r
2567 this.listChip.Add( item );
\r
2571 CChip chip2 = new CChip();
\r
2573 chip2.nチャンネル番号 = 8;
\r
2575 chip2.n整数値・内部番号 = cbpm.n内部番号;
\r
2576 this.listChip.Add( chip2 );
\r
2578 if( this.listBMP.ContainsKey( 0 ) )
\r
2580 CChip chip4 = new CChip();
\r
2582 chip4.nチャンネル番号 = 4;
\r
2584 chip4.n整数値・内部番号 = 0;
\r
2585 CChip chip3 = chip4;
\r
2586 this.listChip.Add( chip3 );
\r
2588 foreach( CWAV cwav in this.listWAV.Values )
\r
2590 if( cwav.nチップサイズ < 0 )
\r
2592 cwav.nチップサイズ = 100;
\r
2594 if( cwav.n位置 <= -10000 )
\r
2598 if( cwav.n音量 < 0 )
\r
2603 foreach( CWAV cwav2 in this.listWAV.Values )
\r
2605 foreach( CChip chip5 in this.listChip )
\r
2607 if( chip5.n整数値・内部番号 == cwav2.n内部番号 )
\r
2609 chip5.dbチップサイズ倍率 = ( (double) cwav2.nチップサイズ ) / 100.0;
\r
2613 for( int m = 0xb1; m <= 0xbb; m++ )
\r
2615 foreach( CChip chip6 in this.listChip )
\r
2617 if( chip6.nチャンネル番号 == m )
\r
2619 CChip chip7 = new CChip();
\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
2629 if( this.listChip.Count > 0 )
\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
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
2642 this.listChip.Sort();
\r
2645 for( int num9 = 0; num9 < num5; num9 += 0x180 )
\r
2648 while( ( num8 < this.listChip.Count ) && ( this.listChip[ num8 ].n発声位置 < ( num9 + 0x180 ) ) )
\r
2650 if( this.listChip[ num8 ].nチャンネル番号 == 0xc1 )
\r
2652 num10 = this.listChip[ num8 ].n発声位置 - num9;
\r
2656 if( ( this.e種別 == E種別.BMS ) || ( this.e種別 == E種別.BME ) )
\r
2660 while( ( num7 < this.listChip.Count ) && ( this.listChip[ num7 ].n発声位置 <= num9 ) )
\r
2662 if( this.listChip[ num7 ].nチャンネル番号 == 2 )
\r
2664 num4 = this.listChip[ num7 ].db実数値;
\r
2668 for( int num11 = 0; num11 < 100; num11++ )
\r
2670 int num12 = (int) ( ( (double) ( 0x180 * num11 ) ) / ( 4.0 * num4 ) );
\r
2671 if( ( num12 + num10 ) >= 0x180 )
\r
2675 if( ( ( num12 + num10 ) % 0x180 ) != 0 )
\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
2685 this.listChip.Sort();
\r
2688 Predicate<CChip> match = null;
\r
2689 for( int i = 0; i < this.listChip.Count; i++ )
\r
2691 int startIndex = i;
\r
2694 if( match == null )
\r
2696 match = delegate( CChip c )
\r
2698 return ( c.nチャンネル番号 == 0xc2 ) && ( c.n発声位置 == this.listChip[ i ].n発声位置 );
\r
2701 startIndex = this.listChip.FindIndex( startIndex, match );
\r
2702 if( startIndex == -1 )
\r
2706 if( this.listChip[ startIndex ].n整数値 == 1 )
\r
2710 if( this.listChip[ startIndex ].n整数値 == 2 )
\r
2716 if( ( ( this.listChip[ i ].nチャンネル番号 == 80 ) || ( this.listChip[ i ].nチャンネル番号 == 0x51 ) ) && ( this.listChip[ i ].n整数値 == 0x50f ) )
\r
2718 this.listChip[ i ].b可視 = flag;
\r
2721 double num14 = 120.0;
\r
2722 double num15 = 1.0;
\r
2726 foreach( CChip chip10 in this.listChip )
\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
2731 num16 = chip10.n発声位置;
\r
2732 num17 = chip10.n発声時刻ms;
\r
2735 num18 = chip10.n発声位置 / 0x180;
\r
2736 num26 = chip10.nチャンネル番号;
\r
2741 num16 = chip10.n発声位置;
\r
2742 num17 = chip10.n発声時刻ms;
\r
2743 num15 = chip10.db実数値;
\r
2748 num16 = chip10.n発声位置;
\r
2749 num17 = chip10.n発声時刻ms;
\r
2750 num14 = this.BASEBPM + chip10.n整数値;
\r
2776 num16 = chip10.n発声位置;
\r
2777 num17 = chip10.n発声時刻ms;
\r
2778 if( this.listBPM.ContainsKey( chip10.n整数値・内部番号 ) )
\r
2780 num14 = ( ( this.listBPM[ chip10.n整数値・内部番号 ].n表記上の番号 == 0 ) ? 0.0 : this.BASEBPM ) + this.listBPM[ chip10.n整数値・内部番号 ].dbBPM値;
\r
2786 if( this.listAVIPAN.ContainsKey( chip10.n整数値 ) )
\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
2799 if( this.listBGAPAN.ContainsKey( chip10.n整数値 ) )
\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
2806 if( this.db再生速度 > 0.0 )
\r
2808 foreach( CChip chip11 in this.listChip )
\r
2810 chip11.n発声時刻ms = (int) ( ( (double) chip11.n発声時刻ms ) / this.db再生速度 );
\r
2813 this.nBGMAdjust = 0;
\r
2814 this.t各自動再生音チップの再生時刻を変更する( nBGMAdjust );
\r
2815 for( int n = 0; n < 12; n++ )
\r
2817 this.n可視チップ数[ n ] = 0;
\r
2819 foreach( CChip chip12 in this.listChip )
\r
2821 int num24 = chip12.nチャンネル番号;
\r
2822 if( ( 0x11 <= num24 ) && ( num24 <= 0x1a ) )
\r
2824 this.n可視チップ数[ num24 - 0x11 ]++;
\r
2826 if( ( 0x20 <= num24 ) && ( num24 <= 0x27 ) )
\r
2828 this.n可視チップ数.Guitar++;
\r
2830 if( ( 160 <= num24 ) && ( num24 <= 0xa7 ) )
\r
2832 this.n可視チップ数.Bass++;
\r
2835 foreach( CChip chip13 in this.listChip )
\r
2837 if( ( chip13.bWAVを使うチャンネルである && this.listWAV.ContainsKey( chip13.n整数値・内部番号 ) ) && !this.listWAV[ chip13.n整数値・内部番号 ].listこのWAVを使用するチャンネル番号の集合.Contains( chip13.nチャンネル番号 ) )
\r
2839 this.listWAV[ chip13.n整数値・内部番号 ].listこのWAVを使用するチャンネル番号の集合.Add( chip13.nチャンネル番号 );
\r
2842 byte[] buffer = null;
\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
2850 catch( Exception exception )
\r
2852 Trace.TraceError( exception.Message );
\r
2853 Trace.TraceError( "DTXのハッシュの計算に失敗しました。({0})", new object[] { this.strファイル名の絶対パス } );
\r
2855 if( buffer != null )
\r
2857 byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash( buffer );
\r
2858 StringBuilder builder4 = new StringBuilder();
\r
2859 foreach( byte num25 in buffer2 )
\r
2861 builder4.Append( num25.ToString( "x2" ) );
\r
2863 this.strハッシュofDTXファイル = builder4.ToString();
\r
2867 this.strハッシュofDTXファイル = "00000000000000000000000000000000";
\r
2869 if( CDTXMania.ConfigIni.bLogDTX詳細ログ出力 )
\r
2871 foreach( CWAV cwav3 in this.listWAV.Values )
\r
2873 Trace.TraceInformation( cwav3.ToString() );
\r
2875 foreach( CAVI cavi in this.listAVI.Values )
\r
2877 Trace.TraceInformation( cavi.ToString() );
\r
2879 foreach( CAVIPAN cavipan in this.listAVIPAN.Values )
\r
2881 Trace.TraceInformation( cavipan.ToString() );
\r
2883 foreach( CBGA cbga in this.listBGA.Values )
\r
2885 Trace.TraceInformation( cbga.ToString() );
\r
2887 foreach( CBGAPAN cbgapan in this.listBGAPAN.Values )
\r
2889 Trace.TraceInformation( cbgapan.ToString() );
\r
2891 foreach( CBMP cbmp in this.listBMP.Values )
\r
2893 Trace.TraceInformation( cbmp.ToString() );
\r
2895 foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )
\r
2897 Trace.TraceInformation( cbmptex.ToString() );
\r
2899 foreach( CBPM cbpm3 in this.listBPM.Values )
\r
2901 Trace.TraceInformation( cbpm3.ToString() );
\r
2903 foreach( CChip chip14 in this.listChip )
\r
2905 Trace.TraceInformation( chip14.ToString() );
\r
2916 public override void On活性化()
\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
2929 public override void On非活性化()
\r
2931 if( this.listWAV != null )
\r
2933 foreach( CWAV cwav in this.listWAV.Values )
\r
2937 this.listWAV = null;
\r
2939 if( this.listBMP != null )
\r
2941 foreach( CBMP cbmp in this.listBMP.Values )
\r
2945 this.listBMP = null;
\r
2947 if( this.listBMPTEX != null )
\r
2949 foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )
\r
2951 cbmptex.Dispose();
\r
2953 this.listBMPTEX = null;
\r
2955 if( this.listAVI != null )
\r
2957 foreach( CAVI cavi in this.listAVI.Values )
\r
2961 this.listAVI = null;
\r
2963 if( this.listBPM != null )
\r
2965 this.listBPM.Clear();
\r
2966 this.listBPM = null;
\r
2968 if( this.listBGAPAN != null )
\r
2970 this.listBGAPAN.Clear();
\r
2971 this.listBGAPAN = null;
\r
2973 if( this.listBGA != null )
\r
2975 this.listBGA.Clear();
\r
2976 this.listBGA = null;
\r
2978 if( this.listAVIPAN != null )
\r
2980 this.listAVIPAN.Clear();
\r
2981 this.listAVIPAN = null;
\r
2983 if( this.listChip != null )
\r
2985 this.listChip.Clear();
\r
2989 public override void OnManagedリソースの作成()
\r
2991 if( !base.b活性化してない )
\r
2993 this.tBMP_BMPTEXの読み込み();
\r
2995 base.OnManagedリソースの作成();
\r
2998 public override void OnManagedリソースの解放()
\r
3000 if( !base.b活性化してない )
\r
3002 if( this.listBMP != null )
\r
3004 foreach( CBMP cbmp in this.listBMP.Values )
\r
3009 if( this.listBMPTEX != null )
\r
3011 foreach( CBMPTEX cbmptex in this.listBMPTEX.Values )
\r
3013 cbmptex.Dispose();
\r
3016 if( this.listAVI != null )
\r
3018 foreach( CAVI cavi in this.listAVI.Values )
\r
3023 base.OnManagedリソースの解放();
\r
3030 #region [ private ]
\r
3031 //-----------------
\r
3032 [StructLayout( LayoutKind.Sequential )]
\r
3033 private struct STGDAPARAM
\r
3039 private readonly STGDAPARAM[] stGDAParam;
\r
3040 private bool bヘッダのみ;
\r
3041 private Stack<bool> bstackIFからENDIFをスキップする;
\r
3043 private int n現在の行数;
\r
3044 private int n現在の乱数;
\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
3057 private bool t入力・コマンド文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )
\r
3059 if( this.t入力・空白をスキップする( ref ce ) )
\r
3061 while( ( ( ce.Current != ':' ) && ( ce.Current != ' ' ) ) && ( ( ce.Current != ';' ) && ( ce.Current != '\n' ) ) )
\r
3063 sb文字列.Append( ce.Current );
\r
3064 if( !ce.MoveNext() )
\r
3069 if( ce.Current == ':' )
\r
3071 if( !ce.MoveNext() )
\r
3075 if( !this.t入力・空白をスキップする( ref ce ) )
\r
3084 private bool t入力・コメントをスキップする( ref CharEnumerator ce )
\r
3086 while( ce.Current != '\n' )
\r
3088 if( !ce.MoveNext() )
\r
3093 return ce.MoveNext();
\r
3095 private bool t入力・コメント文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )
\r
3097 if( ce.Current != ';' )
\r
3101 if( ce.MoveNext() )
\r
3103 while( ce.Current != '\n' )
\r
3105 sb文字列.Append( ce.Current );
\r
3106 if( !ce.MoveNext() )
\r
3115 private void t入力・パラメータ食い込みチェック( string strコマンド名, ref string strコマンド, ref string strパラメータ )
\r
3117 if( ( strコマンド.Length > strコマンド名.Length ) && strコマンド.StartsWith( strコマンド名, StringComparison.OrdinalIgnoreCase ) )
\r
3119 strパラメータ = strコマンド.Substring( strコマンド名.Length ).Trim();
\r
3120 strコマンド = strコマンド.Substring( 0, strコマンド名.Length );
\r
3123 private bool t入力・パラメータ文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )
\r
3125 if( this.t入力・空白をスキップする( ref ce ) )
\r
3127 while( ( ce.Current != '\n' ) && ( ce.Current != ';' ) )
\r
3129 sb文字列.Append( ce.Current );
\r
3130 if( !ce.MoveNext() )
\r
3139 private bool t入力・空白と改行をスキップする( ref CharEnumerator ce )
\r
3141 while( ( ce.Current == ' ' ) || ( ce.Current == '\n' ) )
\r
3143 if( ce.Current == '\n' )
\r
3147 if( !ce.MoveNext() )
\r
3154 private bool t入力・空白をスキップする( ref CharEnumerator ce )
\r
3156 while( ce.Current == ' ' )
\r
3158 if( !ce.MoveNext() )
\r
3165 private void t入力・行解析( ref StringBuilder sbコマンド, ref StringBuilder sbパラメータ, ref StringBuilder sbコメント )
\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
3172 this.t入力・パラメータ食い込みチェック( "IF", ref str, ref str2 );
\r
3173 if( this.bstackIFからENDIFをスキップする.Count == 0xff )
\r
3175 Trace.TraceWarning( "#IF の入れ子の数が 255 を超えました。この #IF を無視します。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3177 else if( this.bstackIFからENDIFをスキップする.Peek() )
\r
3179 this.bstackIFからENDIFをスキップする.Push( true );
\r
3184 if( !int.TryParse( str2, out result ) )
\r
3188 this.bstackIFからENDIFをスキップする.Push( result != this.n現在の乱数 );
\r
3191 else if( str.StartsWith( "ENDIF", StringComparison.OrdinalIgnoreCase ) )
\r
3193 this.t入力・パラメータ食い込みチェック( "ENDIF", ref str, ref str2 );
\r
3194 if( this.bstackIFからENDIFをスキップする.Count > 1 )
\r
3196 this.bstackIFからENDIFをスキップする.Pop();
\r
3200 Trace.TraceWarning( "#ENDIF に対応する #IF がありません。この #ENDIF を無視します。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3203 else if( !this.bstackIFからENDIFをスキップする.Peek() )
\r
3205 if( str.StartsWith( "PATH_WAV", StringComparison.OrdinalIgnoreCase ) )
\r
3207 this.t入力・パラメータ食い込みチェック( "PATH_WAV", ref str, ref str2 );
\r
3208 this.PATH_WAV = str2;
\r
3210 else if( str.StartsWith( "TITLE", StringComparison.OrdinalIgnoreCase ) )
\r
3212 this.t入力・パラメータ食い込みチェック( "TITLE", ref str, ref str2 );
\r
3213 this.TITLE = str2;
\r
3215 else if( str.StartsWith( "ARTIST", StringComparison.OrdinalIgnoreCase ) )
\r
3217 this.t入力・パラメータ食い込みチェック( "ARTIST", ref str, ref str2 );
\r
3218 this.ARTIST = str2;
\r
3220 else if( str.StartsWith( "COMMENT", StringComparison.OrdinalIgnoreCase ) )
\r
3222 this.t入力・パラメータ食い込みチェック( "COMMENT", ref str, ref str2 );
\r
3223 this.COMMENT = str2;
\r
3225 else if( str.StartsWith( "DLEVEL", StringComparison.OrdinalIgnoreCase ) || str.StartsWith( "PLAYLEVEL", StringComparison.OrdinalIgnoreCase ) )
\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
3236 else if( num2 > 100 )
\r
3240 this.LEVEL.Drums = num2;
\r
3243 else if( str.StartsWith( "GLEVEL", StringComparison.OrdinalIgnoreCase ) )
\r
3246 this.t入力・パラメータ食い込みチェック( "GLEVEL", ref str, ref str2 );
\r
3247 if( int.TryParse( str2, out num3 ) )
\r
3253 else if( num3 > 100 )
\r
3257 this.LEVEL.Guitar = num3;
\r
3260 else if( str.StartsWith( "BLEVEL", StringComparison.OrdinalIgnoreCase ) )
\r
3263 this.t入力・パラメータ食い込みチェック( "BLEVEL", ref str, ref str2 );
\r
3264 if( int.TryParse( str2, out num4 ) )
\r
3270 else if( num4 > 100 )
\r
3274 this.LEVEL.Bass = num4;
\r
3277 else if( str.StartsWith( "GENRE", StringComparison.OrdinalIgnoreCase ) )
\r
3279 this.t入力・パラメータ食い込みチェック( "GENRE", ref str, ref str2 );
\r
3280 this.GENRE = str2;
\r
3284 if( str.StartsWith( "HIDDENLEVEL", StringComparison.OrdinalIgnoreCase ) )
\r
3286 this.t入力・パラメータ食い込みチェック( "HIDDENLEVEL", ref str, ref str2 );
\r
3287 this.HIDDENLEVEL = str2.ToLower().Equals( "on" );
\r
3289 if( str.StartsWith( "STAGEFILE", StringComparison.OrdinalIgnoreCase ) )
\r
3291 this.t入力・パラメータ食い込みチェック( "STAGEFILE", ref str, ref str2 );
\r
3292 this.STAGEFILE = str2;
\r
3294 else if( str.StartsWith( "PREVIEW", StringComparison.OrdinalIgnoreCase ) )
\r
3296 this.t入力・パラメータ食い込みチェック( "PREVIEW", ref str, ref str2 );
\r
3297 this.PREVIEW = str2;
\r
3299 else if( str.StartsWith( "PREIMAGE", StringComparison.OrdinalIgnoreCase ) )
\r
3301 this.t入力・パラメータ食い込みチェック( "PREIMAGE", ref str, ref str2 );
\r
3302 this.PREIMAGE = str2;
\r
3304 else if( str.StartsWith( "PREMOVIE", StringComparison.OrdinalIgnoreCase ) )
\r
3306 this.t入力・パラメータ食い込みチェック( "PREMOVIE", ref str, ref str2 );
\r
3307 this.PREMOVIE = str2;
\r
3309 else if( str.StartsWith( "BACKGROUND_GR", StringComparison.OrdinalIgnoreCase ) )
\r
3311 this.t入力・パラメータ食い込みチェック( "BACKGROUND_GR", ref str, ref str2 );
\r
3312 this.BACKGROUND_GR = str2;
\r
3314 else if( str.StartsWith( "BACKGROUND", StringComparison.OrdinalIgnoreCase ) || str.StartsWith( "WALL", StringComparison.OrdinalIgnoreCase ) )
\r
3316 this.t入力・パラメータ食い込みチェック( "BACKGROUND", ref str, ref str2 );
\r
3317 this.t入力・パラメータ食い込みチェック( "WALL", ref str, ref str2 );
\r
3318 this.BACKGROUND = str2;
\r
3322 if( str.StartsWith( "RANDOM", StringComparison.OrdinalIgnoreCase ) )
\r
3324 this.t入力・パラメータ食い込みチェック( "RANDOM", ref str, ref str2 );
\r
3326 if( !int.TryParse( str2, out num5 ) )
\r
3330 this.n現在の乱数 = CDTXMania.Random.Next( num5 ) + 1;
\r
3332 if( str.StartsWith( "SOUND_NOWLOADING", StringComparison.OrdinalIgnoreCase ) )
\r
3334 this.t入力・パラメータ食い込みチェック( "SOUND_NOWLOADING", ref str, ref str2 );
\r
3335 this.SOUND_NOWLOADING = str2;
\r
3337 else if( !this.bヘッダのみ )
\r
3339 if( str.StartsWith( "PANEL", StringComparison.OrdinalIgnoreCase ) )
\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
3346 } // 数値ならPAN ELとみなす
\r
3349 if( str.StartsWith( "MIDIFILE", StringComparison.OrdinalIgnoreCase ) )
\r
3351 this.t入力・パラメータ食い込みチェック( "MIDIFILE", ref str, ref str2 );
\r
3352 this.MIDIFILE = str2;
\r
3356 if( str.StartsWith( "MIDINOTE", StringComparison.OrdinalIgnoreCase ) )
\r
3358 this.t入力・パラメータ食い込みチェック( "MIDINOTE", ref str, ref str2 );
\r
3359 this.MIDINOTE = str2.ToLower().Equals( "on" );
\r
3361 if( str.StartsWith( "BLACKCOLORKEY", StringComparison.OrdinalIgnoreCase ) )
\r
3363 this.t入力・パラメータ食い込みチェック( "BLACKCOLORKEY", ref str, ref str2 );
\r
3364 this.BLACKCOLORKEY = str2.ToLower().Equals( "on" );
\r
3366 if( str.StartsWith( "BASEBPM", StringComparison.OrdinalIgnoreCase ) )
\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
3372 this.BASEBPM = num6;
\r
3375 else if( str.StartsWith( "SOUND_STAGEFAILED", StringComparison.OrdinalIgnoreCase ) )
\r
3377 this.t入力・パラメータ食い込みチェック( "SOUND_STAGEFAILED", ref str, ref str2 );
\r
3378 this.SOUND_STAGEFAILED = str2;
\r
3380 else if( str.StartsWith( "SOUND_FULLCOMBO", StringComparison.OrdinalIgnoreCase ) )
\r
3382 this.t入力・パラメータ食い込みチェック( "SOUND_FULLCOMBO", ref str, ref str2 );
\r
3383 this.SOUND_FULLCOMBO = str2;
\r
3385 else if( str.StartsWith( "SOUND_AUDIENCE", StringComparison.OrdinalIgnoreCase ) )
\r
3387 this.t入力・パラメータ食い込みチェック( "SOUND_AUDIENCE", ref str, ref str2 );
\r
3388 this.SOUND_AUDIENCE = str2;
\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
3392 this.t入力・行解析・チップ配置( str, str2, str3 );
\r
3396 int xx = 0; // #23885 2010.12.12 yyagi: dummy line to exit parsing the line
\r
3402 private bool t入力・行解析・AVI_VIDEO( string strコマンド, string strパラメータ, string strコメント )
\r
3404 if( strコマンド.StartsWith( "AVI", StringComparison.OrdinalIgnoreCase ) )
\r
3406 strコマンド = strコマンド.Substring( 3 );
\r
3408 else if( strコマンド.StartsWith( "VIDEO", StringComparison.OrdinalIgnoreCase ) )
\r
3410 strコマンド = strコマンド.Substring( 5 );
\r
3416 if( strコマンド.Length < 2 )
\r
3420 int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
3421 if( ( key < 0 ) || ( key >= 36 * 36 ) )
\r
3423 Trace.TraceError( "AVI(VIDEO)番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3426 CAVI cavi = new CAVI();
\r
3428 cavi.strファイル名 = strパラメータ;
\r
3429 cavi.strコメント文 = strコメント;
\r
3430 if( this.listAVI.ContainsKey( key ) )
\r
3432 this.listAVI.Remove( key );
\r
3434 this.listAVI.Add( key, cavi );
\r
3437 private bool t入力・行解析・AVIPAN( string strコマンド, string strパラメータ, string strコメント )
\r
3439 if( strコマンド.StartsWith( "AVIPAN", StringComparison.OrdinalIgnoreCase ) )
\r
3441 strコマンド = strコマンド.Substring( 6 );
\r
3447 if( strコマンド.Length < 2 )
\r
3451 int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
3452 if( ( key < 0 ) || ( key >= 36 * 36 ) )
\r
3454 Trace.TraceError( "AVIPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\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
3462 Trace.TraceError( "AVIPAN: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3467 if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )
\r
3469 Trace.TraceError( "AVIPAN: {2}番目の数(AVI番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3472 cavipan.nAVI番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );
\r
3473 if( ( cavipan.nAVI番号 < 1 ) || ( cavipan.nAVI番号 >= 36 * 36 ) )
\r
3475 Trace.TraceError( "AVIPAN: {2}番目の数(AVI番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3480 if( !int.TryParse( strArray[ index ], out result ) )
\r
3482 Trace.TraceError( "AVIPAN: {2}番目の引数(開始転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3485 cavipan.sz開始サイズ.Width = result;
\r
3488 if( !int.TryParse( strArray[ index ], out result ) )
\r
3490 Trace.TraceError( "AVIPAN: {2}番目の引数(開始転送サイズ・高さ)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3493 cavipan.sz開始サイズ.Height = result;
\r
3496 if( !int.TryParse( strArray[ index ], out result ) )
\r
3498 Trace.TraceError( "AVIPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3501 cavipan.sz終了サイズ.Width = result;
\r
3504 if( !int.TryParse( strArray[ index ], out result ) )
\r
3506 Trace.TraceError( "AVIPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3509 cavipan.sz終了サイズ.Height = result;
\r
3512 if( !int.TryParse( strArray[ index ], out result ) )
\r
3514 Trace.TraceError( "AVIPAN: {2}番目の引数(画像側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3517 cavipan.pt動画側開始位置.X = result;
\r
3520 if( !int.TryParse( strArray[ index ], out result ) )
\r
3522 Trace.TraceError( "AVIPAN: {2}番目の引数(画像側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3525 cavipan.pt動画側開始位置.Y = result;
\r
3528 if( !int.TryParse( strArray[ index ], out result ) )
\r
3530 Trace.TraceError( "AVIPAN: {2}番目の引数(画像側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3533 cavipan.pt動画側終了位置.X = result;
\r
3536 if( !int.TryParse( strArray[ index ], out result ) )
\r
3538 Trace.TraceError( "AVIPAN: {2}番目の引数(画像側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3541 cavipan.pt動画側終了位置.Y = result;
\r
3544 if( !int.TryParse( strArray[ index ], out result ) )
\r
3546 Trace.TraceError( "AVIPAN: {2}番目の引数(表示側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3549 cavipan.pt表示側開始位置.X = result;
\r
3552 if( !int.TryParse( strArray[ index ], out result ) )
\r
3554 Trace.TraceError( "AVIPAN: {2}番目の引数(表示側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3557 cavipan.pt表示側開始位置.Y = result;
\r
3560 if( !int.TryParse( strArray[ index ], out result ) )
\r
3562 Trace.TraceError( "AVIPAN: {2}番目の引数(表示側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3565 cavipan.pt表示側終了位置.X = result;
\r
3568 if( !int.TryParse( strArray[ index ], out result ) )
\r
3570 Trace.TraceError( "AVIPAN: {2}番目の引数(表示側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3573 cavipan.pt表示側終了位置.Y = result;
\r
3576 if( !int.TryParse( strArray[ index ], out result ) )
\r
3578 Trace.TraceError( "AVIPAN: {2}番目の引数(移動時間)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3585 cavipan.n移動時間ct = result;
\r
3587 if( this.listAVIPAN.ContainsKey( key ) )
\r
3589 this.listAVIPAN.Remove( key );
\r
3591 this.listAVIPAN.Add( key, cavipan );
\r
3594 private bool t入力・行解析・BGA( string strコマンド, string strパラメータ, string strコメント )
\r
3596 if( strコマンド.StartsWith( "BGA", StringComparison.OrdinalIgnoreCase ) )
\r
3598 strコマンド = strコマンド.Substring( 3 );
\r
3604 if( strコマンド.Length < 2 )
\r
3608 int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
3609 if( ( key < 0 ) || ( key >= 36 * 36 ) )
\r
3611 Trace.TraceError( "BGA番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3614 CBGA cbga = new CBGA();
\r
3616 string[] strArray = strパラメータ.Split( new char[] { ' ', ',', '(', ')', '[', ']', 'x', '|' }, StringSplitOptions.RemoveEmptyEntries );
\r
3617 if( strArray.Length < 7 )
\r
3619 Trace.TraceError( "BGA: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3624 if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )
\r
3626 Trace.TraceError( "BGA: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3629 cbga.nBMP番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );
\r
3630 if( ( cbga.nBMP番号 < 1 ) || ( cbga.nBMP番号 >= 36 * 36 ) )
\r
3632 Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3637 if( !int.TryParse( strArray[ index ], out result ) )
\r
3639 Trace.TraceError( "BGA: {2}番目の引数(画像側位置1・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3642 cbga.pt画像側左上座標.X = result;
\r
3645 if( !int.TryParse( strArray[ index ], out result ) )
\r
3647 Trace.TraceError( "BGA: {2}番目の引数(画像側位置1・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3650 cbga.pt画像側左上座標.Y = result;
\r
3653 if( !int.TryParse( strArray[ index ], out result ) )
\r
3655 Trace.TraceError( "BGA: {2}番目の引数(画像側座標2・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3658 cbga.pt画像側右下座標.X = result;
\r
3661 if( !int.TryParse( strArray[ index ], out result ) )
\r
3663 Trace.TraceError( "BGA: {2}番目の引数(画像側座標2・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3666 cbga.pt画像側右下座標.Y = result;
\r
3669 if( !int.TryParse( strArray[ index ], out result ) )
\r
3671 Trace.TraceError( "BGA: {2}番目の引数(表示位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3674 cbga.pt表示座標.X = result;
\r
3677 if( !int.TryParse( strArray[ index ], out result ) )
\r
3679 Trace.TraceError( "BGA: {2}番目の引数(表示位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3682 cbga.pt表示座標.Y = result;
\r
3684 if( cbga.pt画像側左上座標.X > cbga.pt画像側右下座標.X )
\r
3686 result = cbga.pt画像側左上座標.X;
\r
3687 cbga.pt画像側左上座標.X = cbga.pt画像側右下座標.X;
\r
3688 cbga.pt画像側右下座標.X = result;
\r
3690 if( cbga.pt画像側左上座標.Y > cbga.pt画像側右下座標.Y )
\r
3692 result = cbga.pt画像側左上座標.Y;
\r
3693 cbga.pt画像側左上座標.Y = cbga.pt画像側右下座標.Y;
\r
3694 cbga.pt画像側右下座標.Y = result;
\r
3696 if( this.listBGA.ContainsKey( key ) )
\r
3698 this.listBGA.Remove( key );
\r
3700 this.listBGA.Add( key, cbga );
\r
3703 private bool t入力・行解析・BGAPAN( string strコマンド, string strパラメータ, string strコメント )
\r
3705 if( strコマンド.StartsWith( "BGAPAN", StringComparison.OrdinalIgnoreCase ) )
\r
3707 strコマンド = strコマンド.Substring( 6 );
\r
3713 if( strコマンド.Length < 2 )
\r
3717 int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
3718 if( ( key < 0 ) || ( key >= 36 * 36 ) )
\r
3720 Trace.TraceError( "BGAPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\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
3728 Trace.TraceError( "BGAPAN: 引数が足りません。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3733 if( ( strArray[ index ].Length == 0 ) || ( strArray[ index ].Length > 2 ) )
\r
3735 Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3738 cbgapan.nBMP番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strArray[ index ] );
\r
3739 if( ( cbgapan.nBMP番号 < 1 ) || ( cbgapan.nBMP番号 >= 36 * 36 ) )
\r
3741 Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3746 if( !int.TryParse( strArray[ index ], out result ) )
\r
3748 Trace.TraceError( "BGAPAN: {2}番目の引数(開始転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3751 cbgapan.sz開始サイズ.Width = result;
\r
3754 if( !int.TryParse( strArray[ index ], out result ) )
\r
3756 Trace.TraceError( "BGAPAN: {2}番目の引数(開始転送サイズ・高さ)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3759 cbgapan.sz開始サイズ.Height = result;
\r
3762 if( !int.TryParse( strArray[ index ], out result ) )
\r
3764 Trace.TraceError( "BGAPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3767 cbgapan.sz終了サイズ.Width = result;
\r
3770 if( !int.TryParse( strArray[ index ], out result ) )
\r
3772 Trace.TraceError( "BGAPAN: {2}番目の引数(終了転送サイズ・幅)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3775 cbgapan.sz終了サイズ.Height = result;
\r
3778 if( !int.TryParse( strArray[ index ], out result ) )
\r
3780 Trace.TraceError( "BGAPAN: {2}番目の引数(画像側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3783 cbgapan.pt画像側開始位置.X = result;
\r
3786 if( !int.TryParse( strArray[ index ], out result ) )
\r
3788 Trace.TraceError( "BGAPAN: {2}番目の引数(画像側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3791 cbgapan.pt画像側開始位置.Y = result;
\r
3794 if( !int.TryParse( strArray[ index ], out result ) )
\r
3796 Trace.TraceError( "BGAPAN: {2}番目の引数(画像側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3799 cbgapan.pt画像側終了位置.X = result;
\r
3802 if( !int.TryParse( strArray[ index ], out result ) )
\r
3804 Trace.TraceError( "BGAPAN: {2}番目の引数(画像側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3807 cbgapan.pt画像側終了位置.Y = result;
\r
3810 if( !int.TryParse( strArray[ index ], out result ) )
\r
3812 Trace.TraceError( "BGAPAN: {2}番目の引数(表示側開始位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3815 cbgapan.pt表示側開始位置.X = result;
\r
3818 if( !int.TryParse( strArray[ index ], out result ) )
\r
3820 Trace.TraceError( "BGAPAN: {2}番目の引数(表示側開始位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3823 cbgapan.pt表示側開始位置.Y = result;
\r
3826 if( !int.TryParse( strArray[ index ], out result ) )
\r
3828 Trace.TraceError( "BGAPAN: {2}番目の引数(表示側終了位置・X)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3831 cbgapan.pt表示側終了位置.X = result;
\r
3834 if( !int.TryParse( strArray[ index ], out result ) )
\r
3836 Trace.TraceError( "BGAPAN: {2}番目の引数(表示側終了位置・Y)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3839 cbgapan.pt表示側終了位置.Y = result;
\r
3842 if( !int.TryParse( strArray[ index ], out result ) )
\r
3844 Trace.TraceError( "BGAPAN: {2}番目の引数(移動時間)が異常です。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数, index + 1 } );
\r
3851 cbgapan.n移動時間ct = result;
\r
3853 if( this.listBGAPAN.ContainsKey( key ) )
\r
3855 this.listBGAPAN.Remove( key );
\r
3857 this.listBGAPAN.Add( key, cbgapan );
\r
3860 private bool t入力・行解析・BMP( string strコマンド, string strパラメータ, string strコメント )
\r
3862 if( strコマンド.StartsWith( "BMP", StringComparison.OrdinalIgnoreCase ) )
\r
3864 strコマンド = strコマンド.Substring( 3 );
\r
3871 if( strコマンド.Length < 2 )
\r
3877 key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
3878 if( ( key < 0 ) || ( key >= 36 * 36 ) )
\r
3880 Trace.TraceError( "BMP番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3884 CBMP cbmp = new CBMP();
\r
3886 cbmp.strファイル名 = strパラメータ;
\r
3887 cbmp.strコメント文 = strコメント;
\r
3888 if( this.listBMP.ContainsKey( key ) )
\r
3890 this.listBMP.Remove( key );
\r
3892 this.listBMP.Add( key, cbmp );
\r
3895 private bool t入力・行解析・BMPTEX( string strコマンド, string strパラメータ, string strコメント )
\r
3897 if( strコマンド.StartsWith( "BMPTEX", StringComparison.OrdinalIgnoreCase ) )
\r
3899 strコマンド = strコマンド.Substring( 6 );
\r
3905 if( strコマンド.Length < 2 )
\r
3909 int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
3910 if( ( key < 0 ) || ( key >= 36 * 36 ) )
\r
3912 Trace.TraceError( "BMPTEX番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\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
3921 this.listBMPTEX.Remove( key );
\r
3923 this.listBMPTEX.Add( key, cbmptex );
\r
3926 private bool t入力・行解析・BPM_BPMzz( string strコマンド, string strパラメータ, string strコメント )
\r
3928 if( strコマンド.StartsWith( "BPM", StringComparison.OrdinalIgnoreCase ) )
\r
3930 strコマンド = strコマンド.Substring( 3 );
\r
3937 if( strコマンド.Length < 2 )
\r
3943 index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
3944 if( ( index < 0 ) || ( index >= 36 * 36 ) )
\r
3946 Trace.TraceError( "BPM番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
3950 double result = 0.0;
\r
3951 if( !double.TryParse( strパラメータ, out result ) )
\r
3955 if( result <= 0.0 )
\r
3961 this.BPM = result;
\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
3970 for( int i = 0; i < this.listChip.Count; i++ )
\r
3972 CChip chip = this.listChip[ i ];
\r
3973 if( chip.bBPMチップである && ( chip.n整数値・内部番号 == -index ) )
\r
3975 chip.n整数値・内部番号 = this.n内部番号BPM1to;
\r
3979 this.n無限管理BPM[ index ] = this.n内部番号BPM1to;
\r
3980 this.n内部番号BPM1to++;
\r
3983 private bool t入力・行解析・RESULTIMAGE( string strコマンド, string strパラメータ, string strコメント )
\r
3985 if( strコマンド.StartsWith( "RESULTIMAGE", StringComparison.OrdinalIgnoreCase ) )
\r
3987 strコマンド = strコマンド.Substring( 11 );
\r
3993 if( strコマンド.Length < 2 )
\r
3995 for( int i = 0; i < 7; i++ )
\r
3997 if( this.nRESULTIMAGE用優先順位[ i ] == 0 )
\r
3999 this.RESULTIMAGE[ i ] = strパラメータ.Trim();
\r
4005 switch( strコマンド.ToUpper() )
\r
4008 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 0, strパラメータ );
\r
4012 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 1, strパラメータ );
\r
4016 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 2, strパラメータ );
\r
4020 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 3, strパラメータ );
\r
4024 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 4, strパラメータ );
\r
4028 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 5, strパラメータ );
\r
4032 this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 6, strパラメータ );
\r
4039 private void t入力・行解析・RESULTIMAGE・ファイルを設定する( int nランク0to6, string strファイル名 )
\r
4041 if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )
\r
4043 for( int i = nランク0to6; i >= 0; i-- )
\r
4045 if( this.nRESULTIMAGE用優先順位[ i ] < ( 7 - nランク0to6 ) )
\r
4047 this.nRESULTIMAGE用優先順位[ i ] = 7 - nランク0to6;
\r
4048 this.RESULTIMAGE[ i ] = strファイル名;
\r
4053 private bool t入力・行解析・RESULTMOVIE( string strコマンド, string strパラメータ, string strコメント )
\r
4055 if( strコマンド.StartsWith( "RESULTMOVIE", StringComparison.OrdinalIgnoreCase ) )
\r
4057 strコマンド = strコマンド.Substring( 11 );
\r
4063 if( strコマンド.Length < 2 )
\r
4065 for( int i = 0; i < 7; i++ )
\r
4067 if( this.nRESULTMOVIE用優先順位[ i ] == 0 )
\r
4069 this.RESULTMOVIE[ i ] = strパラメータ.Trim();
\r
4075 switch( strコマンド.ToUpper() )
\r
4078 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 0, strパラメータ );
\r
4082 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 1, strパラメータ );
\r
4086 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 2, strパラメータ );
\r
4090 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 3, strパラメータ );
\r
4094 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 4, strパラメータ );
\r
4098 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 5, strパラメータ );
\r
4102 this.t入力・行解析・RESULTMOVIE・ファイルを設定する( 6, strパラメータ );
\r
4109 private void t入力・行解析・RESULTMOVIE・ファイルを設定する( int nランク0to6, string strファイル名 )
\r
4111 if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )
\r
4113 for( int i = nランク0to6; i >= 0; i-- )
\r
4115 if( this.nRESULTMOVIE用優先順位[ i ] < ( 7 - nランク0to6 ) )
\r
4117 this.nRESULTMOVIE用優先順位[ i ] = 7 - nランク0to6;
\r
4118 this.RESULTMOVIE[ i ] = strファイル名;
\r
4123 private bool t入力・行解析・RESULTSOUND( string strコマンド, string strパラメータ, string strコメント )
\r
4125 if( strコマンド.StartsWith( "RESULTSOUND", StringComparison.OrdinalIgnoreCase ) )
\r
4127 strコマンド = strコマンド.Substring( 11 );
\r
4133 if( strコマンド.Length < 2 )
\r
4135 for( int i = 0; i < 7; i++ )
\r
4137 if( this.nRESULTSOUND用優先順位[ i ] == 0 )
\r
4139 this.RESULTSOUND[ i ] = strパラメータ.Trim();
\r
4145 switch( strコマンド.ToUpper() )
\r
4148 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 0, strパラメータ );
\r
4152 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 1, strパラメータ );
\r
4156 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 2, strパラメータ );
\r
4160 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 3, strパラメータ );
\r
4164 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 4, strパラメータ );
\r
4168 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 5, strパラメータ );
\r
4172 this.t入力・行解析・RESULTSOUND・ファイルを設定する( 6, strパラメータ );
\r
4179 private void t入力・行解析・RESULTSOUND・ファイルを設定する( int nランク0to6, string strファイル名 )
\r
4181 if( ( nランク0to6 >= 0 ) && ( nランク0to6 <= 6 ) )
\r
4183 for( int i = nランク0to6; i >= 0; i-- )
\r
4185 if( this.nRESULTSOUND用優先順位[ i ] < ( 7 - nランク0to6 ) )
\r
4187 this.nRESULTSOUND用優先順位[ i ] = 7 - nランク0to6;
\r
4188 this.RESULTSOUND[ i ] = strファイル名;
\r
4193 private bool t入力・行解析・SIZE( string strコマンド, string strパラメータ, string strコメント )
\r
4196 if( strコマンド.StartsWith( "SIZE", StringComparison.OrdinalIgnoreCase ) )
\r
4198 strコマンド = strコマンド.Substring( 4 );
\r
4204 if( strコマンド.Length < 2 )
\r
4208 int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
4209 if( ( index < 0 ) || ( index >= 36 * 36 ) )
\r
4211 Trace.TraceError( "SIZE番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
4214 if( int.TryParse( strパラメータ, out num2 ) )
\r
4220 else if( num2 > 100 )
\r
4224 if( this.n無限管理SIZE[ index ] == -index )
\r
4226 foreach( CWAV cwav in this.listWAV.Values )
\r
4228 if( cwav.nチップサイズ == -index )
\r
4230 cwav.nチップサイズ = num2;
\r
4234 this.n無限管理SIZE[ index ] = num2;
\r
4238 private bool t入力・行解析・WAV( string strコマンド, string strパラメータ, string strコメント )
\r
4240 if( strコマンド.StartsWith( "WAV", StringComparison.OrdinalIgnoreCase ) )
\r
4242 strコマンド = strコマンド.Substring( 3 );
\r
4248 if( strコマンド.Length < 2 )
\r
4252 int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
4253 if( ( index < 0 ) || ( index >= 36 * 36 ) )
\r
4255 Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\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
4269 for( int i = 0; i < this.listChip.Count; i++ )
\r
4271 CChip chip = this.listChip[ i ];
\r
4272 if( chip.bWAVを使うチャンネルである && ( chip.n整数値・内部番号 == -index ) )
\r
4274 chip.n整数値・内部番号 = this.n内部番号WAV1to;
\r
4278 this.n無限管理WAV[ index ] = this.n内部番号WAV1to;
\r
4279 this.n内部番号WAV1to++;
\r
4282 private bool t入力・行解析・WAVPAN_PAN( string strコマンド, string strパラメータ, string strコメント )
\r
4285 if( strコマンド.StartsWith( "WAVPAN", StringComparison.OrdinalIgnoreCase ) )
\r
4287 strコマンド = strコマンド.Substring(6);
\r
4289 else if( strコマンド.StartsWith( "PAN", StringComparison.OrdinalIgnoreCase ) )
\r
4291 strコマンド = strコマンド.Substring(3);
\r
4297 if( strコマンド.Length < 2 )
\r
4301 int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
4302 if( ( index < 0 ) || ( index >= 36 * 36 ) )
\r
4304 Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
4307 if( int.TryParse( strパラメータ, out num2 ) )
\r
4313 else if( num2 >= 100 )
\r
4317 if( this.n無限管理PAN[ index ] == ( -10000 - index ) )
\r
4319 foreach( CWAV cwav in this.listWAV.Values )
\r
4321 if( cwav.n位置 == ( -10000 - index ) )
\r
4327 this.n無限管理PAN[ index ] = num2;
\r
4331 private bool t入力・行解析・WAVVOL_VOLUME( string strコマンド, string strパラメータ, string strコメント )
\r
4334 if( strコマンド.StartsWith( "WAVVOL", StringComparison.OrdinalIgnoreCase ) )
\r
4336 strコマンド = strコマンド.Substring( 6 );
\r
4338 else if( strコマンド.StartsWith( "VOLUME", StringComparison.OrdinalIgnoreCase ) )
\r
4340 strコマンド = strコマンド.Substring( 6 );
\r
4346 if( strコマンド.Length < 2 )
\r
4350 int index = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
4351 if( ( index < 0 ) || ( index >= 36 * 36 ) )
\r
4353 Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
4356 if( int.TryParse( strパラメータ, out num2 ) )
\r
4362 else if( num2 >= 100 )
\r
4366 if( this.n無限管理VOL[ index ] == -index )
\r
4368 foreach( CWAV cwav in this.listWAV.Values )
\r
4370 if( cwav.n音量 == -index )
\r
4376 this.n無限管理VOL[ index ] = num2;
\r
4380 private bool t入力・行解析・チップ配置( string strコマンド, string strパラメータ, string strコメント )
\r
4382 if( strコマンド.Length != 5 )
\r
4386 int num = C変換.n小節番号の文字列3桁を数値に変換して返す( strコマンド.Substring( 0, 3 ) );
\r
4393 if( ( this.e種別 != E種別.GDA ) && ( this.e種別 != E種別.G2D ) )
\r
4395 c = C変換.n16進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 3, 2 ) );
\r
4403 string str = strコマンド.Substring( 3, 2 );
\r
4404 foreach( STGDAPARAM stgdaparam in this.stGDAParam )
\r
4406 if( str.Equals( stgdaparam.s, StringComparison.OrdinalIgnoreCase ) )
\r
4417 if( ( c >= 0x11 ) && ( c <= 0x1a ) )
\r
4419 this.bチップがある.Drums = true;
\r
4421 else if( ( c >= 0x20 ) && ( c <= 0x27 ) )
\r
4423 this.bチップがある.Guitar = true;
\r
4425 else if( ( c >= 160 ) && ( c <= 0xa7 ) )
\r
4427 this.bチップがある.Bass = true;
\r
4431 this.bチップがある.HHOpen = true;
\r
4436 this.bチップがある.Ride = true;
\r
4440 this.bチップがある.LeftCymbal = true;
\r
4444 this.bチップがある.OpenGuitar = true;
\r
4448 this.bチップがある.OpenBass = true;
\r
4453 double result = 0.0;
\r
4454 if( !double.TryParse( strパラメータ, out result ) )
\r
4456 Trace.TraceError( "小節長倍率に不正な値を指定しました。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\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
4467 if( string.IsNullOrEmpty( strパラメータ ) )
\r
4472 StringBuilder builder = new StringBuilder( strパラメータ.Length );
\r
4473 CharEnumerator enumerator = strパラメータ.GetEnumerator();
\r
4474 while( enumerator.MoveNext() )
\r
4476 if( enumerator.Current != '_' )
\r
4478 if( "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".IndexOf( enumerator.Current ) < 0 )
\r
4480 Trace.TraceError( "不正なオブジェクト指定があります。[{0}: {1}行]", new object[] { this.strファイル名の絶対パス, this.n現在の行数 } );
\r
4483 builder.Append( enumerator.Current );
\r
4487 strパラメータ = builder.ToString();
\r
4488 if( ( num4 % 2 ) != 0 )
\r
4492 for( int i = 0; i < ( num4 / 2 ); i++ )
\r
4497 index = C変換.n16進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );
\r
4501 index = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );
\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
4512 chip2.e楽器パート = E楽器パート.DRUMS;
\r
4514 if( ( c >= 0x20 ) && ( c <= 0x27 ) )
\r
4516 chip2.e楽器パート = E楽器パート.GUITAR;
\r
4518 if( ( c >= 160 ) && ( c <= 0xa7 ) )
\r
4520 chip2.e楽器パート = E楽器パート.BASS;
\r
4522 if( chip2.bWAVを使うチャンネルである )
\r
4524 chip2.n整数値・内部番号 = this.n無限管理WAV[ index ];
\r
4526 else if( chip2.bBPMチップである )
\r
4528 chip2.n整数値・内部番号 = this.n無限管理BPM[ index ];
\r
4532 if( ( index > 0 ) && ( index != 2 ) )
\r
4534 chip2.n発声位置 -= 0x20;
\r
4536 else if( index == 2 )
\r
4538 chip2.n発声位置 += 0x20;
\r
4541 this.listChip.Add( chip2 );
\r
4546 //-----------------
\r