2 using System.Collections;
\r
3 using System.Collections.Generic;
\r
4 using System.Globalization;
\r
7 using System.Windows.Forms;
\r
8 using System.Drawing;
\r
9 using DTXCreator.Properties;
\r
10 using DTXCreator.譜面;
\r
11 using DTXCreator.UndoRedo;
\r
12 using DTXCreator.WAV_BMP_AVI;
\r
14 using System.Diagnostics;
\r
16 namespace DTXCreator
\r
18 internal class CDTX入出力
\r
20 internal CDTX入出力( Cメインフォーム mf )
\r
24 public void tDTX出力( StreamWriter sw )
\r
26 this.tDTX出力( sw, false );
\r
28 public void tDTX出力( StreamWriter sw, bool bBGMのみ出力 )
\r
30 sw.WriteLine( "; Created by DTXCreator " + Resources.DTXC_VERSION );
\r
31 this.tDTX出力・タイトルと製作者とコメントその他( sw );
\r
32 this.tDTX出力・自由入力欄( sw );
\r
33 this.tDTX出力・WAVリスト( sw, bBGMのみ出力 );
\r
34 this.tDTX出力・BMPリスト( sw );
\r
35 this.tDTX出力・AVIリスト( sw );
\r
36 this.tDTX出力・小節長倍率( sw );
\r
37 this.tDTX出力・BPxリスト( sw );
\r
38 this.tDTX出力・全チップ( sw );
\r
40 this.tDTX出力・レーン割付チップ( sw );
\r
41 this.tDTX出力・WAVリスト色設定( sw );
\r
42 this.tDTX出力・BMPリスト色設定( sw );
\r
43 this.tDTX出力・AVIリスト色設定( sw );
\r
44 this.tDTX出力・チップパレット( sw );
\r
46 public void tDTX入力( E種別 e種別, ref string str全入力文字列 )
\r
49 if( str全入力文字列.Length != 0 )
\r
51 this.dic小節長倍率 = new Dictionary<int, float>();
\r
52 this.listチップパレット = new List<int>();
\r
53 this.nBGMWAV番号 = -1;
\r
54 this.nLastBarConverted = -1;
\r
55 this.eDTXbgmChs = DTXbgmChs.GetEnumerator();
\r
56 this._Form.listViewWAVリスト.BeginUpdate();
\r
57 this._Form.listViewBMPリスト.BeginUpdate();
\r
58 this._Form.listViewAVIリスト.BeginUpdate();
\r
59 str全入力文字列 = str全入力文字列.Replace( Environment.NewLine, "\n" );
\r
60 str全入力文字列 = str全入力文字列.Replace( '\t', ' ' );
\r
61 StringBuilder builder = new StringBuilder();
\r
62 CharEnumerator ce = str全入力文字列.GetEnumerator();
\r
67 if( !this.tDTX入力・空白と改行をスキップする( ref ce ) )
\r
71 if( ce.Current == '#' )
\r
75 StringBuilder builder2 = new StringBuilder( 0x20 );
\r
76 if( this.tDTX入力・コマンド文字列を抜き出す( ref ce, ref builder2 ) )
\r
78 StringBuilder builder3 = new StringBuilder( 0x400 );
\r
79 if( this.tDTX入力・パラメータ文字列を抜き出す( ref ce, ref builder3 ) )
\r
81 StringBuilder builder4 = new StringBuilder( 0x400 );
\r
82 if( this.tDTX入力・コメント文字列を抜き出す( ref ce, ref builder4 ) )
\r
84 if( !this.tDTX入力・行解析( ref builder2, ref builder3, ref builder4 ) )
\r
86 builder.Append( string.Concat( new object[] { "#", builder2, ": ", builder3 } ) );
\r
87 if( builder4.Length > 0 )
\r
89 builder.Append( "\t;" + builder4 );
\r
91 builder.Append( Environment.NewLine );
\r
101 while( this.tDTX入力・コメントをスキップする( ref ce ) );
\r
102 CUndoRedo管理.bUndoRedoした直後 = true;
\r
103 this._Form.textBox自由入力欄.Text = this._Form.textBox自由入力欄.Text + builder.ToString();
\r
104 this.tDTX入力・小節内のチップリストを発声位置でソートする();
\r
105 this.tDTX入力・小節長倍率配列を昇順ソート済みの小節リストに適用する();
\r
106 this.tDTX入力・BPMチップにBPx数値をバインドする();
\r
107 this.tDTX入力・キャッシュからListViewを一括構築する();
\r
108 this.tDTX入力・チップパレットのListViewを一括構築する();
\r
109 if( this.nBGMWAV番号 >= 0 )
\r
111 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( this.nBGMWAV番号 ).bBGMとして使用 = true;
\r
113 this._Form.listViewWAVリスト.EndUpdate();
\r
114 this._Form.listViewBMPリスト.EndUpdate();
\r
115 this._Form.listViewAVIリスト.EndUpdate();
\r
129 #region [ private ]
\r
130 //-----------------
\r
131 private Cメインフォーム _Form;
\r
132 private int[] arr素数リスト = new int[] {
\r
133 2, 3, 5, 7, 11, 13, 0x11, 0x13, 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b, 0x2f, 0x35,
\r
134 0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59, 0x61, 0x65, 0x67, 0x6b, 0x6d, 0x71, 0x7f, 0x83,
\r
135 0x89, 0x8b, 0x95, 0x97, 0x9d, 0xa3, 0xa7, 0xad, 0xb3, 0xb5, 0xbf, 0xc1, 0xc5, 0xc7, 0xd3, 0xdf,
\r
136 0xe3, 0xe5, 0xe9, 0xef, 0xf1, 0xfb, 0x101, 0x107, 0x10d, 0x10f, 0x115, 0x119, 0x11b, 0x125, 0x133, 0x137,
\r
137 0x139, 0x13d, 0x14b, 0x151, 0x15b, 0x15d, 0x161, 0x167, 0x16f, 0x175, 0x17b, 0x17f
\r
139 #region [ #25990; for BMS/BME to DTX conversion ]
\r
140 // #25990 2011.8.12 yyagi: DTXのBGM用ch群(正確には効果音用ch群)
\r
141 private readonly int[] DTXbgmChs = new int[] {
\r
142 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
\r
143 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
\r
144 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
\r
147 // #25990 2011.8.12 yyagi: BMS/BME→DTX チャネル変換テーブル(BGMとキーを除いて、右から左にそのまま変換)
\r
148 private readonly int[] BMSgeneralChToDTXgeneralCh = {
\r
149 0x00, -1, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
\r
150 0x10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
\r
151 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
\r
152 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
\r
153 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
\r
154 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
\r
155 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
\r
156 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
\r
157 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
\r
158 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
\r
159 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
\r
160 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
\r
161 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
\r
162 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
\r
163 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
\r
164 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
\r
166 // #25990 2011.8.12 yyagi: BMS→DTXの、キー関係の変換表 (5鍵ならHH~LTとCYを使用)
\r
167 private readonly int[] BMSkeyChToDTXdrumsCh = {
\r
168 // 1key 2key, 3key, 4key, 5key, scr, free
\r
169 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x53
\r
170 // HC, SD, BD, HT, LT, CY, FI
\r
172 // #25990 2011.8.12 yyagi: BME→DTXの、キー関係の変換表 (7鍵ならLC~FTとCYを使用)
\r
173 private readonly int[] BMEkeyChToDTXdrumsCh = {
\r
174 // 1key 2key, 3key, 4key, 5key, scr, free, 6key, 7key
\r
175 0x1A, 0x11, 0x12, 0x13, 0x14, 0x16, 0x53, 0x15, 0x17
\r
176 // LC, HC, SD, BD, HT, CY, FI, LT, FT
\r
178 private int nLastBarConverted = -1; // #25990 2011.8.12 yyagi BMS/BME→DTX変換用
\r
179 private IEnumerator eDTXbgmChs; // #25990 2011.8.12 yyagi BMS/BME→DTX変換用
\r
181 private Dictionary<int, float> dic小節長倍率;
\r
183 private List<int> listチップパレット;
\r
184 private int nBGMWAV番号 = -1;
\r
186 private void tDTX入力・BPMチップにBPx数値をバインドする()
\r
188 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
190 C小節 c小節 = pair.Value;
\r
191 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
193 Cチップ cチップ = c小節.listチップ[ i ];
\r
195 if( ( cチップ.nチャンネル番号00toFF == 8 ) && this._Form.mgr譜面管理者.dicBPx.TryGetValue( cチップ.n値・整数1to1295, out num2 ) )
\r
197 cチップ.f値・浮動小数 = num2;
\r
199 if( cチップ.nチャンネル番号00toFF == 3 )
\r
201 cチップ.nチャンネル番号00toFF = 8;
\r
202 cチップ.f値・浮動小数 = cチップ.n値・整数1to1295;
\r
204 for( int j = 1; j <= 36 * 36 - 1; j++ )
\r
206 if( !this._Form.mgr譜面管理者.dicBPx.ContainsKey( j ) )
\r
208 this._Form.mgr譜面管理者.dicBPx.Add( j, cチップ.f値・浮動小数 );
\r
209 cチップ.n値・整数1to1295 = j;
\r
217 private void tDTX入力・キャッシュからListViewを一括構築する()
\r
219 for( int i = 1; i <= 36 * 36 - 1; i++ )
\r
221 CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );
\r
224 cwav.tコピーto( this._Form.listViewWAVリスト.Items[ i - 1 ] );
\r
226 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );
\r
229 cbmp.tコピーto( this._Form.listViewBMPリスト.Items[ i - 1 ] );
\r
231 CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );
\r
234 cavi.tコピーto( this._Form.listViewAVIリスト.Items[ i - 1 ] );
\r
238 private bool tDTX入力・コマンド文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )
\r
240 if( this.tDTX入力・空白をスキップする( ref ce ) )
\r
242 while( ( ( ce.Current != ':' ) && ( ce.Current != ' ' ) ) && ( ( ce.Current != ';' ) && ( ce.Current != '\n' ) ) )
\r
244 sb文字列.Append( ce.Current );
\r
245 if( !ce.MoveNext() )
\r
250 if( ce.Current == ':' )
\r
252 if( !ce.MoveNext() )
\r
256 if( !this.tDTX入力・空白をスキップする( ref ce ) )
\r
265 private bool tDTX入力・コメントをスキップする( ref CharEnumerator ce )
\r
267 while( ce.Current != '\n' )
\r
269 if( !ce.MoveNext() )
\r
274 return ce.MoveNext();
\r
276 private bool tDTX入力・コメント文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )
\r
278 if( ce.Current != ';' )
\r
282 if( ce.MoveNext() )
\r
284 while( ce.Current != '\n' )
\r
286 sb文字列.Append( ce.Current );
\r
287 if( !ce.MoveNext() )
\r
296 private void tDTX入力・チップパレットのListViewを一括構築する()
\r
298 for( int i = 0; i < ( this.listチップパレット.Count / 2 ); i += 2 )
\r
300 int num2 = this.listチップパレット[ i * 2 ];
\r
301 int num3 = this.listチップパレット[ ( i * 2 ) + 1 ];
\r
302 string[] items = new string[ 3 ];
\r
307 CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( num3 );
\r
310 items[ 0 ] = cwav.strラベル名;
\r
311 items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );
\r
312 items[ 2 ] = cwav.strファイル名;
\r
313 ListViewItem item = new ListViewItem( items );
\r
314 item.ImageIndex = num2;
\r
315 item.ForeColor = cwav.col文字色;
\r
316 item.BackColor = cwav.col背景色;
\r
317 this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item );
\r
323 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( num3 );
\r
326 items[ 0 ] = cbmp.strラベル名;
\r
327 items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );
\r
328 items[ 2 ] = cbmp.strファイル名;
\r
329 ListViewItem item2 = new ListViewItem( items );
\r
330 item2.ImageIndex = num2;
\r
331 item2.ForeColor = cbmp.col文字色;
\r
332 item2.BackColor = cbmp.col背景色;
\r
333 this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item2 );
\r
339 CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( num3 );
\r
342 items[ 0 ] = cavi.strラベル名;
\r
343 items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );
\r
344 items[ 2 ] = cavi.strファイル名;
\r
345 ListViewItem item3 = new ListViewItem( items );
\r
346 item3.ImageIndex = num2;
\r
347 item3.ForeColor = cavi.col文字色;
\r
348 item3.BackColor = cavi.col背景色;
\r
349 this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item3 );
\r
356 private bool tDTX入力・パラメータ文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )
\r
358 if( this.tDTX入力・空白をスキップする( ref ce ) )
\r
360 while( ( ce.Current != '\n' ) && ( ce.Current != ';' ) )
\r
362 sb文字列.Append( ce.Current );
\r
363 if( !ce.MoveNext() )
\r
372 private bool tDTX入力・空白と改行をスキップする( ref CharEnumerator ce )
\r
374 while( ( ce.Current == ' ' ) || ( ce.Current == '\n' ) )
\r
376 if( !ce.MoveNext() )
\r
383 private bool tDTX入力・空白をスキップする( ref CharEnumerator ce )
\r
385 while( ce.Current == ' ' )
\r
387 if( !ce.MoveNext() )
\r
394 private bool tDTX入力・行解析( ref StringBuilder sbコマンド, ref StringBuilder sbパラメータ, ref StringBuilder sbコメント )
\r
396 string str = sbコマンド.ToString();
\r
397 string str2 = sbパラメータ.ToString().Trim();
\r
398 string str3 = sbコメント.ToString();
\r
399 return ( this.tDTX入力・行解析・TITLE_ARTIST_COMMENT_その他( str, str2, str3 ) || ( this.tDTX入力・行解析・WAVVOL_VOLUME( str, str2, str3 ) || ( this.tDTX入力・行解析・WAVPAN_PAN( str, str2, str3 ) || ( this.tDTX入力・行解析・WAV( str, str2, str3 ) || ( this.tDTX入力・行解析・BGMWAV( str, str2, str3 ) || ( this.tDTX入力・行解析・BMPTEX( str, str2, str3 ) || ( this.tDTX入力・行解析・BMP( str, str2, str3 ) || ( this.tDTX入力・行解析・AVI_AVIPAN( str, str2, str3 ) || ( this.tDTX入力・行解析・BPx( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_LANEBINDEDCHIP( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_WAVFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_WAVBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_BMPFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_BMPBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_AVIFORECOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_AVIBACKCOLOR( str, str2, str3 ) || ( this.tDTX入力・行解析・DTXC_CHIPPALETTE( str, str2, str3 ) || this.tDTX入力・行解析・チャンネル( str, str2, str3 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) );
\r
401 private bool tDTX入力・行解析・AVI_AVIPAN( string strコマンド, string strパラメータ, string strコメント )
\r
403 if( !strコマンド.StartsWith( "AVIPAN", StringComparison.OrdinalIgnoreCase ) && strコマンド.StartsWith( "AVI", StringComparison.OrdinalIgnoreCase ) )
\r
405 strコマンド = strコマンド.Substring( 3 );
\r
411 int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
412 if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )
\r
416 CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( num );
\r
417 cavi.strラベル名 = strコメント;
\r
418 cavi.strファイル名 = strパラメータ;
\r
421 private bool tDTX入力・行解析・BGMWAV( string strコマンド, string strパラメータ, string strコメント )
\r
423 if( strコマンド.StartsWith( "bgmwav", StringComparison.OrdinalIgnoreCase ) )
\r
425 strコマンド = strコマンド.Substring( 6 );
\r
431 int num = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 0, 2 ) );
\r
432 if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )
\r
436 this.nBGMWAV番号 = num;
\r
439 private bool tDTX入力・行解析・BMP( string strコマンド, string strパラメータ, string strコメント )
\r
441 if( ( strコマンド.Length > 3 ) && strコマンド.StartsWith( "BMP", StringComparison.OrdinalIgnoreCase ) )
\r
443 strコマンド = strコマンド.Substring( 3 );
\r
449 int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
450 if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )
\r
454 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( num );
\r
455 cbmp.strラベル名 = strコメント;
\r
456 cbmp.strファイル名 = strパラメータ;
\r
457 cbmp.bテクスチャ = false;
\r
460 private bool tDTX入力・行解析・BMPTEX( string strコマンド, string strパラメータ, string strコメント )
\r
462 if( strコマンド.StartsWith( "BMPTEX", StringComparison.OrdinalIgnoreCase ) )
\r
464 strコマンド = strコマンド.Substring( 6 );
\r
470 int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
471 if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )
\r
475 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( num );
\r
476 cbmp.strラベル名 = strコメント;
\r
477 cbmp.strファイル名 = strパラメータ;
\r
478 cbmp.bテクスチャ = true;
\r
481 private bool tDTX入力・行解析・BPx( string strコマンド, string strパラメータ, string strコメント )
\r
483 if( strコマンド.StartsWith( "BPM", StringComparison.OrdinalIgnoreCase ) )
\r
485 strコマンド = strコマンド.Substring( 3 );
\r
491 int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
492 if( ( key < 1 ) || ( key > 36 * 36 - 1 ) )
\r
496 decimal result = 0;
\r
497 if( ( !this.TryParse( strパラメータ, out result ) || ( result < 0 ) ) || ( result > 1000 ) ) // #23880 2011.1.6 yyagi
\r
501 this._Form.mgr譜面管理者.dicBPx.Add(key, (float)result);
\r
504 private bool tDTX入力・行解析・DTXC_AVIBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )
\r
507 if( !strコマンド.Equals( "DTXC_AVIBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )
\r
511 string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );
\r
512 if( strArray.Length < 2 )
\r
516 if( !int.TryParse( strArray[ 0 ], out nChipNo ) )
\r
520 if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )
\r
524 Color color = ColorTranslator.FromHtml( strArray[ 1 ] );
\r
525 if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )
\r
527 this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col背景色 = color;
\r
531 private bool tDTX入力・行解析・DTXC_AVIFORECOLOR( string strコマンド, string strパラメータ, string strコメント )
\r
534 if( !strコマンド.Equals( "DTXC_AVIFORECOLOR", StringComparison.OrdinalIgnoreCase ) )
\r
538 string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );
\r
539 if( strArray.Length < 2 )
\r
543 if( !int.TryParse( strArray[ 0 ], out nChipNo ) )
\r
547 if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )
\r
551 Color color = ColorTranslator.FromHtml( strArray[ 1 ] );
\r
552 if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )
\r
554 this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col文字色 = color;
\r
558 private bool tDTX入力・行解析・DTXC_BMPBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )
\r
561 if( !strコマンド.Equals( "DTXC_BMPBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )
\r
565 string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );
\r
566 if( strArray.Length < 2 )
\r
570 if( !int.TryParse( strArray[ 0 ], out nChipNo ) )
\r
574 if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )
\r
578 Color color = ColorTranslator.FromHtml( strArray[ 1 ] );
\r
579 if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )
\r
581 this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col背景色 = color;
\r
585 private bool tDTX入力・行解析・DTXC_BMPFORECOLOR( string strコマンド, string strパラメータ, string strコメント )
\r
588 if( !strコマンド.Equals( "DTXC_BMPFORECOLOR", StringComparison.OrdinalIgnoreCase ) )
\r
592 string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );
\r
593 if( strArray.Length < 2 )
\r
597 if( !int.TryParse( strArray[ 0 ], out nChipNo ) )
\r
601 if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )
\r
605 Color color = ColorTranslator.FromHtml( strArray[ 1 ] );
\r
606 if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )
\r
608 this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col文字色 = color;
\r
612 private bool tDTX入力・行解析・DTXC_CHIPPALETTE( string strコマンド, string strパラメータ, string strコメント )
\r
614 if( !strコマンド.Equals( "DTXC_CHIPPALETTE", StringComparison.OrdinalIgnoreCase ) )
\r
618 foreach( string str in strパラメータ.Split( new char[] { ' ' } ) )
\r
621 string[] strArray2 = str.Split( new char[] { ',' } );
\r
622 if( ( ( strArray2.Length == 2 ) && int.TryParse( strArray2[ 0 ], out num ) ) && ( ( num >= 0 ) && ( num <= 2 ) ) )
\r
624 int item = C変換.n36進数2桁の文字列を数値に変換して返す( strArray2[ 1 ] );
\r
625 if( ( item >= 1 ) && ( item <= 36 * 36 - 1 ) )
\r
627 this.listチップパレット.Add( num );
\r
628 this.listチップパレット.Add( item );
\r
634 private bool tDTX入力・行解析・DTXC_LANEBINDEDCHIP( string strコマンド, string strパラメータ, string strコメント )
\r
636 if( strコマンド.Equals( "DTXC_LANEBINDEDCHIP", StringComparison.OrdinalIgnoreCase ) && ( strパラメータ.Length == 8 ) )
\r
639 if( !int.TryParse( strパラメータ.Substring( 0, 2 ), out nLaneNo ) )
\r
643 int nChipNoFore = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 3, 2 ) );
\r
644 if( ( nChipNoFore < 0 ) || ( nChipNoFore > 36 * 36 - 1 ) )
\r
648 int nChipNoBack = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 6, 2 ) );
\r
649 if( ( nChipNoBack < 0 ) || ( nChipNoBack > 36 * 36 - 1 ) )
\r
653 if( ( nLaneNo >= 0 ) && ( nLaneNo < this._Form.mgr譜面管理者.listレーン.Count ) )
\r
655 if( nChipNoFore != 0 )
\r
657 this._Form.mgr譜面管理者.listレーン[ nLaneNo ].nレーン割付チップ・表0or1to1295 = nChipNoFore;
\r
659 if( nChipNoBack != 0 )
\r
661 this._Form.mgr譜面管理者.listレーン[ nLaneNo ].nレーン割付チップ・裏0or1to1295 = nChipNoBack;
\r
668 private bool tDTX入力・行解析・DTXC_WAVBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )
\r
671 if( !strコマンド.Equals( "DTXC_WAVBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )
\r
675 string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );
\r
676 if( strArray.Length < 2 )
\r
680 if( !int.TryParse( strArray[ 0 ], out nChipNo ) )
\r
684 if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )
\r
688 Color color = ColorTranslator.FromHtml( strArray[ 1 ] );
\r
689 if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )
\r
691 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col背景色 = color;
\r
695 private bool tDTX入力・行解析・DTXC_WAVFORECOLOR( string strコマンド, string strパラメータ, string strコメント )
\r
698 if( !strコマンド.Equals( "DTXC_WAVFORECOLOR", StringComparison.OrdinalIgnoreCase ) )
\r
702 string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );
\r
703 if( strArray.Length < 2 )
\r
707 if( !int.TryParse( strArray[ 0 ], out nChipNo ) )
\r
711 if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )
\r
715 Color color = ColorTranslator.FromHtml( strArray[ 1 ] );
\r
716 if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )
\r
718 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo + 1 ).col文字色 = color;
\r
722 private bool tDTX入力・行解析・TITLE_ARTIST_COMMENT_その他( string strコマンド, string strパラメータ, string strコメント )
\r
724 if( strコマンド.Equals( "TITLE", StringComparison.OrdinalIgnoreCase ) )
\r
726 CUndoRedo管理.bUndoRedoした直後 = true;
\r
727 this._Form.textBox曲名.Text = strパラメータ.Trim();
\r
730 if( strコマンド.Equals( "ARTIST", StringComparison.OrdinalIgnoreCase ) )
\r
732 CUndoRedo管理.bUndoRedoした直後 = true;
\r
733 this._Form.textBox製作者.Text = strパラメータ.Trim();
\r
736 if( strコマンド.Equals( "COMMENT", StringComparison.OrdinalIgnoreCase ) )
\r
738 CUndoRedo管理.bUndoRedoした直後 = true;
\r
739 this._Form.textBoxコメント.Text = strパラメータ.Trim();
\r
742 if( strコマンド.Equals( "PANEL", StringComparison.OrdinalIgnoreCase ) )
\r
744 int dummyResult; // #23885, #26007 2011.8.13 yyagi: not to confuse "#PANEL strings (panel)" and "#PANEL int (panpot of EL)"
\r
745 if ( !int.TryParse( strパラメータ, out dummyResult ) ) // 数値じゃないならPANELとみなす
\r
747 CUndoRedo管理.bUndoRedoした直後 = true;
\r
748 this._Form.textBoxパネル.Text = strパラメータ.Trim();
\r
750 } // 数値なら、ここでは何もせず、後で#PANに拾ってもらう (PAN ELとみなす)
\r
752 if( strコマンド.Equals( "PREVIEW", StringComparison.OrdinalIgnoreCase ) )
\r
754 CUndoRedo管理.bUndoRedoした直後 = true;
\r
755 this._Form.textBoxPREVIEW.Text = strパラメータ.Trim();
\r
758 if( strコマンド.Equals( "PREIMAGE", StringComparison.OrdinalIgnoreCase ) )
\r
760 CUndoRedo管理.bUndoRedoした直後 = true;
\r
761 this._Form.textBoxPREIMAGE.Text = strパラメータ.Trim();
\r
764 if( strコマンド.Equals( "STAGEFILE", StringComparison.OrdinalIgnoreCase ) )
\r
766 CUndoRedo管理.bUndoRedoした直後 = true;
\r
767 this._Form.textBoxSTAGEFILE.Text = strパラメータ.Trim();
\r
770 if( strコマンド.Equals( "BACKGROUND", StringComparison.OrdinalIgnoreCase ) || strコマンド.Equals( "WALL", StringComparison.OrdinalIgnoreCase ) )
\r
772 CUndoRedo管理.bUndoRedoした直後 = true;
\r
773 this._Form.textBoxBACKGROUND.Text = strパラメータ.Trim();
\r
776 if( strコマンド.Equals( "RESULTIMAGE", StringComparison.OrdinalIgnoreCase ) )
\r
778 CUndoRedo管理.bUndoRedoした直後 = true;
\r
779 this._Form.textBoxRESULTIMAGE.Text = strパラメータ.Trim();
\r
782 if( strコマンド.Equals( "BPM", StringComparison.OrdinalIgnoreCase ) )
\r
785 if( !this.TryParse( strパラメータ, out dBpm ) ) // #23880 2011.1.6 yyagi
\r
789 CUndoRedo管理.bUndoRedoした直後 = true;
\r
790 this._Form.numericUpDownBPM.Value = dBpm;
\r
793 if( strコマンド.Equals( "DLEVEL", StringComparison.OrdinalIgnoreCase ) )
\r
796 if( !int.TryParse( strパラメータ, out nLevel ) )
\r
800 else if( nLevel < 0 )
\r
804 else if( nLevel > 100 )
\r
808 CUndoRedo管理.bUndoRedoした直後 = true;
\r
809 this._Form.hScrollBarDLEVEL.Value = nLevel;
\r
810 CUndoRedo管理.bUndoRedoした直後 = true;
\r
811 this._Form.textBoxDLEVEL.Text = nLevel.ToString();
\r
814 if( strコマンド.Equals( "GLEVEL", StringComparison.OrdinalIgnoreCase ) )
\r
817 if( !int.TryParse( strパラメータ, out nLevel ) )
\r
821 else if( nLevel < 0 )
\r
825 else if( nLevel > 100 )
\r
829 CUndoRedo管理.bUndoRedoした直後 = true;
\r
830 this._Form.hScrollBarGLEVEL.Value = nLevel;
\r
831 CUndoRedo管理.bUndoRedoした直後 = true;
\r
832 this._Form.textBoxGLEVEL.Text = nLevel.ToString();
\r
835 if( strコマンド.Equals( "BLEVEL", StringComparison.OrdinalIgnoreCase ) )
\r
838 if( !int.TryParse( strパラメータ, out nLevel ) )
\r
842 else if( nLevel < 0 )
\r
846 else if( nLevel > 100 )
\r
850 CUndoRedo管理.bUndoRedoした直後 = true;
\r
851 this._Form.hScrollBarBLEVEL.Value = nLevel;
\r
852 CUndoRedo管理.bUndoRedoした直後 = true;
\r
853 this._Form.textBoxBLEVEL.Text = nLevel.ToString();
\r
856 if( strコマンド.Equals( "DTXVPLAYSPEED", StringComparison.OrdinalIgnoreCase ) )
\r
858 decimal dPlaySpeed;
\r
859 // if ( !this.TryParse( strパラメータ, out num5 ) ) // #24790 2011.4.8 yyagi
\r
860 if ( !decimal.TryParse( strパラメータ, out dPlaySpeed ) ) // #24790 2011.4.8 yyagi
\r
864 else if( dPlaySpeed < 0.5M )
\r
868 else if( dPlaySpeed > 1.5M )
\r
872 decimal dIndex = ( 1.5M - dPlaySpeed ) * 10M;
\r
873 int nIndex = (int) dIndex;
\r
878 else if( nIndex > 10 )
\r
882 CUndoRedo管理.bUndoRedoした直後 = true;
\r
883 this._Form.toolStripComboBox演奏速度.SelectedIndex = nIndex;
\r
889 private bool tDTX入力・行解析・WAV( string strコマンド, string strパラメータ, string strコメント )
\r
891 if( strコマンド.StartsWith( "wav", StringComparison.OrdinalIgnoreCase ) )
\r
893 strコマンド = strコマンド.Substring( 3 );
\r
899 int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
900 if( ( nChipNo < 1 ) || ( nChipNo > 36 * 36 - 1 ) )
\r
904 CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo );
\r
905 cwav.strラベル名 = strコメント;
\r
906 cwav.strファイル名 = strパラメータ;
\r
909 private bool tDTX入力・行解析・WAVPAN_PAN( string strコマンド, string strパラメータ, string strコメント )
\r
912 if( strコマンド.StartsWith( "WAVPAN", StringComparison.OrdinalIgnoreCase ) )
\r
914 strコマンド = strコマンド.Substring( 6 );
\r
916 else if( strコマンド.StartsWith( "PAN", StringComparison.OrdinalIgnoreCase ) )
\r
918 strコマンド = strコマンド.Substring( 3 );
\r
924 if( strコマンド.Length < 2 )
\r
928 int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
929 if( int.TryParse( strパラメータ, out nPan ) )
\r
935 else if( nPan >= 100 )
\r
939 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo ).n位置_100to100 = nPan;
\r
943 private bool tDTX入力・行解析・WAVVOL_VOLUME( string strコマンド, string strパラメータ, string strコメント )
\r
946 if( strコマンド.StartsWith( "WAVVOL", StringComparison.OrdinalIgnoreCase ) )
\r
948 strコマンド = strコマンド.Substring( 6 );
\r
950 else if( strコマンド.StartsWith( "VOLUME", StringComparison.OrdinalIgnoreCase ) )
\r
952 strコマンド = strコマンド.Substring( 6 );
\r
958 if( strコマンド.Length < 2 )
\r
962 int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
\r
963 if( int.TryParse( strパラメータ, out nVol ) )
\r
969 else if( nVol >= 100 )
\r
973 this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す・なければ新規生成する( nChipNo ).n音量0to100 = nVol;
\r
977 private bool tDTX入力・行解析・チャンネル( string strコマンド, string strパラメータ, string strコメント )
\r
980 if( !this.tDTX入力・行解析・チャンネル・コマンドから小節番号とチャンネル番号を抜き出す( strコマンド, out nBar, out nCh ) )
\r
986 decimal dBarLength;
\r
987 if( !this.TryParse( strパラメータ, out dBarLength ) ) // #23880 2011.1.6 yyagi
\r
991 this.dic小節長倍率.Add( nBar, (float)dBarLength );
\r
994 if( ( nCh >= 0x20 ) && ( nCh <= 0x27 ) )
\r
996 C小節 c小節 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( nBar );
\r
997 int startIndex = 0;
\r
998 while( ( startIndex = strパラメータ.IndexOf( '_' ) ) != -1 )
\r
1000 strパラメータ = strパラメータ.Remove( startIndex, 1 );
\r
1002 int nChips = strパラメータ.Length / 2;
\r
1003 for( int i = 0; i < nChips; i++ )
\r
1005 int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );
\r
1006 if( nChipNo != 0 )
\r
1008 int nLaneGtV = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtV" );
\r
1009 int nLaneGtR = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtR" );
\r
1010 int nLaneGtG = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtG" );
\r
1011 int nLaneGtB = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtB" );
\r
1012 Cチップ item = new Cチップ();
\r
1013 item.nレーン番号0to = nLaneGtV;
\r
1015 item.n値・整数1to1295 = nChipNo;
\r
1016 item.n読み込み時の解像度 = nChips;
\r
1017 c小節.listチップ.Add( item );
\r
1021 item = new Cチップ();
\r
1022 item.nレーン番号0to = nLaneGtR;
\r
1024 item.n値・整数1to1295 = 2;
\r
1025 item.n読み込み時の解像度 = nChips;
\r
1026 c小節.listチップ.Add( item );
\r
1030 item = new Cチップ();
\r
1031 item.nレーン番号0to = nLaneGtB;
\r
1033 item.n値・整数1to1295 = 1;
\r
1034 item.n読み込み時の解像度 = nChips;
\r
1035 c小節.listチップ.Add( item );
\r
1039 item = new Cチップ();
\r
1040 item.nレーン番号0to = nLaneGtG;
\r
1042 item.n値・整数1to1295 = 1;
\r
1043 item.n読み込み時の解像度 = nChips;
\r
1044 c小節.listチップ.Add( item );
\r
1048 item = new Cチップ();
\r
1049 item.nレーン番号0to = nLaneGtG;
\r
1051 item.n値・整数1to1295 = 1;
\r
1052 item.n読み込み時の解像度 = nChips;
\r
1053 c小節.listチップ.Add( item );
\r
1054 item = new Cチップ();
\r
1055 item.nレーン番号0to = nLaneGtB;
\r
1057 item.n値・整数1to1295 = 1;
\r
1058 item.n読み込み時の解像度 = nChips;
\r
1059 c小節.listチップ.Add( item );
\r
1063 item = new Cチップ();
\r
1064 item.nレーン番号0to = nLaneGtR;
\r
1066 item.n値・整数1to1295 = 1;
\r
1067 item.n読み込み時の解像度 = nChips;
\r
1068 c小節.listチップ.Add( item );
\r
1072 item = new Cチップ();
\r
1073 item.nレーン番号0to = nLaneGtR;
\r
1075 item.n値・整数1to1295 = 1;
\r
1076 item.n読み込み時の解像度 = nChips;
\r
1077 c小節.listチップ.Add( item );
\r
1078 item = new Cチップ();
\r
1079 item.nレーン番号0to = nLaneGtB;
\r
1081 item.n値・整数1to1295 = 1;
\r
1082 item.n読み込み時の解像度 = nChips;
\r
1083 c小節.listチップ.Add( item );
\r
1087 item = new Cチップ();
\r
1088 item.nレーン番号0to = nLaneGtR;
\r
1090 item.n値・整数1to1295 = 1;
\r
1091 item.n読み込み時の解像度 = nChips;
\r
1092 c小節.listチップ.Add( item );
\r
1093 item = new Cチップ();
\r
1094 item.nレーン番号0to = nLaneGtG;
\r
1096 item.n値・整数1to1295 = 1;
\r
1097 item.n読み込み時の解像度 = nChips;
\r
1098 c小節.listチップ.Add( item );
\r
1102 item = new Cチップ();
\r
1103 item.nレーン番号0to = nLaneGtR;
\r
1105 item.n値・整数1to1295 = 1;
\r
1106 item.n読み込み時の解像度 = nChips;
\r
1107 c小節.listチップ.Add( item );
\r
1108 item = new Cチップ();
\r
1109 item.nレーン番号0to = nLaneGtG;
\r
1111 item.n値・整数1to1295 = 1;
\r
1112 item.n読み込み時の解像度 = nChips;
\r
1113 c小節.listチップ.Add( item );
\r
1114 item = new Cチップ();
\r
1115 item.nレーン番号0to = nLaneGtB;
\r
1117 item.n値・整数1to1295 = 1;
\r
1118 item.n読み込み時の解像度 = nChips;
\r
1119 c小節.listチップ.Add( item );
\r
1126 if( ( nCh >= 0xa0 ) && ( nCh <= 0xa7 ) )
\r
1128 C小節 c小節2 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( nBar );
\r
1130 while( ( num12 = strパラメータ.IndexOf( '_' ) ) != -1 )
\r
1132 strパラメータ = strパラメータ.Remove( num12, 1 );
\r
1134 int nChips = strパラメータ.Length / 2;
\r
1135 for( int j = 0; j < nChips; j++ )
\r
1137 int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( j * 2, 2 ) );
\r
1138 if( nChipNo != 0 )
\r
1140 int nLaneBsV = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsV" );
\r
1141 int nLaneBsR = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsR" );
\r
1142 int nLanrBsG = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsG" );
\r
1143 int nLaneBsB = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsB" );
\r
1144 Cチップ cチップ2 = new Cチップ();
\r
1145 cチップ2.nレーン番号0to = nLaneBsV;
\r
1146 cチップ2.n位置grid = j;
\r
1147 cチップ2.n値・整数1to1295 = nChipNo;
\r
1148 cチップ2.n読み込み時の解像度 = nChips;
\r
1149 c小節2.listチップ.Add( cチップ2 );
\r
1153 cチップ2 = new Cチップ();
\r
1154 cチップ2.nレーン番号0to = nLaneBsR;
\r
1155 cチップ2.n位置grid = j;
\r
1156 cチップ2.n値・整数1to1295 = 2;
\r
1157 cチップ2.n読み込み時の解像度 = nChips;
\r
1158 c小節2.listチップ.Add( cチップ2 );
\r
1162 cチップ2 = new Cチップ();
\r
1163 cチップ2.nレーン番号0to = nLaneBsB;
\r
1164 cチップ2.n位置grid = j;
\r
1165 cチップ2.n値・整数1to1295 = 1;
\r
1166 cチップ2.n読み込み時の解像度 = nChips;
\r
1167 c小節2.listチップ.Add( cチップ2 );
\r
1171 cチップ2 = new Cチップ();
\r
1172 cチップ2.nレーン番号0to = nLanrBsG;
\r
1173 cチップ2.n位置grid = j;
\r
1174 cチップ2.n値・整数1to1295 = 1;
\r
1175 cチップ2.n読み込み時の解像度 = nChips;
\r
1176 c小節2.listチップ.Add( cチップ2 );
\r
1180 cチップ2 = new Cチップ();
\r
1181 cチップ2.nレーン番号0to = nLanrBsG;
\r
1182 cチップ2.n位置grid = j;
\r
1183 cチップ2.n値・整数1to1295 = 1;
\r
1184 cチップ2.n読み込み時の解像度 = nChips;
\r
1185 c小節2.listチップ.Add( cチップ2 );
\r
1186 cチップ2 = new Cチップ();
\r
1187 cチップ2.nレーン番号0to = nLaneBsB;
\r
1188 cチップ2.n位置grid = j;
\r
1189 cチップ2.n値・整数1to1295 = 1;
\r
1190 cチップ2.n読み込み時の解像度 = nChips;
\r
1191 c小節2.listチップ.Add( cチップ2 );
\r
1195 cチップ2 = new Cチップ();
\r
1196 cチップ2.nレーン番号0to = nLaneBsR;
\r
1197 cチップ2.n位置grid = j;
\r
1198 cチップ2.n値・整数1to1295 = 1;
\r
1199 cチップ2.n読み込み時の解像度 = nChips;
\r
1200 c小節2.listチップ.Add( cチップ2 );
\r
1204 cチップ2 = new Cチップ();
\r
1205 cチップ2.nレーン番号0to = nLaneBsR;
\r
1206 cチップ2.n位置grid = j;
\r
1207 cチップ2.n値・整数1to1295 = 1;
\r
1208 cチップ2.n読み込み時の解像度 = nChips;
\r
1209 c小節2.listチップ.Add( cチップ2 );
\r
1210 cチップ2 = new Cチップ();
\r
1211 cチップ2.nレーン番号0to = nLaneBsB;
\r
1212 cチップ2.n位置grid = j;
\r
1213 cチップ2.n値・整数1to1295 = 1;
\r
1214 cチップ2.n読み込み時の解像度 = nChips;
\r
1215 c小節2.listチップ.Add( cチップ2 );
\r
1219 cチップ2 = new Cチップ();
\r
1220 cチップ2.nレーン番号0to = nLaneBsR;
\r
1221 cチップ2.n位置grid = j;
\r
1222 cチップ2.n値・整数1to1295 = 1;
\r
1223 cチップ2.n読み込み時の解像度 = nChips;
\r
1224 c小節2.listチップ.Add( cチップ2 );
\r
1225 cチップ2 = new Cチップ();
\r
1226 cチップ2.nレーン番号0to = nLanrBsG;
\r
1227 cチップ2.n位置grid = j;
\r
1228 cチップ2.n値・整数1to1295 = 1;
\r
1229 cチップ2.n読み込み時の解像度 = nChips;
\r
1230 c小節2.listチップ.Add( cチップ2 );
\r
1234 cチップ2 = new Cチップ();
\r
1235 cチップ2.nレーン番号0to = nLaneBsR;
\r
1236 cチップ2.n位置grid = j;
\r
1237 cチップ2.n値・整数1to1295 = 1;
\r
1238 cチップ2.n読み込み時の解像度 = nChips;
\r
1239 c小節2.listチップ.Add( cチップ2 );
\r
1240 cチップ2 = new Cチップ();
\r
1241 cチップ2.nレーン番号0to = nLanrBsG;
\r
1242 cチップ2.n位置grid = j;
\r
1243 cチップ2.n値・整数1to1295 = 1;
\r
1244 cチップ2.n読み込み時の解像度 = nChips;
\r
1245 c小節2.listチップ.Add( cチップ2 );
\r
1246 cチップ2 = new Cチップ();
\r
1247 cチップ2.nレーン番号0to = nLaneBsB;
\r
1248 cチップ2.n位置grid = j;
\r
1249 cチップ2.n値・整数1to1295 = 1;
\r
1250 cチップ2.n読み込み時の解像度 = nChips;
\r
1251 c小節2.listチップ.Add( cチップ2 );
\r
1259 bool flag = false;
\r
1260 if( this.tDTX入力・行解析・チャンネル・チャンネルに該当するレーン番号を返す( nCh, out num20, out flag ) )
\r
1262 C小節 c小節3 = this.tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( nBar );
\r
1264 while( ( nPosOf_ = strパラメータ.IndexOf( '_' ) ) != -1 )
\r
1266 strパラメータ = strパラメータ.Remove( nPosOf_, 1 );
\r
1268 int nChips = strパラメータ.Length / 2;
\r
1269 for( int i = 0; i < nChips; i++ )
\r
1271 int nChipNo = ( nCh == 3 ) ? C変換.n16進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) ) : C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );
\r
1274 Cチップ cチップ3 = new Cチップ();
\r
1275 cチップ3.nチャンネル番号00toFF = nCh;
\r
1276 cチップ3.nレーン番号0to = num20;
\r
1277 cチップ3.n位置grid = i;
\r
1278 cチップ3.n読み込み時の解像度 = nChips;
\r
1279 cチップ3.n値・整数1to1295 = nChipNo;
\r
1281 c小節3.listチップ.Add( cチップ3 );
\r
1286 StringBuilder builder = new StringBuilder( 0x400 );
\r
1287 builder.Append( "#" + C変換.str小節番号を文字列3桁に変換して返す( nBar ) + C変換.str数値を16進数2桁に変換して返す( nCh ) + ": " + strパラメータ );
\r
1288 if( strコメント.Length > 0 )
\r
1290 builder.Append( " ;" + strコメント );
\r
1292 builder.Append( Environment.NewLine );
\r
1293 CUndoRedo管理.bUndoRedoした直後 = true;
\r
1294 this._Form.textBox自由入力欄.AppendText( builder.ToString() );
\r
1297 private int tDTX入力・行解析・チャンネル・GDAチャンネル文字列2桁をチャンネル番号にして返す( string strチャンネル文字列2桁 )
\r
1299 if( strチャンネル文字列2桁.Length == 2 )
\r
1301 switch( strチャンネル文字列2桁.ToUpper() )
\r
1490 // #25990 2011.8.12 yyagi BMS/BME→DTX変換メイン
\r
1491 private int tDTX入力・行解析・チャンネル・BMSチャンネル文字列2桁をチャンネル番号にして返す( string strチャンネル文字列2桁, int bar, E種別 eType )
\r
1493 if ( bar >= 0 && strチャンネル文字列2桁.Length == 2 )
\r
1495 if ( nLastBarConverted != bar ) // 小節が変わったら、BGM用に使うch群
\r
1497 nLastBarConverted = bar;
\r
1498 eDTXbgmChs.Reset();
\r
1501 int bmsCh = Convert.ToInt32( strチャンネル文字列2桁, 16 );
\r
1502 if ( bmsCh == 0x01 ) // BGMなら
\r
1504 if ( !eDTXbgmChs.MoveNext() ) // BGM用に使うSEチャネルの空きがもう無い
\r
1508 return (int) eDTXbgmChs.Current;
\r
1510 else if ( 0x11 <= bmsCh && bmsCh <= 0x19 ) // 鍵盤なら
\r
1512 return ( eType == E種別.BMS ) ? BMSkeyChToDTXdrumsCh[ bmsCh - 0x11 ] : BMEkeyChToDTXdrumsCh[ bmsCh - 0x11 ];
\r
1516 return BMSgeneralChToDTXgeneralCh[ bmsCh ];
\r
1521 private bool tDTX入力・行解析・チャンネル・コマンドから小節番号とチャンネル番号を抜き出す( string strコマンド, out int n小節番号, out int nチャンネル番号 )
\r
1523 if( strコマンド.Length >= 5 )
\r
1525 n小節番号 = C変換.n小節番号の文字列3桁を数値に変換して返す( strコマンド.Substring( 0, 3 ) );
\r
1526 if( ( this.e種別 == E種別.GDA ) || ( this.e種別 == E種別.G2D ) )
\r
1528 nチャンネル番号 = this.tDTX入力・行解析・チャンネル・GDAチャンネル文字列2桁をチャンネル番号にして返す( strコマンド.Substring( 3, 2 ) );
\r
1530 else if( ( this.e種別 == E種別.BMS ) || ( this.e種別 == E種別.BME ) ) // #25990 2011.8.12 yyagi
\r
1532 nチャンネル番号 = this.tDTX入力・行解析・チャンネル・BMSチャンネル文字列2桁をチャンネル番号にして返す( strコマンド.Substring( 3, 2 ), n小節番号, this.e種別 );
\r
1536 nチャンネル番号 = C変換.n16進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 3, 2 ) );
\r
1538 return ( ( n小節番号 >= 0 ) && ( nチャンネル番号 > 0 ) );
\r
1544 private bool tDTX入力・行解析・チャンネル・チャンネルに該当するレーン番号を返す( int nチャンネル番号, out int nレーン番号, out bool b裏 )
\r
1548 for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ )
\r
1550 Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ];
\r
1551 if( cレーン.nチャンネル番号・表00toFF == nチャンネル番号 )
\r
1557 if( cレーン.nチャンネル番号・裏00toFF == nチャンネル番号 )
\r
1566 private C小節 tDTX入力・行解析・チャンネル・小節番号に対応する小節を探すか新規に作って返す( int n小節番号 )
\r
1568 C小節 c小節 = this._Form.mgr譜面管理者.p小節を返す( n小節番号 );
\r
1571 if( n小節番号 > this._Form.mgr譜面管理者.n現在の最大の小節番号を返す() )
\r
1573 for( int i = this._Form.mgr譜面管理者.n現在の最大の小節番号を返す() + 1; i <= n小節番号; i++ )
\r
1575 c小節 = new C小節( i );
\r
1576 this._Form.mgr譜面管理者.dic小節.Add( i, c小節 );
\r
1580 c小節 = new C小節( n小節番号 );
\r
1581 this._Form.mgr譜面管理者.dic小節.Add( n小節番号, c小節 );
\r
1585 private void tDTX入力・小節長倍率配列を昇順ソート済みの小節リストに適用する()
\r
1588 for( int i = 0; i < this._Form.mgr譜面管理者.dic小節.Count; i++ )
\r
1590 C小節 c小節 = this._Form.mgr譜面管理者.dic小節[ i ];
\r
1591 foreach( KeyValuePair<int, float> pair in this.dic小節長倍率 )
\r
1593 if( c小節.n小節番号0to3599 == pair.Key )
\r
1599 for( int j = 0; j < c小節.listチップ.Count; j++ )
\r
1601 c小節.listチップ[ j ].n位置grid = ( c小節.listチップ[ j ].n位置grid * c小節.n小節長倍率を考慮した現在の小節の高さgrid ) / c小節.listチップ[ j ].n読み込み時の解像度;
\r
1605 private void tDTX入力・小節内のチップリストを発声位置でソートする()
\r
1607 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
1609 pair.Value.listチップ.Sort();
\r
1613 private void tDTX出力・AVIリスト( StreamWriter sw )
\r
1616 for( int i = 1; i <= 36 * 36 - 1; i++ )
\r
1618 CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );
\r
1619 if( ( cavi != null ) && ( cavi.strファイル名.Length > 0 ) )
\r
1621 string str = C変換.str数値を36進数2桁に変換して返す( cavi.nAVI番号1to1295 );
\r
1622 sw.Write( "#AVI{0}: {1}", str, cavi.strファイル名 );
\r
1623 if( cavi.strラベル名.Length > 0 )
\r
1625 sw.Write( "\t;{0}", cavi.strラベル名 );
\r
1631 private void tDTX出力・AVIリスト色設定( StreamWriter sw )
\r
1633 Color color = ColorTranslator.FromHtml( "window" );
\r
1634 Color color2 = ColorTranslator.FromHtml( "windowtext" );
\r
1635 for( int i = 1; i <= 36 * 36 - 1; i++ )
\r
1637 CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );
\r
1638 if( cavi != null )
\r
1640 if( cavi.col文字色 != color2 )
\r
1642 sw.WriteLine( "#DTXC_AVIFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cavi.col文字色 ) );
\r
1644 if( cavi.col背景色 != color )
\r
1646 sw.WriteLine( "#DTXC_AVIBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cavi.col背景色 ) );
\r
1651 private void tDTX出力・BMPリスト( StreamWriter sw )
\r
1654 for( int i = 1; i <= 36 * 36 - 1; i++ )
\r
1656 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );
\r
1657 if( ( cbmp != null ) && ( cbmp.strファイル名.Length > 0 ) )
\r
1659 string str = C変換.str数値を36進数2桁に変換して返す( cbmp.nBMP番号1to1295 );
\r
1660 if( !cbmp.bテクスチャ )
\r
1662 sw.Write( "#BMP{0}: {1}", str, cbmp.strファイル名 );
\r
1663 if( cbmp.strラベル名.Length > 0 )
\r
1665 sw.Write( "\t;{0}", cbmp.strラベル名 );
\r
1671 sw.Write( "#BMPTEX{0}: {1}", str, cbmp.strファイル名 );
\r
1672 if( cbmp.strラベル名.Length > 0 )
\r
1674 sw.Write( "\t;{0}", cbmp.strラベル名 );
\r
1681 private void tDTX出力・BMPリスト色設定( StreamWriter sw )
\r
1683 Color color = ColorTranslator.FromHtml( "window" );
\r
1684 Color color2 = ColorTranslator.FromHtml( "windowtext" );
\r
1685 for( int i = 1; i <= 36 * 36 - 1; i++ )
\r
1687 CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );
\r
1688 if( cbmp != null )
\r
1690 if( cbmp.col文字色 != color2 )
\r
1692 sw.WriteLine( "#DTXC_BMPFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cbmp.col文字色 ) );
\r
1694 if( cbmp.col背景色 != color )
\r
1696 sw.WriteLine( "#DTXC_BMPBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cbmp.col背景色 ) );
\r
1701 private void tDTX出力・BPxリスト( StreamWriter sw )
\r
1704 foreach( KeyValuePair<int, float> pair in this._Form.mgr譜面管理者.dicBPx )
\r
1706 sw.WriteLine( "#BPM{0}: {1}", C変換.str数値を36進数2桁に変換して返す( pair.Key ), pair.Value );
\r
1709 private void tDTX出力・WAVリスト( StreamWriter sw, bool bBGMのみ出力 )
\r
1712 for( int i = 1; i <= 36 * 36 - 1; i++ )
\r
1714 CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );
\r
1715 if( ( ( cwav != null ) && ( cwav.strファイル名.Length > 0 ) ) && ( !bBGMのみ出力 || cwav.bBGMとして使用 ) )
\r
1717 string str = C変換.str数値を36進数2桁に変換して返す( cwav.nWAV番号1to1295 );
\r
1718 sw.Write( "#WAV{0}: {1}", str, cwav.strファイル名 );
\r
1719 if( cwav.strラベル名.Length > 0 )
\r
1721 sw.Write( "\t;{0}", cwav.strラベル名 );
\r
1724 if( cwav.n音量0to100 != 100 )
\r
1726 sw.WriteLine( "#VOLUME{0}: {1}", str, cwav.n音量0to100.ToString() );
\r
1728 if( cwav.n位置_100to100 != 0 )
\r
1730 sw.WriteLine( "#PAN{0}: {1}", str, cwav.n位置_100to100.ToString() );
\r
1732 if( cwav.bBGMとして使用 )
\r
1734 sw.WriteLine( "#BGMWAV: {0}", str );
\r
1739 private void tDTX出力・WAVリスト色設定( StreamWriter sw )
\r
1741 Color color = ColorTranslator.FromHtml( "window" );
\r
1742 Color color2 = ColorTranslator.FromHtml( "windowtext" );
\r
1743 for( int i = 1; i <= 36 * 36 - 1; i++ )
\r
1745 CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );
\r
1746 if( cwav != null )
\r
1748 if( cwav.col文字色 != color2 )
\r
1750 sw.WriteLine( "#DTXC_WAVFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cwav.col文字色 ) );
\r
1752 if( cwav.col背景色 != color )
\r
1754 sw.WriteLine( "#DTXC_WAVBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cwav.col背景色 ) );
\r
1759 private void tDTX出力・タイトルと製作者とコメントその他( StreamWriter sw )
\r
1762 if( this._Form.textBox曲名.Text.Length == 0 )
\r
1764 sw.WriteLine( "#TITLE: (no title)" );
\r
1768 sw.WriteLine( "#TITLE: " + this._Form.textBox曲名.Text );
\r
1770 if( this._Form.textBox製作者.Text.Length > 0 )
\r
1772 sw.WriteLine( "#ARTIST: " + this._Form.textBox製作者.Text );
\r
1774 if( this._Form.textBoxコメント.Text.Length > 0 )
\r
1776 sw.WriteLine( "#COMMENT: " + this._Form.textBoxコメント.Text );
\r
1778 if( this._Form.textBoxパネル.Text.Length > 0 )
\r
1780 sw.WriteLine( "#PANEL: " + this._Form.textBoxパネル.Text );
\r
1782 if( this._Form.textBoxPREVIEW.Text.Length > 0 )
\r
1784 sw.WriteLine( "#PREVIEW: " + this._Form.textBoxPREVIEW.Text );
\r
1786 if( this._Form.textBoxPREIMAGE.Text.Length > 0 )
\r
1788 sw.WriteLine( "#PREIMAGE: " + this._Form.textBoxPREIMAGE.Text );
\r
1790 if( this._Form.textBoxSTAGEFILE.Text.Length > 0 )
\r
1792 sw.WriteLine( "#STAGEFILE: " + this._Form.textBoxSTAGEFILE.Text );
\r
1794 if( this._Form.textBoxBACKGROUND.Text.Length > 0 )
\r
1796 sw.WriteLine( "#BACKGROUND: " + this._Form.textBoxBACKGROUND.Text );
\r
1798 if( this._Form.textBoxRESULTIMAGE.Text.Length > 0 )
\r
1800 sw.WriteLine( "#RESULTIMAGE: " + this._Form.textBoxRESULTIMAGE.Text );
\r
1802 if( this._Form.numericUpDownBPM.Value != 0M )
\r
1804 sw.WriteLine( "#BPM: " + this._Form.numericUpDownBPM.Value );
\r
1806 if( this._Form.hScrollBarDLEVEL.Value != 0 )
\r
1808 sw.WriteLine( "#DLEVEL: " + this._Form.hScrollBarDLEVEL.Value );
\r
1810 if( this._Form.hScrollBarGLEVEL.Value != 0 )
\r
1812 sw.WriteLine( "#GLEVEL: " + this._Form.hScrollBarGLEVEL.Value );
\r
1814 if( this._Form.hScrollBarBLEVEL.Value != 0 )
\r
1816 sw.WriteLine( "#BLEVEL: " + this._Form.hScrollBarBLEVEL.Value );
\r
1818 if( this._Form.mgr譜面管理者.strPATH_WAV.Length != 0 )
\r
1820 sw.WriteLine( "#PATH_WAV: " + this._Form.mgr譜面管理者.strPATH_WAV );
\r
1822 if( this._Form.toolStripComboBox演奏速度.SelectedIndex != 5 )
\r
1824 sw.WriteLine( "#DTXVPLAYSPEED: " + ( 1.5f - ( this._Form.toolStripComboBox演奏速度.SelectedIndex * 0.1f ) ) );
\r
1827 private void tDTX出力・チップパレット( StreamWriter sw )
\r
1829 sw.Write( "#DTXC_CHIPPALETTE: " );
\r
1830 foreach( ListViewItem item in this._Form.dlgチップパレット.listViewチップリスト.Items )
\r
1832 sw.Write( " {0},{1}", item.ImageIndex, item.SubItems[ 1 ].Text );
\r
1836 private void tDTX出力・レーン割付チップ( StreamWriter sw )
\r
1839 for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ )
\r
1841 Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ];
\r
1842 if( ( cレーン.nレーン割付チップ・表0or1to1295 > 0 ) || ( cレーン.nレーン割付チップ・裏0or1to1295 > 0 ) )
\r
1844 sw.WriteLine( "#DTXC_LANEBINDEDCHIP: {0} {1} {2}", i.ToString( "00" ), C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・表0or1to1295 ), C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・裏0or1to1295 ) );
\r
1848 private void tDTX出力・自由入力欄( StreamWriter sw )
\r
1851 if( this._Form.textBox自由入力欄.Text.Length > 0 )
\r
1854 sw.Write( this._Form.textBox自由入力欄.Text );
\r
1858 private void tDTX出力・小節長倍率( StreamWriter sw )
\r
1862 for( int i = 0; i < this._Form.mgr譜面管理者.dic小節.Count; i++ )
\r
1864 C小節 c小節 = this._Form.mgr譜面管理者.dic小節[ i ];
\r
1865 if( c小節.f小節長倍率 != num )
\r
1868 sw.WriteLine( "#{0}02: {1}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), num );
\r
1872 private void tDTX出力・全チップ( StreamWriter sw )
\r
1875 foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )
\r
1877 C小節 c小節 = pair.Value;
\r
1878 List<int> list = new List<int>();
\r
1879 foreach( Cチップ cチップ in c小節.listチップ )
\r
1881 if( list.IndexOf( cチップ.nチャンネル番号00toFF ) < 0 )
\r
1883 list.Add( cチップ.nチャンネル番号00toFF );
\r
1886 int[,] numArray = new int[ c小節.n小節長倍率を考慮した現在の小節の高さgrid, 2 ];
\r
1887 foreach( int num in list )
\r
1891 for( int num2 = 0; num2 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num2++ )
\r
1893 numArray[ num2, 0 ] = numArray[ num2, 1 ] = 0;
\r
1895 foreach( Cチップ cチップ2 in c小節.listチップ )
\r
1897 if( cチップ2.nチャンネル番号00toFF == num )
\r
1899 numArray[ cチップ2.n位置grid, 0 ] = cチップ2.n値・整数1to1295;
\r
1903 for( int num4 = 0; num4 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num4++ )
\r
1905 num3 += numArray[ num4, 0 ];
\r
1909 int num5 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
1910 foreach( int num6 in this.arr素数リスト )
\r
1912 while( this.tDTX出力・全チップ・解像度をN分の1にできる( num6, ref numArray, num5 ) )
\r
1915 for( int num7 = 0; num7 < num5; num7++ )
\r
1917 numArray[ num7, 0 ] = numArray[ num7 * num6, 0 ];
\r
1921 StringBuilder builder = new StringBuilder();
\r
1922 for( int num8 = 0; num8 < num5; num8++ )
\r
1926 builder.Append( C変換.str数値を16進数2桁に変換して返す( numArray[ num8, 0 ] ) );
\r
1930 builder.Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num8, 0 ] ) );
\r
1933 sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( num ), builder.ToString() );
\r
1937 for( int i = 0; i < c小節.n小節長倍率を考慮した現在の小節の高さgrid; i++ )
\r
1939 numArray[ i, 0 ] = numArray[ i, 1 ] = 0;
\r
1941 foreach( Cチップ cチップ3 in c小節.listチップ )
\r
1943 Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ cチップ3.nレーン番号0to ];
\r
1944 switch( cレーン.eレーン種別 )
\r
1946 case Cレーン.E種別.GtV:
\r
1948 numArray[ cチップ3.n位置grid, 0 ] = cチップ3.n値・整数1to1295;
\r
1951 case Cレーン.E種別.GtR:
\r
1953 numArray[ cチップ3.n位置grid, 1 ] |= ( cチップ3.n値・整数1to1295 == 1 ) ? 0x04 : 0xFF; // OPEN = 0xFF
\r
1956 case Cレーン.E種別.GtG:
\r
1958 numArray[ cチップ3.n位置grid, 1 ] |= 0x02;
\r
1961 case Cレーン.E種別.GtB:
\r
1963 numArray[ cチップ3.n位置grid, 1 ] |= 0x01;
\r
1968 for( int j = 0; j < c小節.n小節長倍率を考慮した現在の小節の高さgrid; j++ )
\r
1970 if( ( numArray[ j, 0 ] == 0 ) || ( numArray[ j, 1 ] == 0 ) )
\r
1972 numArray[ j, 0 ] = 0;
\r
1973 numArray[ j, 1 ] = 0;
\r
1976 int num11 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
1977 foreach( int num12 in this.arr素数リスト )
\r
1979 while( this.tDTX出力・全チップ・解像度をN分の1にできる( num12, ref numArray, num11 ) )
\r
1982 for( int num13 = 0; num13 < num11; num13++ )
\r
1984 numArray[ num13, 0 ] = numArray[ num13 * num12, 0 ];
\r
1985 numArray[ num13, 1 ] = numArray[ num13 * num12, 1 ];
\r
1989 bool[] flagArray = new bool[ 8 ];
\r
1990 for( int k = 0; k < 8; k++ )
\r
1992 flagArray[ k ] = false;
\r
1994 for( int m = 0; m < num11; m++ )
\r
1996 if( numArray[ m, 1 ] == 0xff )
\r
1998 flagArray[ 0 ] = true;
\r
2000 else if( numArray[ m, 1 ] != 0 )
\r
2002 flagArray[ numArray[ m, 1 ] ] = true;
\r
2005 StringBuilder[] builderArray = new StringBuilder[ 8 ];
\r
2006 for( int n = 0; n < 8; n++ )
\r
2008 builderArray[ n ] = new StringBuilder();
\r
2010 for( int num17 = 0; num17 < num11; num17++ )
\r
2012 int num18 = ( numArray[ num17, 1 ] == 0xff ) ? 0x20 : ( numArray[ num17, 1 ] + 0x20 );
\r
2013 for( int num19 = 0; num19 < 8; num19++ )
\r
2015 if( flagArray[ num19 ] )
\r
2017 if( num19 == ( num18 - 0x20 ) )
\r
2019 builderArray[ num19 ].Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num17, 0 ] ) );
\r
2023 builderArray[ num19 ].Append( "00" );
\r
2028 for( int num20 = 0; num20 < 8; num20++ )
\r
2030 if( builderArray[ num20 ].Length != 0 )
\r
2032 sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( 0x20 + num20 ), builderArray[ num20 ].ToString() );
\r
2035 for( int num21 = 0; num21 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num21++ )
\r
2037 numArray[ num21, 0 ] = numArray[ num21, 1 ] = 0;
\r
2039 foreach( Cチップ cチップ4 in c小節.listチップ )
\r
2041 Cレーン cレーン2 = this._Form.mgr譜面管理者.listレーン[ cチップ4.nレーン番号0to ];
\r
2042 switch( cレーン2.eレーン種別 )
\r
2044 case Cレーン.E種別.BsV:
\r
2046 numArray[ cチップ4.n位置grid, 0 ] = cチップ4.n値・整数1to1295;
\r
2049 case Cレーン.E種別.BsR:
\r
2051 numArray[ cチップ4.n位置grid, 1 ] |= ( cチップ4.n値・整数1to1295 == 1 ) ? 4 : 0xff; // OPEN = 0xFF
\r
2054 case Cレーン.E種別.BsG:
\r
2056 numArray[ cチップ4.n位置grid, 1 ] |= 0x02;
\r
2059 case Cレーン.E種別.BsB:
\r
2061 numArray[ cチップ4.n位置grid, 1 ] |= 0x01;
\r
2066 for( int num22 = 0; num22 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num22++ )
\r
2068 if( ( numArray[ num22, 0 ] == 0 ) || ( numArray[ num22, 1 ] == 0 ) )
\r
2070 numArray[ num22, 0 ] = 0;
\r
2071 numArray[ num22, 1 ] = 0;
\r
2074 int num23 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
2075 foreach( int num24 in this.arr素数リスト )
\r
2077 while( this.tDTX出力・全チップ・解像度をN分の1にできる( num24, ref numArray, num23 ) )
\r
2080 for( int num25 = 0; num25 < num23; num25++ )
\r
2082 numArray[ num25, 0 ] = numArray[ num25 * num24, 0 ];
\r
2083 numArray[ num25, 1 ] = numArray[ num25 * num24, 1 ];
\r
2087 bool[] flagArray2 = new bool[ 8 ];
\r
2088 for( int num26 = 0; num26 < 8; num26++ )
\r
2090 flagArray2[ num26 ] = false;
\r
2092 for( int num27 = 0; num27 < num23; num27++ )
\r
2094 if( numArray[ num27, 1 ] == 0xff )
\r
2096 flagArray2[ 0 ] = true;
\r
2098 else if( numArray[ num27, 1 ] != 0 )
\r
2100 flagArray2[ numArray[ num27, 1 ] ] = true;
\r
2103 StringBuilder[] builderArray2 = new StringBuilder[ 8 ];
\r
2104 for( int num28 = 0; num28 < 8; num28++ )
\r
2106 builderArray2[ num28 ] = new StringBuilder();
\r
2108 for( int num29 = 0; num29 < num23; num29++ )
\r
2110 int num30 = ( numArray[ num29, 1 ] == 0xff ) ? 160 : ( numArray[ num29, 1 ] + 160 );
\r
2111 for( int num31 = 0; num31 < 8; num31++ )
\r
2113 if( flagArray2[ num31 ] )
\r
2115 if( num31 == ( num30 - 160 ) )
\r
2117 builderArray2[ num31 ].Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num29, 0 ] ) );
\r
2121 builderArray2[ num31 ].Append( "00" );
\r
2126 for( int num32 = 0; num32 < 8; num32++ )
\r
2128 if( builderArray2[ num32 ].Length != 0 )
\r
2130 sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( 160 + num32 ), builderArray2[ num32 ].ToString() );
\r
2135 private bool tDTX出力・全チップ・解像度をN分の1にできる( int N, ref int[ , ] arrチップ配列, int n現在の解像度 )
\r
2137 if( ( n現在の解像度 % N ) != 0 )
\r
2141 for( int i = 0; i < ( n現在の解像度 / N ); i++ )
\r
2143 for( int j = 1; j < N; j++ )
\r
2145 if( arrチップ配列[ ( i * N ) + j, 0 ] != 0 )
\r
2154 #region [#23880 2010.12.30 yyagi: コンマとスペースの両方を小数点として扱うTryParse]
\r
2156 /// 小数点としてコンマとピリオドの両方を受け付けるTryParse()
\r
2158 /// <param name="s">strings convert to double</param>
\r
2159 /// <param name="result">parsed double value</param>
\r
2160 /// <returns>s が正常に変換された場合は true。それ以外の場合は false。</returns>
\r
2161 /// <exception cref="ArgumentException">style が NumberStyles 値でないか、style に NumberStyles.AllowHexSpecifier 値が含まれている</exception>
\r
2162 private bool TryParse(string s, out decimal result)
\r
2163 { // #23880 2010.12.30 yyagi: alternative TryParse to permit both '.' and ',' for decimal point
\r
2164 // EU諸国での #BPM 123,45 のような記述に対応するため、
\r
2165 // 小数点の最終位置を検出して、それをlocaleにあった
\r
2166 // 文字に置き換えてからTryParse()する
\r
2169 const string DecimalSeparators = ".,"; // 小数点文字
\r
2170 const string GroupSeparators = ".,' "; // 桁区切り文字
\r
2171 const string NumberSymbols = "0123456789"; // 数値文字
\r
2173 int len = s.Length; // 文字列長
\r
2174 int decimalPosition = len; // 真の小数点の位置 最初は文字列終端位置に仮置きする
\r
2176 for (int i = 0; i < len; i++)
\r
2177 { // まず、真の小数点(一番最後に現れる小数点)の位置を求める
\r
2179 if (NumberSymbols.IndexOf(c) >= 0)
\r
2183 else if (DecimalSeparators.IndexOf(c) >= 0)
\r
2184 { // 小数点文字だったら、その都度位置を上書き記憶
\r
2185 decimalPosition = i;
\r
2187 else if (GroupSeparators.IndexOf(c) >= 0)
\r
2188 { // 桁区切り文字の場合もスキップ
\r
2192 { // 数値・小数点・区切り文字以外がきたらループ終了
\r
2197 StringBuilder decimalStr = new StringBuilder(16);
\r
2198 for (int i = 0; i < len; i++)
\r
2199 { // 次に、localeにあった数値文字列を生成する
\r
2201 if (NumberSymbols.IndexOf(c) >= 0)
\r
2203 decimalStr.Append(c); // そのままコピー
\r
2205 else if (DecimalSeparators.IndexOf(c) >= 0)
\r
2207 if (i == decimalPosition)
\r
2208 { // 最後に出現した小数点文字なら、localeに合った小数点を出力する
\r
2209 decimalStr.Append(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
\r
2212 else if (GroupSeparators.IndexOf(c) >= 0)
\r
2214 continue; // 何もしない(スキップ)
\r
2221 return decimal.TryParse(decimalStr.ToString(), out result); // 最後に、自分のlocale向けの文字列に対してTryParse実行
\r
2224 //-----------------
\r