+++ /dev/null
-using System;\r
-using System.Collections;\r
-using System.Collections.Generic;\r
-using System.Globalization;\r
-using System.Text;\r
-using System.IO;\r
-using System.Windows.Forms;\r
-using System.Drawing;\r
-using DTXCreator.Properties;\r
-using DTXCreator.譜面;\r
-using DTXCreator.UndoRedo;\r
-using DTXCreator.WAV_BMP_AVI;\r
-using FDK;\r
-using System.Diagnostics;\r
-\r
-namespace DTXCreator\r
-{\r
- internal class CDTX入出力\r
- {\r
- internal CDTX入出力( Cメインフォーム mf )\r
- {\r
- this._Form = mf;\r
- }\r
- public void tDTX出力( StreamWriter sw )\r
- {\r
- this.tDTX出力( sw, false );\r
- }\r
- public void tDTX出力( StreamWriter sw, bool bBGMのみ出力 )\r
- {\r
- sw.WriteLine( "; Created by DTXCreator " + Resources.DTXC_VERSION );\r
- this.tDTX出力_タイトルと製作者とコメントその他( sw );\r
- this.tDTX出力_自由入力欄( sw );\r
- this.tDTX出力_WAVリスト( sw, bBGMのみ出力 );\r
- this.tDTX出力_BMPリスト( sw );\r
- this.tDTX出力_AVIリスト( sw );\r
- this.tDTX出力_小節長倍率( sw );\r
- this.tDTX出力_BPxリスト( sw );\r
- this.tDTX出力_BEATチップのf値( sw );\r
- this.tDTX出力_全チップ( sw );\r
- sw.WriteLine();\r
- this.tDTX出力_レーン割付チップ( sw );\r
- this.tDTX出力_WAVリスト色設定( sw );\r
- this.tDTX出力_BMPリスト色設定( sw );\r
- this.tDTX出力_AVIリスト色設定( sw );\r
- this.tDTX出力_チップパレット( sw );\r
- }\r
- public void tDTX入力( E種別 e種別, ref string str全入力文字列 )\r
- {\r
- this.e種別 = e種別;\r
- if( str全入力文字列.Length != 0 )\r
- {\r
- this.dic小節長倍率 = new Dictionary<int, float>();\r
- this.dicBEATチップf値 = new Dictionary<int, float>();\r
- this.listチップパレット = new List<int>();\r
- this.listBGMWAV番号 = new List<int>(); // #26775 2011.11.21 yyagi\r
- this.nLastBarConverted = -1;\r
- this.eDTXbgmChs = DTXbgmChs.GetEnumerator();\r
- this._Form.listViewWAVリスト.BeginUpdate();\r
- this._Form.listViewBMPリスト.BeginUpdate();\r
- this._Form.listViewAVIリスト.BeginUpdate();\r
- str全入力文字列 = str全入力文字列.Replace( Environment.NewLine, "\n" );\r
- str全入力文字列 = str全入力文字列.Replace( '\t', ' ' );\r
- StringBuilder builder = new StringBuilder();\r
- CharEnumerator ce = str全入力文字列.GetEnumerator();\r
- if( ce.MoveNext() )\r
- {\r
- do\r
- {\r
- if( !this.tDTX入力_空白と改行をスキップする( ref ce ) )\r
- {\r
- break;\r
- }\r
- if( ce.Current == '#' )\r
- {\r
- if( ce.MoveNext() )\r
- {\r
- StringBuilder sbコマンド文字列 = new StringBuilder( 0x20 );\r
- if( this.tDTX入力_コマンド文字列を抜き出す( ref ce, ref sbコマンド文字列 ) )\r
- {\r
- StringBuilder sbパラメータ文字列 = new StringBuilder( 0x400 );\r
- if( this.tDTX入力_パラメータ文字列を抜き出す( ref ce, ref sbパラメータ文字列 ) )\r
- {\r
- StringBuilder sbコメント文字列 = new StringBuilder( 0x400 );\r
- if( this.tDTX入力_コメント文字列を抜き出す( ref ce, ref sbコメント文字列 ) )\r
- {\r
- if( !this.tDTX入力_行解析( ref sbコマンド文字列, ref sbパラメータ文字列, ref sbコメント文字列 ) )\r
- {\r
- builder.Append( string.Concat( "#", sbコマンド文字列, ": ", sbパラメータ文字列 ) );\r
- if( sbコメント文字列.Length > 0 )\r
- {\r
- builder.Append( "\t;" + sbコメント文字列 );\r
- }\r
- builder.Append( Environment.NewLine );\r
- }\r
- continue;\r
- }\r
- }\r
- }\r
- }\r
- break;\r
- }\r
- }\r
- while( this.tDTX入力_コメントをスキップする( ref ce ) );\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBox自由入力欄.Text = this._Form.textBox自由入力欄.Text + builder.ToString();\r
- this.tDTX入力_小節内のチップリストを発声位置でソートする();\r
- this.tDTX入力_小節長倍率配列を昇順ソート済みの小節リストに適用する();\r
- this.tDTX入力_BPMチップにBPx数値をバインドする();\r
- this.tDTX入力_キャッシュからListViewを一括構築する();\r
- this.tDTX入力_チップパレットのListViewを一括構築する();\r
- //this.tDTX入力_BEATチップにf値をバインドする();\r
- if ( this.listBGMWAV番号.Count > 0 ) // #26775 2011.11.21 yyagi\r
- {\r
- foreach ( int nBGMWAV番号 in listBGMWAV番号 ) // #26775 2011.11.21 yyagi\r
- {\r
- this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す_なければ新規生成する( nBGMWAV番号 ).bBGMとして使用 = true;\r
- }\r
- }\r
- this._Form.listViewWAVリスト.EndUpdate();\r
- this._Form.listViewBMPリスト.EndUpdate();\r
- this._Form.listViewAVIリスト.EndUpdate();\r
- }\r
- }\r
- }\r
-\r
- public enum E種別\r
- {\r
- DTX,\r
- GDA,\r
- G2D,\r
- BMS,\r
- BME\r
- }\r
-\r
- #region [ private ]\r
- //-----------------\r
- private Cメインフォーム _Form;\r
- private int[] arr素数リスト = new int[] {\r
- 2, 3, 5, 7, 11, 13, 0x11, 0x13, 0x17, 0x1d, 0x1f, 0x25, 0x29, 0x2b, 0x2f, 0x35, \r
- 0x3b, 0x3d, 0x43, 0x47, 0x49, 0x4f, 0x53, 0x59, 0x61, 0x65, 0x67, 0x6b, 0x6d, 0x71, 0x7f, 0x83, \r
- 0x89, 0x8b, 0x95, 0x97, 0x9d, 0xa3, 0xa7, 0xad, 0xb3, 0xb5, 0xbf, 0xc1, 0xc5, 0xc7, 0xd3, 0xdf, \r
- 0xe3, 0xe5, 0xe9, 0xef, 0xf1, 0xfb, 0x101, 0x107, 0x10d, 0x10f, 0x115, 0x119, 0x11b, 0x125, 0x133, 0x137, \r
- 0x139, 0x13d, 0x14b, 0x151, 0x15b, 0x15d, 0x161, 0x167, 0x16f, 0x175, 0x17b, 0x17f\r
- };\r
-#region [ #25990; for BMS/BME to DTX conversion ]\r
- // #25990 2011.8.12 yyagi: DTXのBGM用ch群(正確には効果音用ch群)\r
- private readonly int[] DTXbgmChs = new int[] {\r
- 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,\r
- 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,\r
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,\r
- 0x90, 0x91, 0x92\r
- };\r
- // #25990 2011.8.12 yyagi: BMS/BME→DTX チャネル変換テーブル(BGMとキーを除いて、右から左にそのまま変換)\r
- private readonly int[] BMSgeneralChToDTXgeneralCh = {\r
- 0x00, -1, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,\r
- 0x10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
- 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,\r
- 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,\r
- 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,\r
- 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,\r
- 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,\r
- 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\r
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,\r
- 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,\r
- 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,\r
- 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,\r
- 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,\r
- 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,\r
- 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,\r
- 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF\r
- };\r
- // #25990 2011.8.12 yyagi: BMS→DTXの、キー関係の変換表 (5鍵ならHH~LTとCYを使用)\r
- private readonly int[] BMSkeyChToDTXdrumsCh = {\r
- // 1key 2key, 3key, 4key, 5key, scr, free\r
- 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x53\r
- // HC, SD, BD, HT, LT, CY, FI\r
- };\r
- // #25990 2011.8.12 yyagi: BME→DTXの、キー関係の変換表 (7鍵ならLC~FTとCYを使用)\r
- private readonly int[] BMEkeyChToDTXdrumsCh = {\r
- // 1key 2key, 3key, 4key, 5key, scr, free, 6key, 7key\r
- 0x1A, 0x11, 0x12, 0x13, 0x14, 0x16, 0x53, 0x15, 0x17\r
- // LC, HC, SD, BD, HT, CY, FI, LT, FT\r
- };\r
- private int nLastBarConverted = -1; // #25990 2011.8.12 yyagi BMS/BME→DTX変換用\r
- private IEnumerator eDTXbgmChs; // #25990 2011.8.12 yyagi BMS/BME→DTX変換用\r
-#endregion\r
- private Dictionary<int, float> dic小節長倍率;\r
- private Dictionary<int, float> dicBEATチップf値;\r
- private E種別 e種別;\r
- private List<int> listチップパレット;\r
- private List<int> listBGMWAV番号 = null; // #26775 2011.11.21 yyagi\r
- \r
- private void tDTX入力_BPMチップにBPx数値をバインドする()\r
- {\r
- foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
- {\r
- C小節 c小節 = pair.Value;\r
- for( int i = 0; i < c小節.listチップ.Count; i++ )\r
- {\r
- Cチップ cチップ = c小節.listチップ[ i ];\r
- float num2 = 0f;\r
- if( ( cチップ.nチャンネル番号00toFF == 8 ) && this._Form.mgr譜面管理者.dicBPx.TryGetValue( cチップ.n値_整数1to1295, out num2 ) )\r
- {\r
- cチップ.f値_浮動小数 = num2;\r
- }\r
- if( cチップ.nチャンネル番号00toFF == 3 )\r
- {\r
- cチップ.nチャンネル番号00toFF = 8;\r
- cチップ.f値_浮動小数 = cチップ.n値_整数1to1295;\r
- cチップ.b裏 = false;\r
- for( int j = 1; j <= 36 * 36 - 1; j++ )\r
- {\r
- if( !this._Form.mgr譜面管理者.dicBPx.ContainsKey( j ) )\r
- {\r
- this._Form.mgr譜面管理者.dicBPx.Add( j, cチップ.f値_浮動小数);\r
- cチップ.n値_整数1to1295 = j;\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- }\r
- }\r
- //private void tDTX入力_BEATチップにf値をバインドする()\r
- //{\r
- // foreach ( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
- // {\r
- // C小節 c小節 = pair.Value;\r
- // for ( int i = 0; i < c小節.listチップ.Count; i++ )\r
- // {\r
- // Cチップ cチップ = c小節.listチップ[ i ];\r
- // float num2 = 0f;\r
- // if ( ( cチップ.nチャンネル番号00toFF == 0xF8 || cチップ.nチャンネル番号00toFF == 0xF3 )\r
- // && this._Form.mgr譜面管理者.dicBPx.TryGetValue( cチップ.n値・整数1to1295, out num2 ) )\r
- // {\r
- // cチップ.f値・浮動小数 = num2;\r
- // }\r
- // if ( cチップ.nチャンネル番号00toFF == 3 )\r
- // {\r
- // cチップ.nチャンネル番号00toFF = 8;\r
- // cチップ.f値・浮動小数 = cチップ.n値・整数1to1295;\r
- // cチップ.b裏 = false;\r
- // for ( int j = 1; j <= 36 * 36 - 1; j++ )\r
- // {\r
- // if ( !this._Form.mgr譜面管理者.dicBPx.ContainsKey( j ) )\r
- // {\r
- // this._Form.mgr譜面管理者.dicBPx.Add( j, cチップ.f値・浮動小数 );\r
- // cチップ.n値・整数1to1295 = j;\r
- // break;\r
- // }\r
- // }\r
- // }\r
- // }\r
- // }\r
- //}\r
-\r
- private void tDTX入力_キャッシュからListViewを一括構築する()\r
- {\r
- for( int i = 1; i <= 36 * 36 - 1; i++ )\r
- {\r
- CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );\r
- if( cwav != null )\r
- {\r
- cwav.tコピーto( this._Form.listViewWAVリスト.Items[ i - 1 ] );\r
- }\r
- CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );\r
- if( cbmp != null )\r
- {\r
- cbmp.tコピーto( this._Form.listViewBMPリスト.Items[ i - 1 ] );\r
- }\r
- CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );\r
- if( cavi != null )\r
- {\r
- cavi.tコピーto( this._Form.listViewAVIリスト.Items[ i - 1 ] );\r
- }\r
- }\r
- }\r
- private bool tDTX入力_コマンド文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
- {\r
- if( this.tDTX入力_空白をスキップする( ref ce ) )\r
- {\r
- while( ( ( ce.Current != ':' ) && ( ce.Current != ' ' ) ) && ( ( ce.Current != ';' ) && ( ce.Current != '\n' ) ) )\r
- {\r
- sb文字列.Append( ce.Current );\r
- if( !ce.MoveNext() )\r
- {\r
- return false;\r
- }\r
- }\r
- if( ce.Current == ':' )\r
- {\r
- if( !ce.MoveNext() )\r
- {\r
- return false;\r
- }\r
- if( !this.tDTX入力_空白をスキップする( ref ce ) )\r
- {\r
- return false;\r
- }\r
- }\r
- return true;\r
- }\r
- return false;\r
- }\r
- private bool tDTX入力_コメントをスキップする( ref CharEnumerator ce )\r
- {\r
- while( ce.Current != '\n' )\r
- {\r
- if( !ce.MoveNext() )\r
- {\r
- return false;\r
- }\r
- }\r
- return ce.MoveNext();\r
- }\r
- private bool tDTX入力_コメント文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
- {\r
- if( ce.Current != ';' )\r
- {\r
- return true;\r
- }\r
- if( ce.MoveNext() )\r
- {\r
- while( ce.Current != '\n' )\r
- {\r
- sb文字列.Append( ce.Current );\r
- if( !ce.MoveNext() )\r
- {\r
- return false;\r
- }\r
- }\r
- return true;\r
- }\r
- return false;\r
- }\r
- private void tDTX入力_チップパレットのListViewを一括構築する()\r
- {\r
- for( int i = 0; i < ( this.listチップパレット.Count / 2 ); i += 2 )\r
- {\r
- int num2 = this.listチップパレット[ i * 2 ];\r
- int num3 = this.listチップパレット[ ( i * 2 ) + 1 ];\r
- string[] items = new string[ 3 ];\r
- switch( num2 )\r
- {\r
- case 0:\r
- {\r
- CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( num3 );\r
- if( cwav != null )\r
- {\r
- items[ 0 ] = cwav.strラベル名;\r
- items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );\r
- items[ 2 ] = cwav.strファイル名;\r
- ListViewItem item = new ListViewItem( items );\r
- item.ImageIndex = num2;\r
- item.ForeColor = cwav.col文字色;\r
- item.BackColor = cwav.col背景色;\r
- this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item );\r
- }\r
- break;\r
- }\r
- case 1:\r
- {\r
- CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( num3 );\r
- if( cbmp != null )\r
- {\r
- items[ 0 ] = cbmp.strラベル名;\r
- items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );\r
- items[ 2 ] = cbmp.strファイル名;\r
- ListViewItem item2 = new ListViewItem( items );\r
- item2.ImageIndex = num2;\r
- item2.ForeColor = cbmp.col文字色;\r
- item2.BackColor = cbmp.col背景色;\r
- this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item2 );\r
- }\r
- break;\r
- }\r
- case 2:\r
- {\r
- CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( num3 );\r
- if( cavi != null )\r
- {\r
- items[ 0 ] = cavi.strラベル名;\r
- items[ 1 ] = C変換.str数値を36進数2桁に変換して返す( num3 );\r
- items[ 2 ] = cavi.strファイル名;\r
- ListViewItem item3 = new ListViewItem( items );\r
- item3.ImageIndex = num2;\r
- item3.ForeColor = cavi.col文字色;\r
- item3.BackColor = cavi.col背景色;\r
- this._Form.dlgチップパレット.listViewチップリスト.Items.Add( item3 );\r
- }\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- private bool tDTX入力_パラメータ文字列を抜き出す( ref CharEnumerator ce, ref StringBuilder sb文字列 )\r
- {\r
- if( this.tDTX入力_空白をスキップする( ref ce ) )\r
- {\r
- while( ( ce.Current != '\n' ) && ( ce.Current != ';' ) )\r
- {\r
- sb文字列.Append( ce.Current );\r
- if( !ce.MoveNext() )\r
- {\r
- return false;\r
- }\r
- }\r
- return true;\r
- }\r
- return false;\r
- }\r
- private bool tDTX入力_空白と改行をスキップする( ref CharEnumerator ce )\r
- {\r
- while( ( ce.Current == ' ' ) || ( ce.Current == '\n' ) )\r
- {\r
- if( !ce.MoveNext() )\r
- {\r
- return false;\r
- }\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_空白をスキップする( ref CharEnumerator ce )\r
- {\r
- while( ce.Current == ' ' )\r
- {\r
- if( !ce.MoveNext() )\r
- {\r
- return false;\r
- }\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析( ref StringBuilder sbコマンド, ref StringBuilder sbパラメータ, ref StringBuilder sbコメント )\r
- {\r
- string strコマンド = sbコマンド.ToString();\r
- string strパラメータ = sbパラメータ.ToString().Trim();\r
- string strコメント = sbコメント.ToString();\r
- return (\r
- this.tDTX入力_行解析_TITLE_ARTIST_COMMENT_その他( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_WAVVOL_VOLUME( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_WAVPAN_PAN( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_WAV( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_BGMWAV( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_BMPTEX( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_BMP( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_AVI_AVIPAN( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_BPx( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_DTXC_LANEBINDEDCHIP( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_DTXC_WAVFORECOLOR( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_DTXC_WAVBACKCOLOR( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_DTXC_BMPFORECOLOR( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_DTXC_BMPBACKCOLOR( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_DTXC_AVIFORECOLOR( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_DTXC_AVIBACKCOLOR( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_DTXC_CHIPPALETTE( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_BEATチップのf値( strコマンド, strパラメータ, strコメント ) ||\r
- this.tDTX入力_行解析_チャンネル( strコマンド, strパラメータ, strコメント )\r
- );\r
- }\r
- private bool tDTX入力_行解析_BEATチップのf値( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if ( strコマンド.StartsWith( "BEAT", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 4 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- int num = C変換.n値を文字列から取得して返す( strコマンド, 0 );\r
- if ( num < 0 )\r
- {\r
- return false;\r
- }\r
-\r
- // 小節番号, grid, f値\r
- string[] strParams = strパラメータ.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries );\r
-\r
- #region [ パラメータ引数は全3個ないと無効。]\r
- //-----------------\r
- if ( strParams.Length < 3 )\r
- {\r
- //Trace.TraceError( "BEAT: 引数が足りません。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );\r
- return false;\r
- }\r
- //-----------------\r
- #endregion\r
-\r
- int i = 0;\r
-\r
- #region [ 1. 小節番号 ]\r
- //-----------------\r
- if ( string.IsNullOrEmpty( strParams[ i ] ) )\r
- {\r
- //Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1 );\r
- return false;\r
- }\r
- int n小節番号 = C変換.n値を文字列から取得して返す( strParams[ i ], 0 );\r
- if ( n小節番号 < 0 )\r
- {\r
- //Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1 );\r
- return false;\r
- }\r
- i++;\r
- #endregion\r
- #region [ 2. Grid ]\r
- //-----------------\r
- if ( string.IsNullOrEmpty( strParams[ i ] ) )\r
- {\r
- //Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1 );\r
- return false;\r
- }\r
- int nGrid = C変換.n値を文字列から取得して返す( strParams[ i ], 0 );\r
- if ( nGrid < 0 )\r
- {\r
- //Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1 );\r
- return false;\r
- }\r
- i++;\r
- #endregion\r
- #region [ 3. f値 ]\r
- //-----------------\r
- if ( string.IsNullOrEmpty( strParams[ i ] ) )\r
- {\r
- //Trace.TraceError( "BGAPAN: {2}番目の数(BMP番号)が異常です。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数, i + 1 );\r
- return false;\r
- }\r
- decimal f値 = 0;\r
- if ( ( !this.TryParse( strParams[ i ], out f値 ) || ( f値 < 0 ) ) )\r
- {\r
- return false;\r
- }\r
- #endregion\r
-//Debug.WriteLine( "入力: n小節番号=" + n小節番号 + ", nGrid=" + nGrid + ", f値=" + f値 + ", strParam=" + strParams[i] );\r
- this.dicBEATチップf値.Add( n小節番号 * 192 + nGrid, (float) f値 );\r
-\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_AVI_AVIPAN( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( !strコマンド.StartsWith( "AVIPAN", StringComparison.OrdinalIgnoreCase ) && strコマンド.StartsWith( "AVI", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 3 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
- if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )\r
- {\r
- return false;\r
- }\r
- CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す_なければ新規生成する( num );\r
- cavi.strラベル名 = strコメント;\r
- cavi.strファイル名 = strパラメータ;\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_BGMWAV( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( strコマンド.StartsWith( "bgmwav", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 6 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- int num = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 0, 2 ) );\r
- if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )\r
- {\r
- return false;\r
- }\r
- this.listBGMWAV番号.Add( num );\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_BMP( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( ( strコマンド.Length > 3 ) && strコマンド.StartsWith( "BMP", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 3 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
- if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )\r
- {\r
- return false;\r
- }\r
- CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す_なければ新規生成する( num );\r
- cbmp.strラベル名 = strコメント;\r
- cbmp.strファイル名 = strパラメータ;\r
- cbmp.bテクスチャ = false;\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_BMPTEX( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( strコマンド.StartsWith( "BMPTEX", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 6 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- int num = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
- if( ( num < 1 ) || ( num > 36 * 36 - 1 ) )\r
- {\r
- return false;\r
- }\r
- CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す_なければ新規生成する( num );\r
- cbmp.strラベル名 = strコメント;\r
- cbmp.strファイル名 = strパラメータ;\r
- cbmp.bテクスチャ = true;\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_BPx( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( strコマンド.StartsWith( "BPM", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 3 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- int key = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
- if( ( key < 1 ) || ( key > 36 * 36 - 1 ) )\r
- {\r
- return false;\r
- }\r
- decimal result = 0;\r
- if( ( !this.TryParse( strパラメータ, out result ) || ( result < 0 ) ) || ( result > 1000 ) ) // #23880 2011.1.6 yyagi\r
- {\r
- return false;\r
- }\r
- this._Form.mgr譜面管理者.dicBPx.Add(key, (float)result);\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_DTXC_AVIBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nChipNo;\r
- if( !strコマンド.Equals( "DTXC_AVIBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- return false;\r
- }\r
- string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
- if( strArray.Length < 2 )\r
- {\r
- return false;\r
- }\r
- if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
- {\r
- return false;\r
- }\r
- if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
- {\r
- return false;\r
- }\r
- Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
- if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
- {\r
- this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す_なければ新規生成する( nChipNo + 1 ).col背景色 = color;\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_DTXC_AVIFORECOLOR( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nChipNo;\r
- if( !strコマンド.Equals( "DTXC_AVIFORECOLOR", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- return false;\r
- }\r
- string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
- if( strArray.Length < 2 )\r
- {\r
- return false;\r
- }\r
- if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
- {\r
- return false;\r
- }\r
- if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
- {\r
- return false;\r
- }\r
- Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
- if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
- {\r
- this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す_なければ新規生成する( nChipNo + 1 ).col文字色 = color;\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_DTXC_BMPBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nChipNo;\r
- if( !strコマンド.Equals( "DTXC_BMPBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- return false;\r
- }\r
- string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
- if( strArray.Length < 2 )\r
- {\r
- return false;\r
- }\r
- if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
- {\r
- return false;\r
- }\r
- if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
- {\r
- return false;\r
- }\r
- Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
- if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
- {\r
- this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す_なければ新規生成する( nChipNo + 1 ).col背景色 = color;\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_DTXC_BMPFORECOLOR( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nChipNo;\r
- if( !strコマンド.Equals( "DTXC_BMPFORECOLOR", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- return false;\r
- }\r
- string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
- if( strArray.Length < 2 )\r
- {\r
- return false;\r
- }\r
- if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
- {\r
- return false;\r
- }\r
- if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
- {\r
- return false;\r
- }\r
- Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
- if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
- {\r
- this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す_なければ新規生成する( nChipNo + 1 ).col文字色 = color;\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_DTXC_CHIPPALETTE( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( !strコマンド.Equals( "DTXC_CHIPPALETTE", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- return false;\r
- }\r
- foreach( string str in strパラメータ.Split( new char[] { ' ' } ) )\r
- {\r
- int num;\r
- string[] strArray2 = str.Split( new char[] { ',' } );\r
- if( ( ( strArray2.Length == 2 ) && int.TryParse( strArray2[ 0 ], out num ) ) && ( ( num >= 0 ) && ( num <= 2 ) ) )\r
- {\r
- int item = C変換.n36進数2桁の文字列を数値に変換して返す( strArray2[ 1 ] );\r
- if( ( item >= 1 ) && ( item <= 36 * 36 - 1 ) )\r
- {\r
- this.listチップパレット.Add( num );\r
- this.listチップパレット.Add( item );\r
- }\r
- }\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_DTXC_LANEBINDEDCHIP( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( strコマンド.Equals( "DTXC_LANEBINDEDCHIP", StringComparison.OrdinalIgnoreCase ) && ( strパラメータ.Length == 8 ) )\r
- {\r
- int nLaneNo;\r
- if( !int.TryParse( strパラメータ.Substring( 0, 2 ), out nLaneNo ) )\r
- {\r
- return false;\r
- }\r
- int nChipNoFore = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 3, 2 ) );\r
- if( ( nChipNoFore < 0 ) || ( nChipNoFore > 36 * 36 - 1 ) )\r
- {\r
- return false;\r
- }\r
- int nChipNoBack = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( 6, 2 ) );\r
- if( ( nChipNoBack < 0 ) || ( nChipNoBack > 36 * 36 - 1 ) )\r
- {\r
- return false;\r
- }\r
- if( ( nLaneNo >= 0 ) && ( nLaneNo < this._Form.mgr譜面管理者.listレーン.Count ) )\r
- {\r
- if( nChipNoFore != 0 )\r
- {\r
- this._Form.mgr譜面管理者.listレーン[ nLaneNo ].nレーン割付チップ_表0or1to1295 = nChipNoFore;\r
- }\r
- if( nChipNoBack != 0 )\r
- {\r
- this._Form.mgr譜面管理者.listレーン[ nLaneNo ].nレーン割付チップ_裏0or1to1295 = nChipNoBack;\r
- }\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
- private bool tDTX入力_行解析_DTXC_WAVBACKCOLOR( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nChipNo;\r
- if( !strコマンド.Equals( "DTXC_WAVBACKCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- return false;\r
- }\r
- string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
- if( strArray.Length < 2 )\r
- {\r
- return false;\r
- }\r
- if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
- {\r
- return false;\r
- }\r
- if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
- {\r
- return false;\r
- }\r
- Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
- if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
- {\r
- this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す_なければ新規生成する( nChipNo ).col背景色 = color;\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_DTXC_WAVFORECOLOR( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nChipNo;\r
- if( !strコマンド.Equals( "DTXC_WAVFORECOLOR", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- return false;\r
- }\r
- string[] strArray = strパラメータ.Split( new char[] { ' ', '\t' } );\r
- if( strArray.Length < 2 )\r
- {\r
- return false;\r
- }\r
- if( !int.TryParse( strArray[ 0 ], out nChipNo ) )\r
- {\r
- return false;\r
- }\r
- if( ( nChipNo < 0 ) || ( nChipNo > 36 * 36 - 2 ) )\r
- {\r
- return false;\r
- }\r
- Color color = ColorTranslator.FromHtml( strArray[ 1 ] );\r
- if( ( nChipNo >= 0 ) && ( nChipNo <= 36 * 36 - 2 ) )\r
- {\r
- this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す_なければ新規生成する( nChipNo ).col文字色 = color;\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_TITLE_ARTIST_COMMENT_その他( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( strコマンド.Equals( "TITLE", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBox曲名.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "ARTIST", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBox製作者.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if ( strコマンド.Equals( "GENRE", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxGenre.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "USE556X710BGAAVI", StringComparison.OrdinalIgnoreCase) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.check556x710BGAAVI.Checked = strパラメータ.Trim() == "1" ? true : false;\r
- return true;\r
- }\r
- if( strコマンド.Equals( "COMMENT", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxコメント.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "PANEL", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- int dummyResult; // #23885, #26007 2011.8.13 yyagi: not to confuse "#PANEL strings (panel)" and "#PANEL int (panpot of EL)"\r
- if ( !int.TryParse( strパラメータ, out dummyResult ) ) // 数値じゃないならPANELとみなす\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxパネル.Text = strパラメータ.Trim();\r
- return true;\r
- } // 数値なら、ここでは何もせず、後で#PANに拾ってもらう (PAN ELとみなす)\r
- }\r
- if( strコマンド.Equals( "PREVIEW", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxPREVIEW.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "PREIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxPREIMAGE.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "STAGEFILE", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxSTAGEFILE.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "BACKGROUND", StringComparison.OrdinalIgnoreCase ) || strコマンド.Equals( "WALL", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxBACKGROUND.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "RESULTIMAGE", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxRESULTIMAGE.Text = strパラメータ.Trim();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "BPM", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- decimal dBpm;\r
- if( !this.TryParse( strパラメータ, out dBpm ) ) // #23880 2011.1.6 yyagi\r
- {\r
- dBpm = 120.0M;\r
- }\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.numericUpDownBPM.Value = dBpm;\r
- return true;\r
- }\r
- if( strコマンド.Equals( "DLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- int nLevel;\r
- if( !int.TryParse( strパラメータ, out nLevel ) )\r
- {\r
- nLevel = 0;\r
- }\r
- else if( nLevel < 0 )\r
- {\r
- nLevel = 0;\r
- }\r
- else if( nLevel > 100 )\r
- {\r
- nLevel = 100;\r
- }\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.hScrollBarDLEVEL.Value = nLevel;\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxDLEVEL.Text = nLevel.ToString();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "GLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- int nLevel;\r
- if( !int.TryParse( strパラメータ, out nLevel ) )\r
- {\r
- nLevel = 0;\r
- }\r
- else if( nLevel < 0 )\r
- {\r
- nLevel = 0;\r
- }\r
- else if( nLevel > 100 )\r
- {\r
- nLevel = 100;\r
- }\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.hScrollBarGLEVEL.Value = nLevel;\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxGLEVEL.Text = nLevel.ToString();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "BLEVEL", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- int nLevel;\r
- if( !int.TryParse( strパラメータ, out nLevel ) )\r
- {\r
- nLevel = 0;\r
- }\r
- else if( nLevel < 0 )\r
- {\r
- nLevel = 0;\r
- }\r
- else if( nLevel > 100 )\r
- {\r
- nLevel = 100;\r
- }\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.hScrollBarBLEVEL.Value = nLevel;\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBoxBLEVEL.Text = nLevel.ToString();\r
- return true;\r
- }\r
- if( strコマンド.Equals( "DTXVPLAYSPEED", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- decimal dPlaySpeed;\r
-// if ( !this.TryParse( strパラメータ, out num5 ) ) // #24790 2011.4.8 yyagi\r
- if ( !decimal.TryParse( strパラメータ, out dPlaySpeed ) ) // #24790 2011.4.8 yyagi\r
- {\r
- dPlaySpeed = 0M;\r
- }\r
- else if( dPlaySpeed < 0.5M )\r
- {\r
- dPlaySpeed = 0.5M;\r
- }\r
- else if( dPlaySpeed > 1.5M )\r
- {\r
- dPlaySpeed = 1.5M;\r
- }\r
- decimal dIndex = ( 1.5M - dPlaySpeed ) * 10M;\r
- int nIndex = (int) dIndex;\r
- if( nIndex < 0 )\r
- {\r
- nIndex = 0;\r
- }\r
- else if( nIndex > 10 )\r
- {\r
- nIndex = 10;\r
- }\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.toolStripComboBox演奏速度.SelectedIndex = nIndex;\r
- return true;\r
- } else {\r
- return false;\r
- }\r
- }\r
- private bool tDTX入力_行解析_WAV( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- if( strコマンド.StartsWith( "wav", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 3 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
- if( ( nChipNo < 1 ) || ( nChipNo > 36 * 36 - 1 ) )\r
- {\r
- return false;\r
- }\r
- CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す_なければ新規生成する( nChipNo );\r
- cwav.strラベル名 = strコメント;\r
- cwav.strファイル名 = strパラメータ;\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_WAVPAN_PAN( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nPan;\r
- if( strコマンド.StartsWith( "WAVPAN", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 6 );\r
- }\r
- else if( strコマンド.StartsWith( "PAN", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 3 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- if( strコマンド.Length < 2 )\r
- {\r
- return false;\r
- }\r
- int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
- if( int.TryParse( strパラメータ, out nPan ) )\r
- {\r
- if( nPan < -100 )\r
- {\r
- nPan = -100;\r
- }\r
- else if( nPan >= 100 )\r
- {\r
- nPan = 100;\r
- }\r
- this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す_なければ新規生成する( nChipNo ).n位置_100to100 = nPan;\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_WAVVOL_VOLUME( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nVol;\r
- if( strコマンド.StartsWith( "WAVVOL", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 6 );\r
- }\r
- else if( strコマンド.StartsWith( "VOLUME", StringComparison.OrdinalIgnoreCase ) )\r
- {\r
- strコマンド = strコマンド.Substring( 6 );\r
- }\r
- else\r
- {\r
- return false;\r
- }\r
- if( strコマンド.Length < 2 )\r
- {\r
- return false;\r
- }\r
- int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );\r
- if( int.TryParse( strパラメータ, out nVol ) )\r
- {\r
- if( nVol < 0 )\r
- {\r
- nVol = 0;\r
- }\r
- else if( nVol >= 100 )\r
- {\r
- nVol = 100;\r
- }\r
- this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す_なければ新規生成する( nChipNo ).n音量0to100 = nVol;\r
- }\r
- return true;\r
- }\r
- private bool tDTX入力_行解析_チャンネル( string strコマンド, string strパラメータ, string strコメント )\r
- {\r
- int nBar, nCh;\r
- if( !this.tDTX入力_行解析_チャンネル_コマンドから小節番号とチャンネル番号を抜き出す( strコマンド, out nBar, out nCh ) )\r
- {\r
- return false;\r
- }\r
- if( nCh == 2 ) // Bar Length\r
- {\r
- decimal dBarLength;\r
- if( !this.TryParse( strパラメータ, out dBarLength ) ) // #23880 2011.1.6 yyagi\r
- {\r
- dBarLength = 1m;\r
- }\r
- this.dic小節長倍率.Add( nBar, (float)dBarLength );\r
- this.tDTX入力_行解析_チャンネル_小節番号に対応する小節を探すか新規に作って返す( nBar ); // #32609 2013.12.16 yyagi\r
- return true;\r
- }\r
- #region [ Guitar ]\r
- if ( ( nCh >= 0x20 ) && ( nCh <= 0x27 ) )\r
- {\r
- C小節 c小節 = this.tDTX入力_行解析_チャンネル_小節番号に対応する小節を探すか新規に作って返す( nBar );\r
- int startIndex = 0;\r
- while( ( startIndex = strパラメータ.IndexOf( '_' ) ) != -1 )\r
- {\r
- strパラメータ = strパラメータ.Remove( startIndex, 1 );\r
- }\r
- int nChips = strパラメータ.Length / 2;\r
- for( int i = 0; i < nChips; i++ )\r
- {\r
- int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
- if( nChipNo != 0 )\r
- {\r
- int nLaneGtV = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtV" );\r
- int nLaneGtR = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtR" );\r
- int nLaneGtG = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtG" );\r
- int nLaneGtB = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "GtB" );\r
- Cチップ item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtV;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = nChipNo;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- switch( nCh )\r
- {\r
- case 0x20:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 2;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0x21:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtB;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0x22:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtG;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0x23:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtG;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtB;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0x24:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0x25:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtB;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0x26:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtG;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0x27:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtG;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneGtB;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
- }\r
- }\r
- }\r
- return true;\r
- }\r
- #endregion\r
- #region [ Bass ]\r
- if ( ( nCh >= 0xa0 ) && ( nCh <= 0xa7 ) )\r
- {\r
- C小節 c小節 = this.tDTX入力_行解析_チャンネル_小節番号に対応する小節を探すか新規に作って返す( nBar );\r
- int startIndex = 0;\r
- while( ( startIndex = strパラメータ.IndexOf( '_' ) ) != -1 )\r
- {\r
- strパラメータ = strパラメータ.Remove( startIndex, 1 );\r
- }\r
- int nChips = strパラメータ.Length / 2;\r
- for( int i = 0; i < nChips; i++ )\r
- {\r
- int nChipNo = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
- if( nChipNo != 0 )\r
- {\r
- int nLaneBsV = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsV" );\r
- int nLaneBsR = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsR" );\r
- int nLanrBsG = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsG" );\r
- int nLaneBsB = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BsB" );\r
- Cチップ item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsV;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = nChipNo;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- switch( nCh )\r
- {\r
- case 160:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 2;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0xa1:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsB;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0xa2:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLanrBsG;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0xa3:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLanrBsG;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsB;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0xa4:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0xa5:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsB;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0xa6:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLanrBsG;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
-\r
- case 0xa7:\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsR;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLanrBsG;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- item = new Cチップ();\r
- item.nレーン番号0to = nLaneBsB;\r
- item.n位置grid = i;\r
- item.n値_整数1to1295 = 1;\r
- item.n読み込み時の解像度 = nChips;\r
- c小節.listチップ.Add( item );\r
- break;\r
- }\r
- }\r
- }\r
- return true;\r
- }\r
- #endregion\r
- #region [ Other Channels ]\r
- int nレーン番号 = -1;\r
- bool flag = false;\r
- if( this.tDTX入力_行解析_チャンネル_チャンネルに該当するレーン番号を返す( nCh, out nレーン番号, out flag ) )\r
- {\r
- C小節 c小節 = this.tDTX入力_行解析_チャンネル_小節番号に対応する小節を探すか新規に作って返す( nBar );\r
- int nPosOf_ = 0;\r
- while( ( nPosOf_ = strパラメータ.IndexOf( '_' ) ) != -1 )\r
- {\r
- strパラメータ = strパラメータ.Remove( nPosOf_, 1 );\r
- }\r
- int nChips = strパラメータ.Length / 2;\r
- for( int i = 0; i < nChips; i++ )\r
- {\r
- int nChipNo = ( nCh == 3 ) ? C変換.n16進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) ) : C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );\r
- if( nChipNo > 0 )\r
- {\r
- Cチップ cチップ = new Cチップ();\r
- cチップ.nチャンネル番号00toFF = nCh;\r
- cチップ.nレーン番号0to = nレーン番号;\r
- cチップ.n位置grid = i;\r
- cチップ.n読み込み時の解像度 = nChips;\r
- cチップ.n値_整数1to1295 = nChipNo;\r
- cチップ.b裏 = flag;\r
- float f;\r
- if ( ( nCh == 0xF8 || nCh == 0xF3 ) && // BEATチップの場合\r
- dicBEATチップf値.TryGetValue( nBar * 192 + (i * 192 / nChips ), out f ) )\r
- {\r
- cチップ.f値_浮動小数 = f;\r
-//Debug.WriteLine( "f値: nBar=" + nBar + ", f値=" + f );\r
- }\r
- c小節.listチップ.Add( cチップ );\r
- }\r
- }\r
- return true;\r
- }\r
- StringBuilder builder = new StringBuilder( 0x400 );\r
- builder.Append( "#" + C変換.str小節番号を文字列3桁に変換して返す( nBar ) + C変換.str数値を16進数2桁に変換して返す( nCh ) + ": " + strパラメータ );\r
- if( strコメント.Length > 0 )\r
- {\r
- builder.Append( " ;" + strコメント );\r
- }\r
- builder.Append( Environment.NewLine );\r
- CUndoRedo管理.bUndoRedoした直後 = true;\r
- this._Form.textBox自由入力欄.AppendText( builder.ToString() );\r
- return true;\r
- #endregion\r
- }\r
- private int tDTX入力_行解析_チャンネル_GDAチャンネル文字列2桁をチャンネル番号にして返す( string strチャンネル文字列2桁 )\r
- {\r
- if( strチャンネル文字列2桁.Length == 2 )\r
- {\r
- switch( strチャンネル文字列2桁.ToUpper() )\r
- {\r
- case "TC":\r
- return 3;\r
-\r
- case "BL":\r
- return 2;\r
-\r
- case "GS":\r
- return 0x29;\r
-\r
- case "DS":\r
- return 0x30;\r
-\r
- case "FI":\r
- return 0x53;\r
-\r
- case "HH":\r
- return 0x11;\r
-\r
- case "SD":\r
- return 0x12;\r
-\r
- case "BD":\r
- return 0x13;\r
-\r
- case "HT":\r
- return 0x14;\r
-\r
- case "LT":\r
- return 0x15;\r
-\r
- case "CY":\r
- return 0x16;\r
-\r
- case "G1":\r
- return 0x21;\r
-\r
- case "G2":\r
- return 0x22;\r
-\r
- case "G3":\r
- return 0x23;\r
-\r
- case "G4":\r
- return 0x24;\r
-\r
- case "G5":\r
- return 0x25;\r
-\r
- case "G6":\r
- return 0x26;\r
-\r
- case "G7":\r
- return 0x27;\r
-\r
- case "GW":\r
- return 0x28;\r
-\r
- case "01":\r
- return 0x61;\r
-\r
- case "02":\r
- return 0x62;\r
-\r
- case "03":\r
- return 0x63;\r
-\r
- case "04":\r
- return 0x64;\r
-\r
- case "05":\r
- return 0x65;\r
-\r
- case "06":\r
- return 0x66;\r
-\r
- case "07":\r
- return 0x67;\r
-\r
- case "08":\r
- return 0x68;\r
-\r
- case "09":\r
- return 0x69;\r
-\r
- case "0A":\r
- return 0x70;\r
-\r
- case "0B":\r
- return 0x71;\r
-\r
- case "0C":\r
- return 0x72;\r
-\r
- case "0D":\r
- return 0x73;\r
-\r
- case "0E":\r
- return 0x74;\r
-\r
- case "0F":\r
- return 0x75;\r
-\r
- case "10":\r
- return 0x76;\r
-\r
- case "11":\r
- return 0x77;\r
-\r
- case "12":\r
- return 0x78;\r
-\r
- case "13":\r
- return 0x79;\r
-\r
- case "14":\r
- return 0x80;\r
-\r
- case "15":\r
- return 0x81;\r
-\r
- case "16":\r
- return 0x82;\r
-\r
- case "17":\r
- return 0x83;\r
-\r
- case "18":\r
- return 0x84;\r
-\r
- case "19":\r
- return 0x85;\r
-\r
- case "1A":\r
- return 0x86;\r
-\r
- case "1B":\r
- return 0x87;\r
-\r
- case "1C":\r
- return 0x88;\r
-\r
- case "1D":\r
- return 0x89;\r
-\r
- case "1E":\r
- return 0x90;\r
-\r
- case "1F":\r
- return 0x91;\r
-\r
- case "20":\r
- return 0x92;\r
-\r
- case "B1":\r
- return 0xa1;\r
-\r
- case "B2":\r
- return 0xa2;\r
-\r
- case "B3":\r
- return 0xa3;\r
-\r
- case "B4":\r
- return 0xa4;\r
-\r
- case "B5":\r
- return 0xa5;\r
-\r
- case "B6":\r
- return 0xa6;\r
-\r
- case "B7":\r
- return 0xa7;\r
-\r
- case "BW":\r
- return 0xa8;\r
-\r
- case "G0":\r
- return 0x20;\r
-\r
- case "B0":\r
- return 0xa0;\r
- }\r
- }\r
- return -1;\r
- }\r
-\r
- // #25990 2011.8.12 yyagi BMS/BME→DTX変換メイン\r
- private int tDTX入力_行解析_チャンネル_BMSチャンネル文字列2桁をチャンネル番号にして返す( string strチャンネル文字列2桁, int bar, E種別 eType )\r
- {\r
- if ( bar >= 0 && strチャンネル文字列2桁.Length == 2 )\r
- {\r
- if ( nLastBarConverted != bar ) // 小節が変わったら、BGM用に使うch群\r
- {\r
- nLastBarConverted = bar;\r
- eDTXbgmChs.Reset();\r
- }\r
-\r
- int bmsCh = Convert.ToInt32( strチャンネル文字列2桁, 16 );\r
- if ( bmsCh == 0x01 ) // BGMなら\r
- {\r
- if ( !eDTXbgmChs.MoveNext() ) // BGM用に使うSEチャネルの空きがもう無い\r
- {\r
- return -1;\r
- }\r
- return (int) eDTXbgmChs.Current;\r
- }\r
- else if ( 0x11 <= bmsCh && bmsCh <= 0x19 ) // 鍵盤なら\r
- {\r
- return ( eType == E種別.BMS ) ? BMSkeyChToDTXdrumsCh[ bmsCh - 0x11 ] : BMEkeyChToDTXdrumsCh[ bmsCh - 0x11 ];\r
- }\r
- else // それ以外なら\r
- {\r
- return BMSgeneralChToDTXgeneralCh[ bmsCh ];\r
- }\r
- }\r
- return -1;\r
- }\r
- private bool tDTX入力_行解析_チャンネル_コマンドから小節番号とチャンネル番号を抜き出す( string strコマンド, out int n小節番号, out int nチャンネル番号 )\r
- {\r
- if( strコマンド.Length >= 5 )\r
- {\r
- n小節番号 = C変換.n小節番号の文字列3桁を数値に変換して返す( strコマンド.Substring( 0, 3 ) );\r
- if( ( this.e種別 == E種別.GDA ) || ( this.e種別 == E種別.G2D ) )\r
- {\r
- nチャンネル番号 = this.tDTX入力_行解析_チャンネル_GDAチャンネル文字列2桁をチャンネル番号にして返す( strコマンド.Substring( 3, 2 ) );\r
- }\r
- else if( ( this.e種別 == E種別.BMS ) || ( this.e種別 == E種別.BME ) ) // #25990 2011.8.12 yyagi\r
- {\r
- nチャンネル番号 = this.tDTX入力_行解析_チャンネル_BMSチャンネル文字列2桁をチャンネル番号にして返す( strコマンド.Substring( 3, 2 ), n小節番号, this.e種別 );\r
- }\r
- else\r
- {\r
- nチャンネル番号 = C変換.n16進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 3, 2 ) );\r
- }\r
- return ( ( n小節番号 >= 0 ) && ( nチャンネル番号 > 0 ) );\r
- }\r
- n小節番号 = -1;\r
- nチャンネル番号 = -1;\r
- return false;\r
- }\r
- private bool tDTX入力_行解析_チャンネル_チャンネルに該当するレーン番号を返す( int nチャンネル番号, out int nレーン番号, out bool b裏 )\r
- {\r
- nレーン番号 = -1;\r
- b裏 = false;\r
- for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ )\r
- {\r
- Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ];\r
- if( cレーン.nチャンネル番号_表00toFF == nチャンネル番号 )\r
- {\r
- nレーン番号 = i;\r
- b裏 = false;\r
- return true;\r
- }\r
- if( cレーン.nチャンネル番号_裏00toFF == nチャンネル番号 )\r
- {\r
- nレーン番号 = i;\r
- b裏 = true;\r
- return true;\r
- }\r
- }\r
- return false;\r
- }\r
- private C小節 tDTX入力_行解析_チャンネル_小節番号に対応する小節を探すか新規に作って返す( int n小節番号 )\r
- {\r
- C小節 c小節 = this._Form.mgr譜面管理者.p小節を返す( n小節番号 );\r
- if( c小節 == null )\r
- {\r
- if( n小節番号 > this._Form.mgr譜面管理者.n現在の最大の小節番号を返す() )\r
- {\r
- for( int i = this._Form.mgr譜面管理者.n現在の最大の小節番号を返す() + 1; i <= n小節番号; i++ )\r
- {\r
- c小節 = new C小節( i );\r
- this._Form.mgr譜面管理者.dic小節.Add( i, c小節 );\r
- }\r
- return c小節;\r
- }\r
- c小節 = new C小節( n小節番号 );\r
- this._Form.mgr譜面管理者.dic小節.Add( n小節番号, c小節 );\r
- }\r
- return c小節;\r
- }\r
- private void tDTX入力_小節長倍率配列を昇順ソート済みの小節リストに適用する()\r
- {\r
- float num = 1f;\r
- for( int i = 0; i < this._Form.mgr譜面管理者.dic小節.Count; i++ )\r
- {\r
- C小節 c小節 = this._Form.mgr譜面管理者.dic小節[ i ];\r
- foreach( KeyValuePair<int, float> pair in this.dic小節長倍率 )\r
- {\r
- if( c小節.n小節番号0to3599 == pair.Key )\r
- {\r
- num = pair.Value;\r
- }\r
- }\r
- c小節.f小節長倍率 = num;\r
- for( int j = 0; j < c小節.listチップ.Count; j++ )\r
- {\r
- c小節.listチップ[ j ].n位置grid = ( c小節.listチップ[ j ].n位置grid * c小節.n小節長倍率を考慮した現在の小節の高さgrid ) / c小節.listチップ[ j ].n読み込み時の解像度;\r
- }\r
- }\r
- }\r
- private void tDTX入力_小節内のチップリストを発声位置でソートする()\r
- {\r
- foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
- {\r
- pair.Value.listチップ.Sort();\r
- }\r
- }\r
-\r
- private void tDTX出力_AVIリスト( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- for( int i = 1; i <= 36 * 36 - 1; i++ )\r
- {\r
- CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );\r
- if( ( cavi != null ) && ( cavi.strファイル名.Length > 0 ) )\r
- {\r
- string str = C変換.str数値を36進数2桁に変換して返す( cavi.nAVI番号1to1295 );\r
- sw.Write( "#AVI{0}: {1}", str, cavi.strファイル名 );\r
- if( cavi.strラベル名.Length > 0 )\r
- {\r
- sw.Write( "\t;{0}", cavi.strラベル名 );\r
- }\r
- sw.WriteLine();\r
- }\r
- }\r
- }\r
- private void tDTX出力_AVIリスト色設定( StreamWriter sw )\r
- {\r
- Color color = ColorTranslator.FromHtml( "window" );\r
- Color color2 = ColorTranslator.FromHtml( "windowtext" );\r
- for( int i = 1; i <= 36 * 36 - 1; i++ )\r
- {\r
- CAVI cavi = this._Form.mgrAVIリスト管理者.tAVIをキャッシュから検索して返す( i );\r
- if( cavi != null )\r
- {\r
- if( cavi.col文字色 != color2 )\r
- {\r
- sw.WriteLine( "#DTXC_AVIFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cavi.col文字色 ) );\r
- }\r
- if( cavi.col背景色 != color )\r
- {\r
- sw.WriteLine( "#DTXC_AVIBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cavi.col背景色 ) );\r
- }\r
- }\r
- }\r
- }\r
- private void tDTX出力_BMPリスト( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- for( int i = 1; i <= 36 * 36 - 1; i++ )\r
- {\r
- CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );\r
- if( ( cbmp != null ) && ( cbmp.strファイル名.Length > 0 ) )\r
- {\r
- string str = C変換.str数値を36進数2桁に変換して返す( cbmp.nBMP番号1to1295 );\r
- if( !cbmp.bテクスチャ )\r
- {\r
- sw.Write( "#BMP{0}: {1}", str, cbmp.strファイル名 );\r
- if( cbmp.strラベル名.Length > 0 )\r
- {\r
- sw.Write( "\t;{0}", cbmp.strラベル名 );\r
- }\r
- sw.WriteLine();\r
- }\r
- else\r
- {\r
- sw.Write( "#BMPTEX{0}: {1}", str, cbmp.strファイル名 );\r
- if( cbmp.strラベル名.Length > 0 )\r
- {\r
- sw.Write( "\t;{0}", cbmp.strラベル名 );\r
- }\r
- sw.WriteLine();\r
- }\r
- }\r
- }\r
- }\r
- private void tDTX出力_BMPリスト色設定( StreamWriter sw )\r
- {\r
- Color color = ColorTranslator.FromHtml( "window" );\r
- Color color2 = ColorTranslator.FromHtml( "windowtext" );\r
- for( int i = 1; i <= 36 * 36 - 1; i++ )\r
- {\r
- CBMP cbmp = this._Form.mgrBMPリスト管理者.tBMPをキャッシュから検索して返す( i );\r
- if( cbmp != null )\r
- {\r
- if( cbmp.col文字色 != color2 )\r
- {\r
- sw.WriteLine( "#DTXC_BMPFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cbmp.col文字色 ) );\r
- }\r
- if( cbmp.col背景色 != color )\r
- {\r
- sw.WriteLine( "#DTXC_BMPBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cbmp.col背景色 ) );\r
- }\r
- }\r
- }\r
- }\r
- private void tDTX出力_BPxリスト( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- foreach( KeyValuePair<int, float> pair in this._Form.mgr譜面管理者.dicBPx )\r
- {\r
- sw.WriteLine( "#BPM{0}: {1}", C変換.str数値を36進数2桁に変換して返す( pair.Key ), pair.Value );\r
- }\r
- }\r
- private void tDTX出力_WAVリスト( StreamWriter sw, bool bBGMのみ出力 )\r
- {\r
- sw.WriteLine();\r
- for( int i = 1; i <= 36 * 36 - 1; i++ )\r
- {\r
- CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );\r
- if( ( ( cwav != null ) && ( cwav.strファイル名.Length > 0 ) ) && ( !bBGMのみ出力 || cwav.bBGMとして使用 ) )\r
- {\r
- string str = C変換.str数値を36進数2桁に変換して返す( cwav.nWAV番号1to1295 );\r
- sw.Write( "#WAV{0}: {1}", str, cwav.strファイル名 );\r
- if( cwav.strラベル名.Length > 0 )\r
- {\r
- sw.Write( "\t;{0}", cwav.strラベル名 );\r
- }\r
- sw.WriteLine();\r
- if( cwav.n音量0to100 != 100 )\r
- {\r
- sw.WriteLine( "#VOLUME{0}: {1}", str, cwav.n音量0to100.ToString() );\r
- }\r
- if( cwav.n位置_100to100 != 0 )\r
- {\r
- sw.WriteLine( "#PAN{0}: {1}", str, cwav.n位置_100to100.ToString() );\r
- }\r
- if( cwav.bBGMとして使用 )\r
- {\r
- sw.WriteLine( "#BGMWAV: {0}", str );\r
- }\r
- }\r
- }\r
- }\r
- private void tDTX出力_WAVリスト色設定( StreamWriter sw )\r
- {\r
- Color color = ColorTranslator.FromHtml( "window" );\r
- Color color2 = ColorTranslator.FromHtml( "windowtext" );\r
- for( int i = 1; i <= 36 * 36 - 1; i++ )\r
- {\r
- CWAV cwav = this._Form.mgrWAVリスト管理者.tWAVをキャッシュから検索して返す( i );\r
- if( cwav != null )\r
- {\r
- if( cwav.col文字色 != color2 )\r
- {\r
- sw.WriteLine( "#DTXC_WAVFORECOLOR: {0} {1}", i, ColorTranslator.ToHtml( cwav.col文字色 ) );\r
- }\r
- if( cwav.col背景色 != color )\r
- {\r
- sw.WriteLine( "#DTXC_WAVBACKCOLOR: {0} {1}", i, ColorTranslator.ToHtml( cwav.col背景色 ) );\r
- }\r
- }\r
- }\r
- }\r
- private void tDTX出力_タイトルと製作者とコメントその他( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- if( this._Form.textBox曲名.Text.Length == 0 )\r
- {\r
- sw.WriteLine( "#TITLE: (no title)" );\r
- }\r
- else\r
- {\r
- sw.WriteLine( "#TITLE: " + this._Form.textBox曲名.Text );\r
- }\r
- if( this._Form.textBox製作者.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#ARTIST: " + this._Form.textBox製作者.Text );\r
- }\r
- if( this._Form.textBoxGenre.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#GENRE: " + this._Form.textBoxGenre.Text );\r
- }\r
- if( this._Form.check556x710BGAAVI.Checked )\r
- {\r
- sw.WriteLine("#USE556X710BGAAVI: 1");\r
- }\r
- if( this._Form.textBoxコメント.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#COMMENT: " + this._Form.textBoxコメント.Text );\r
- }\r
- if( this._Form.textBoxパネル.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#PANEL: " + this._Form.textBoxパネル.Text );\r
- }\r
- if( this._Form.textBoxPREVIEW.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#PREVIEW: " + this._Form.textBoxPREVIEW.Text );\r
- }\r
- if( this._Form.textBoxPREIMAGE.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#PREIMAGE: " + this._Form.textBoxPREIMAGE.Text );\r
- }\r
- if( this._Form.textBoxSTAGEFILE.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#STAGEFILE: " + this._Form.textBoxSTAGEFILE.Text );\r
- }\r
- if( this._Form.textBoxBACKGROUND.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#BACKGROUND: " + this._Form.textBoxBACKGROUND.Text );\r
- }\r
- if( this._Form.textBoxRESULTIMAGE.Text.Length > 0 )\r
- {\r
- sw.WriteLine( "#RESULTIMAGE: " + this._Form.textBoxRESULTIMAGE.Text );\r
- }\r
- if( this._Form.numericUpDownBPM.Value != 0M )\r
- {\r
- sw.WriteLine( "#BPM: " + this._Form.numericUpDownBPM.Value );\r
- }\r
- // if( this._Form.hScrollBarDLEVEL.Value != 0 )\r
- {\r
- sw.WriteLine( "#DLEVEL: " + this._Form.hScrollBarDLEVEL.Value );\r
- }\r
- // if( this._Form.hScrollBarGLEVEL.Value != 0 )\r
- {\r
- sw.WriteLine( "#GLEVEL: " + this._Form.hScrollBarGLEVEL.Value );\r
- }\r
- // if( this._Form.hScrollBarBLEVEL.Value != 0 )\r
- {\r
- sw.WriteLine( "#BLEVEL: " + this._Form.hScrollBarBLEVEL.Value );\r
- }\r
- if( this._Form.mgr譜面管理者.strPATH_WAV.Length != 0 )\r
- {\r
- sw.WriteLine( "#PATH_WAV: " + this._Form.mgr譜面管理者.strPATH_WAV );\r
- }\r
- if( this._Form.toolStripComboBox演奏速度.SelectedIndex != 5 )\r
- {\r
- sw.WriteLine( "#DTXVPLAYSPEED: " + ( 1.5f - ( this._Form.toolStripComboBox演奏速度.SelectedIndex * 0.1f ) ) );\r
- }\r
- }\r
- private void tDTX出力_チップパレット( StreamWriter sw )\r
- {\r
- sw.Write( "#DTXC_CHIPPALETTE: " );\r
- foreach( ListViewItem item in this._Form.dlgチップパレット.listViewチップリスト.Items )\r
- {\r
- sw.Write( " {0},{1}", item.ImageIndex, item.SubItems[ 1 ].Text );\r
- }\r
- sw.WriteLine();\r
- }\r
- private void tDTX出力_レーン割付チップ( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- for( int i = 0; i < this._Form.mgr譜面管理者.listレーン.Count; i++ )\r
- {\r
- Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ i ];\r
- if( ( cレーン.nレーン割付チップ_表0or1to1295 > 0 ) || ( cレーン.nレーン割付チップ_裏0or1to1295 > 0 ) )\r
- {\r
- 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
- }\r
- }\r
- }\r
- private void tDTX出力_自由入力欄( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- if( this._Form.textBox自由入力欄.Text.Length > 0 )\r
- {\r
- sw.WriteLine();\r
- sw.Write( this._Form.textBox自由入力欄.Text );\r
- sw.WriteLine();\r
- }\r
- }\r
- private void tDTX出力_小節長倍率( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- float num = 1f;\r
- for( int i = 0; i < this._Form.mgr譜面管理者.dic小節.Count; i++ )\r
- {\r
- C小節 c小節 = this._Form.mgr譜面管理者.dic小節[ i ];\r
- if( c小節.f小節長倍率 != num )\r
- {\r
- num = c小節.f小節長倍率;\r
- sw.WriteLine( "#{0}02: {1}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), num );\r
- }\r
- }\r
- }\r
- private void tDTX出力_BEATチップのf値( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- int laneBEAT = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BEAT" );\r
-// Debug.WriteLine( "laneBEAT=" + laneBEAT );\r
- int c = 0;\r
- foreach ( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
- {\r
- C小節 c小節 = pair.Value;\r
- for ( int index = 0; index < c小節.listチップ.Count; index++ )\r
- {\r
- if ( c小節.listチップ[ index ].nレーン番号0to == laneBEAT )\r
- {\r
-// int n小節番号 = c小節.n小節番号0to3599;\r
-// Debug.WriteLine( "n小節番号=" + c小節.n小節番号0to3599 + ", 小節内Grid=" + c小節.listチップ[ index ].n位置grid + ",lane=" + c小節.listチップ[ index ].nレーン番号0to + ", f値=" + c小節.listチップ[ index ].f値・浮動小数 );\r
- //string str = C変換.str数値を36進数2桁に変換して返す( c );\r
- sw.WriteLine( "#BEAT{0}: {1}, {2}, {3}", c++, c小節.n小節番号0to3599, c小節.listチップ[ index ].n位置grid, c小節.listチップ[ index ].f値_浮動小数);\r
- }\r
- }\r
- }\r
- }\r
- private void tDTX出力_全チップ( StreamWriter sw )\r
- {\r
- sw.WriteLine();\r
- foreach( KeyValuePair<int, C小節> pair in this._Form.mgr譜面管理者.dic小節 )\r
- {\r
- C小節 c小節 = pair.Value;\r
- List<int> list = new List<int>();\r
- foreach( Cチップ cチップ in c小節.listチップ )\r
- {\r
- if( list.IndexOf( cチップ.nチャンネル番号00toFF ) < 0 )\r
- {\r
- list.Add( cチップ.nチャンネル番号00toFF );\r
- }\r
- }\r
- int[,] numArray = new int[ c小節.n小節長倍率を考慮した現在の小節の高さgrid, 2 ];\r
- foreach( int num in list )\r
- {\r
- if( num != 0 )\r
- {\r
- for( int num2 = 0; num2 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num2++ )\r
- {\r
- numArray[ num2, 0 ] = numArray[ num2, 1 ] = 0;\r
- }\r
- foreach( Cチップ cチップ2 in c小節.listチップ )\r
- {\r
- if( cチップ2.nチャンネル番号00toFF == num )\r
- {\r
- numArray[ cチップ2.n位置grid, 0 ] = cチップ2.n値_整数1to1295;\r
- }\r
- }\r
- int num3 = 0;\r
- for( int num4 = 0; num4 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num4++ )\r
- {\r
- num3 += numArray[ num4, 0 ];\r
- }\r
- if( num3 != 0 )\r
- {\r
- int num5 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
- foreach( int num6 in this.arr素数リスト )\r
- {\r
- while( this.tDTX出力_全チップ_解像度をN分の1にできる( num6, ref numArray, num5 ) )\r
- {\r
- num5 /= num6;\r
- for( int num7 = 0; num7 < num5; num7++ )\r
- {\r
- numArray[ num7, 0 ] = numArray[ num7 * num6, 0 ];\r
- }\r
- }\r
- }\r
- StringBuilder builder = new StringBuilder();\r
- for( int num8 = 0; num8 < num5; num8++ )\r
- {\r
- if( num == 3 )\r
- {\r
- builder.Append( C変換.str数値を16進数2桁に変換して返す( numArray[ num8, 0 ] ) );\r
- }\r
- else\r
- {\r
- builder.Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num8, 0 ] ) );\r
- }\r
- }\r
- sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( num ), builder.ToString() );\r
- }\r
- }\r
- }\r
- for( int i = 0; i < c小節.n小節長倍率を考慮した現在の小節の高さgrid; i++ )\r
- {\r
- numArray[ i, 0 ] = numArray[ i, 1 ] = 0;\r
- }\r
- foreach( Cチップ cチップ3 in c小節.listチップ )\r
- {\r
- Cレーン cレーン = this._Form.mgr譜面管理者.listレーン[ cチップ3.nレーン番号0to ];\r
- switch( cレーン.eレーン種別 )\r
- {\r
- case Cレーン.E種別.GtV:\r
- {\r
- numArray[ cチップ3.n位置grid, 0 ] = cチップ3.n値_整数1to1295;\r
- continue;\r
- }\r
- case Cレーン.E種別.GtR:\r
- {\r
- numArray[ cチップ3.n位置grid, 1 ] |= ( cチップ3.n値_整数1to1295 == 1 ) ? 0x04 : 0xFF; // OPEN = 0xFF\r
- continue;\r
- }\r
- case Cレーン.E種別.GtG:\r
- {\r
- numArray[ cチップ3.n位置grid, 1 ] |= 0x02;\r
- continue;\r
- }\r
- case Cレーン.E種別.GtB:\r
- {\r
- numArray[ cチップ3.n位置grid, 1 ] |= 0x01;\r
- continue;\r
- }\r
- }\r
- }\r
- for( int j = 0; j < c小節.n小節長倍率を考慮した現在の小節の高さgrid; j++ )\r
- {\r
- if( ( numArray[ j, 0 ] == 0 ) || ( numArray[ j, 1 ] == 0 ) )\r
- {\r
- numArray[ j, 0 ] = 0;\r
- numArray[ j, 1 ] = 0;\r
- }\r
- }\r
- int num11 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
- foreach( int num12 in this.arr素数リスト )\r
- {\r
- while( this.tDTX出力_全チップ_解像度をN分の1にできる( num12, ref numArray, num11 ) )\r
- {\r
- num11 /= num12;\r
- for( int num13 = 0; num13 < num11; num13++ )\r
- {\r
- numArray[ num13, 0 ] = numArray[ num13 * num12, 0 ];\r
- numArray[ num13, 1 ] = numArray[ num13 * num12, 1 ];\r
- }\r
- }\r
- }\r
- bool[] flagArray = new bool[ 8 ];\r
- for( int k = 0; k < 8; k++ )\r
- {\r
- flagArray[ k ] = false;\r
- }\r
- for( int m = 0; m < num11; m++ )\r
- {\r
- if( numArray[ m, 1 ] == 0xff )\r
- {\r
- flagArray[ 0 ] = true;\r
- }\r
- else if( numArray[ m, 1 ] != 0 )\r
- {\r
- flagArray[ numArray[ m, 1 ] ] = true;\r
- }\r
- }\r
- StringBuilder[] builderArray = new StringBuilder[ 8 ];\r
- for( int n = 0; n < 8; n++ )\r
- {\r
- builderArray[ n ] = new StringBuilder();\r
- }\r
- for( int num17 = 0; num17 < num11; num17++ )\r
- {\r
- int num18 = ( numArray[ num17, 1 ] == 0xff ) ? 0x20 : ( numArray[ num17, 1 ] + 0x20 );\r
- for( int num19 = 0; num19 < 8; num19++ )\r
- {\r
- if( flagArray[ num19 ] )\r
- {\r
- if( num19 == ( num18 - 0x20 ) )\r
- {\r
- builderArray[ num19 ].Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num17, 0 ] ) );\r
- }\r
- else\r
- {\r
- builderArray[ num19 ].Append( "00" );\r
- }\r
- }\r
- }\r
- }\r
- for( int num20 = 0; num20 < 8; num20++ )\r
- {\r
- if( builderArray[ num20 ].Length != 0 )\r
- {\r
- sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( 0x20 + num20 ), builderArray[ num20 ].ToString() );\r
- }\r
- }\r
- for( int num21 = 0; num21 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num21++ )\r
- {\r
- numArray[ num21, 0 ] = numArray[ num21, 1 ] = 0;\r
- }\r
- foreach( Cチップ cチップ4 in c小節.listチップ )\r
- {\r
- Cレーン cレーン2 = this._Form.mgr譜面管理者.listレーン[ cチップ4.nレーン番号0to ];\r
- switch( cレーン2.eレーン種別 )\r
- {\r
- case Cレーン.E種別.BsV:\r
- {\r
- numArray[ cチップ4.n位置grid, 0 ] = cチップ4.n値_整数1to1295;\r
- continue;\r
- }\r
- case Cレーン.E種別.BsR:\r
- {\r
- numArray[ cチップ4.n位置grid, 1 ] |= ( cチップ4.n値_整数1to1295 == 1 ) ? 4 : 0xff; // OPEN = 0xFF\r
- continue;\r
- }\r
- case Cレーン.E種別.BsG:\r
- {\r
- numArray[ cチップ4.n位置grid, 1 ] |= 0x02;\r
- continue;\r
- }\r
- case Cレーン.E種別.BsB:\r
- {\r
- numArray[ cチップ4.n位置grid, 1 ] |= 0x01;\r
- continue;\r
- }\r
- }\r
- }\r
- for( int num22 = 0; num22 < c小節.n小節長倍率を考慮した現在の小節の高さgrid; num22++ )\r
- {\r
- if( ( numArray[ num22, 0 ] == 0 ) || ( numArray[ num22, 1 ] == 0 ) )\r
- {\r
- numArray[ num22, 0 ] = 0;\r
- numArray[ num22, 1 ] = 0;\r
- }\r
- }\r
- int num23 = c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
- foreach( int num24 in this.arr素数リスト )\r
- {\r
- while( this.tDTX出力_全チップ_解像度をN分の1にできる( num24, ref numArray, num23 ) )\r
- {\r
- num23 /= num24;\r
- for( int num25 = 0; num25 < num23; num25++ )\r
- {\r
- numArray[ num25, 0 ] = numArray[ num25 * num24, 0 ];\r
- numArray[ num25, 1 ] = numArray[ num25 * num24, 1 ];\r
- }\r
- }\r
- }\r
- bool[] flagArray2 = new bool[ 8 ];\r
- for( int num26 = 0; num26 < 8; num26++ )\r
- {\r
- flagArray2[ num26 ] = false;\r
- }\r
- for( int num27 = 0; num27 < num23; num27++ )\r
- {\r
- if( numArray[ num27, 1 ] == 0xff )\r
- {\r
- flagArray2[ 0 ] = true;\r
- }\r
- else if( numArray[ num27, 1 ] != 0 )\r
- {\r
- flagArray2[ numArray[ num27, 1 ] ] = true;\r
- }\r
- }\r
- StringBuilder[] builderArray2 = new StringBuilder[ 8 ];\r
- for( int num28 = 0; num28 < 8; num28++ )\r
- {\r
- builderArray2[ num28 ] = new StringBuilder();\r
- }\r
- for( int num29 = 0; num29 < num23; num29++ )\r
- {\r
- int num30 = ( numArray[ num29, 1 ] == 0xff ) ? 160 : ( numArray[ num29, 1 ] + 160 );\r
- for( int num31 = 0; num31 < 8; num31++ )\r
- {\r
- if( flagArray2[ num31 ] )\r
- {\r
- if( num31 == ( num30 - 160 ) )\r
- {\r
- builderArray2[ num31 ].Append( C変換.str数値を36進数2桁に変換して返す( numArray[ num29, 0 ] ) );\r
- }\r
- else\r
- {\r
- builderArray2[ num31 ].Append( "00" );\r
- }\r
- }\r
- }\r
- }\r
- for( int num32 = 0; num32 < 8; num32++ )\r
- {\r
- if( builderArray2[ num32 ].Length != 0 )\r
- {\r
- sw.WriteLine( "#{0}{1}: {2}", C変換.str小節番号を文字列3桁に変換して返す( c小節.n小節番号0to3599 ), C変換.str数値を16進数2桁に変換して返す( 160 + num32 ), builderArray2[ num32 ].ToString() );\r
- }\r
- }\r
- }\r
- }\r
- private bool tDTX出力_全チップ_解像度をN分の1にできる( int N, ref int[ , ] arrチップ配列, int n現在の解像度 )\r
- {\r
- if( ( n現在の解像度 % N ) != 0 )\r
- {\r
- return false;\r
- }\r
- for( int i = 0; i < ( n現在の解像度 / N ); i++ )\r
- {\r
- for( int j = 1; j < N; j++ )\r
- {\r
- if( arrチップ配列[ ( i * N ) + j, 0 ] != 0 )\r
- {\r
- return false;\r
- }\r
- }\r
- }\r
- return true;\r
- }\r
-\r
- #region [#23880 2010.12.30 yyagi: コンマとスペースの両方を小数点として扱うTryParse]\r
- /// <summary>\r
- /// 小数点としてコンマとピリオドの両方を受け付けるTryParse()\r
- /// </summary>\r
- /// <param name="s">strings convert to double</param>\r
- /// <param name="result">parsed double value</param>\r
- /// <returns>s が正常に変換された場合は true。それ以外の場合は false。</returns>\r
- /// <exception cref="ArgumentException">style が NumberStyles 値でないか、style に NumberStyles.AllowHexSpecifier 値が含まれている</exception>\r
- private bool TryParse(string s, out decimal result)\r
- { // #23880 2010.12.30 yyagi: alternative TryParse to permit both '.' and ',' for decimal point\r
- // EU諸国での #BPM 123,45 のような記述に対応するため、\r
- // 小数点の最終位置を検出して、それをlocaleにあった\r
- // 文字に置き換えてからTryParse()する\r
- // 桁区切りの文字はスキップする\r
-\r
- const string DecimalSeparators = ".,"; // 小数点文字\r
- const string GroupSeparators = ".,' "; // 桁区切り文字\r
- const string NumberSymbols = "0123456789"; // 数値文字\r
-\r
- int len = s.Length; // 文字列長\r
- int decimalPosition = len; // 真の小数点の位置 最初は文字列終端位置に仮置きする\r
-\r
- for (int i = 0; i < len; i++)\r
- { // まず、真の小数点(一番最後に現れる小数点)の位置を求める\r
- char c = s[i];\r
- if (NumberSymbols.IndexOf(c) >= 0)\r
- { // 数値だったらスキップ\r
- continue;\r
- }\r
- else if (DecimalSeparators.IndexOf(c) >= 0)\r
- { // 小数点文字だったら、その都度位置を上書き記憶\r
- decimalPosition = i;\r
- }\r
- else if (GroupSeparators.IndexOf(c) >= 0)\r
- { // 桁区切り文字の場合もスキップ\r
- continue;\r
- }\r
- else\r
- { // 数値・小数点・区切り文字以外がきたらループ終了\r
- break;\r
- }\r
- }\r
-\r
- StringBuilder decimalStr = new StringBuilder(16);\r
- for (int i = 0; i < len; i++)\r
- { // 次に、localeにあった数値文字列を生成する\r
- char c = s[i];\r
- if (NumberSymbols.IndexOf(c) >= 0)\r
- { // 数値だったら\r
- decimalStr.Append(c); // そのままコピー\r
- }\r
- else if (DecimalSeparators.IndexOf(c) >= 0)\r
- { // 小数点文字だったら\r
- if (i == decimalPosition)\r
- { // 最後に出現した小数点文字なら、localeに合った小数点を出力する\r
- decimalStr.Append(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);\r
- }\r
- }\r
- else if (GroupSeparators.IndexOf(c) >= 0)\r
- { // 桁区切り文字だったら\r
- continue; // 何もしない(スキップ)\r
- }\r
- else\r
- {\r
- break;\r
- }\r
- }\r
- return decimal.TryParse(decimalStr.ToString(), out result); // 最後に、自分のlocale向けの文字列に対してTryParse実行\r
- }\r
- #endregion\r
- //-----------------\r
- #endregion\r
- }\r
-}\r