\r
#region [ ファイルを読み込む。]\r
//-----------------\r
- this.t演奏ファイルを開いて読み込む( strファイル名 );\r
+ string strExt = Path.GetExtension( strファイル名 ).ToLower();\r
+ Debug.WriteLine( "ext=" + strExt );\r
+\r
+ if ( strExt.Equals(".dtx") )\r
+ {\r
+ this.t演奏ファイルを開いて読み込む( strファイル名 );\r
+ }\r
+ else if (strExt.Equals(".smf") || strExt.Equals(".mid"))\r
+ {\r
+ this.mgrMIDIインポート管理者.tMIDIインポート管理を開く( strファイル名 );\r
+ this.mgr譜面管理者.tRefreshDisplayLanes(); // レーンの表示/非表示切り替えに備えて追加\r
+ }\r
+ else\r
+ {\r
+ MessageBox.Show(\r
+ Resources.strDTXファイルではありませんMSG,\r
+ Resources.str確認ダイアログのタイトル,\r
+ MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 );\r
+\r
+ return; // 中断\r
+ }\r
//-----------------\r
#endregion\r
}\r
this.tMIDIファイルを開く( dialog.FileName );\r
}\r
\r
- private void tMIDIファイルを開く( string strファイル名 )\r
+ public void tMIDIファイルを開く( string strファイル名 )\r
{\r
#region [ ファイル確認 ]\r
//-----------------\r
{\r
if ( vMIDIチップ.b入力 )\r
{\r
- this.formメインフォーム.mgr譜面管理者.tチップを配置または置換する( vMIDIチップ.nレーン番号, vMIDIチップ.n時間 / (cMIDI.n分解能 / 96 ), vMIDIチップ.nWAV, 0f, false );\r
+ this.formメインフォーム.mgr譜面管理者.tチップを配置または置換する( vMIDIチップ.nレーン番号, vMIDIチップ.n時間 * (192 / 4) / cMIDI.n分解能, vMIDIチップ.nWAV, 0f, false );\r
}\r
}\r
this.formメインフォーム.mgr譜面管理者.tチップを配置または置換する( this.formメインフォーム.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BGM" ), 0, 2, 0f, false );\r
cMIDIインポートダイアログ.tMIDIインポート結果を反映する();\r
}\r
}\r
+ public void tMIDIインポート管理を開く(string strファイル名 )\r
+ {\r
+ if ( this.formメインフォーム.t未保存なら保存する() == DialogResult.Cancel ) return;\r
+ this.formメインフォーム.b未保存 = false;\r
+ this.formメインフォーム.tシナリオ_新規作成();\r
\r
+ CMIDIインポートダイアログ cMIDIインポートダイアログ = new CMIDIインポートダイアログ();\r
+ cMIDIインポートダイアログ.formメインフォーム = this.formメインフォーム;\r
+ cMIDIインポートダイアログ.tMIDI割り当て一覧を作成する();\r
+ cMIDIインポートダイアログ.tMIDIファイルを開く( strファイル名 );\r
+ if ( cMIDIインポートダイアログ.ShowDialog() == DialogResult.OK )\r
+ {\r
+ cMIDIインポートダイアログ.tMIDIインポート結果を反映する();\r
+ }\r
+ }\r
#region [ private ]\r
//-----------------\r
private Cメインフォーム formメインフォーム;\r
public void tトラックチャンクを走査する()\r
{\r
int p = 8;\r
- int nデルタタイム合計 = 0;\r
+ UInt32 nデルタタイム合計 = 0;\r
int nイベントbefore = 0;\r
\r
while( true )\r
{\r
// デルタタイム計算\r
- int nデルタタイムLen = 1;\r
- int[] nデルタタイム = new int[4];\r
- string str2進デルタタイム = "";\r
- nデルタタイム[0] = this.byMIDIトラックバイナリ[p];\r
- str2進デルタタイム += Convert.ToString( nデルタタイム[0], 2 ).PadLeft( 8, '0' );\r
- for (int i = 0; i < 3; i++)\r
- {\r
- if ( nデルタタイム[i] >= 128 )\r
- {\r
- nデルタタイム[i+1] = this.byMIDIトラックバイナリ[p+i+1];\r
- str2進デルタタイム += Convert.ToString( nデルタタイム[i+1], 2 ).PadLeft( 8, '0' );\r
- nデルタタイムLen = i+2;\r
- }\r
- }\r
- string str2進デルタタイム計算用 = "";\r
- for ( int i=0 ; i < nデルタタイムLen; i++ )\r
- {\r
- str2進デルタタイム計算用 += str2進デルタタイム.Substring(1+i*8,7);\r
- }\r
- nデルタタイム[0] = Convert.ToInt32(str2進デルタタイム計算用,2);\r
- nデルタタイム合計 += nデルタタイム[0];\r
- \r
+ int nデルタタイムLen = 0;\r
+ UInt32 deltatime = 0;\r
+ for ( int i = 0; i < 3; i++ ) // デルタタイムは最大4byte\r
+ {\r
+ ++nデルタタイムLen;\r
+ UInt32 b = this.byMIDIトラックバイナリ[ p + i ];\r
+ deltatime <<= 7;\r
+ deltatime += ( b & 0x7F ); // 下位7bitのみ使用\r
+ if ( b < 0x80 ) break; // MSBが0になったらデルタタイム終了\r
+ }\r
+ nデルタタイム合計 += deltatime;\r
+\r
// イベント\r
int nイベント = this.byMIDIトラックバイナリ[p+nデルタタイムLen];\r
int nイベントLen = 3;\r
this.nチャンネル = nイベント - 144 + 1;\r
if ( this.nチャンネル == cMIDI.n読み込みCh )\r
{\r
- cMIDI.lチップ.Add( new CMIDIチップ( cMIDI, nデルタタイム合計/2, nData1, nData2 ) );\r
+ cMIDI.lチップ.Add( new CMIDIチップ( cMIDI, (int)nデルタタイム合計, nData1, nData2 ) );\r
cMIDI.nドラム各ノート数[nData1] ++;\r
//this.str解析内容 += "Drum / Tick: "+nデルタタイム合計.ToString().PadLeft(6)+" Note: "+nData1.ToString("X2")+"\r\n";\r
}\r