From: yyagi Date: Mon, 21 Mar 2016 12:30:47 +0000 (+0000) Subject: #30333 [DTXC] MIDIインポート機能のbranchのビルド成功記念に、少しだけ修正。 X-Git-Tag: Release099f~3^2~85^2~23 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=84f8fb6e2ca9ae5ff3123d108823ae7c481f0f9f;p=dtxmania%2Fdtxmania.git #30333 [DTXC] MIDIインポート機能のbranchのビルド成功記念に、少しだけ修正。 * SMFファイルをD&Dで入力できるようにした * デルタタイム取得部を分かりやすくした (注:前のソースでも正しく動作します) * MIDIイベントの絶対時刻のリストへの積み方/引き取り方を少し見直した (2で割った値をリストに積んでいたのが分かりにくかったので) git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/branches/160321(DTXCreator%20with%20MIDI%20Import)@950 16f42ceb-6dc6-49c8-ba94-f2d53467949d --- diff --git a/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs b/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs index f6986c50..c4ab2e35 100644 --- a/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs +++ b/DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs @@ -741,7 +741,27 @@ namespace DTXCreator #region [ ファイルを読み込む。] //----------------- - this.t演奏ファイルを開いて読み込む( strファイル名 ); + string strExt = Path.GetExtension( strファイル名 ).ToLower(); + Debug.WriteLine( "ext=" + strExt ); + + if ( strExt.Equals(".dtx") ) + { + this.t演奏ファイルを開いて読み込む( strファイル名 ); + } + else if (strExt.Equals(".smf") || strExt.Equals(".mid")) + { + this.mgrMIDIインポート管理者.tMIDIインポート管理を開く( strファイル名 ); + this.mgr譜面管理者.tRefreshDisplayLanes(); // レーンの表示/非表示切り替えに備えて追加 + } + else + { + MessageBox.Show( + Resources.strDTXファイルではありませんMSG, + Resources.str確認ダイアログのタイトル, + MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 ); + + return; // 中断 + } //----------------- #endregion } diff --git a/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポートダイアログ.cs b/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポートダイアログ.cs index adc0d969..ce0e4c80 100644 --- a/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポートダイアログ.cs +++ b/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポートダイアログ.cs @@ -144,7 +144,7 @@ namespace DTXCreator.MIDIインポート this.tMIDIファイルを開く( dialog.FileName ); } - private void tMIDIファイルを開く( string strファイル名 ) + public void tMIDIファイルを開く( string strファイル名 ) { #region [ ファイル確認 ] //----------------- @@ -352,7 +352,7 @@ namespace DTXCreator.MIDIインポート { if ( vMIDIチップ.b入力 ) { - this.formメインフォーム.mgr譜面管理者.tチップを配置または置換する( vMIDIチップ.nレーン番号, vMIDIチップ.n時間 / (cMIDI.n分解能 / 96 ), vMIDIチップ.nWAV, 0f, false ); + this.formメインフォーム.mgr譜面管理者.tチップを配置または置換する( vMIDIチップ.nレーン番号, vMIDIチップ.n時間 * (192 / 4) / cMIDI.n分解能, vMIDIチップ.nWAV, 0f, false ); } } this.formメインフォーム.mgr譜面管理者.tチップを配置または置換する( this.formメインフォーム.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BGM" ), 0, 2, 0f, false ); diff --git a/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポート管理.cs b/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポート管理.cs index 1d716197..de6a305a 100644 --- a/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポート管理.cs +++ b/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポート管理.cs @@ -27,7 +27,21 @@ namespace DTXCreator.MIDIインポート cMIDIインポートダイアログ.tMIDIインポート結果を反映する(); } } + public void tMIDIインポート管理を開く(string strファイル名 ) + { + if ( this.formメインフォーム.t未保存なら保存する() == DialogResult.Cancel ) return; + this.formメインフォーム.b未保存 = false; + this.formメインフォーム.tシナリオ_新規作成(); + CMIDIインポートダイアログ cMIDIインポートダイアログ = new CMIDIインポートダイアログ(); + cMIDIインポートダイアログ.formメインフォーム = this.formメインフォーム; + cMIDIインポートダイアログ.tMIDI割り当て一覧を作成する(); + cMIDIインポートダイアログ.tMIDIファイルを開く( strファイル名 ); + if ( cMIDIインポートダイアログ.ShowDialog() == DialogResult.OK ) + { + cMIDIインポートダイアログ.tMIDIインポート結果を反映する(); + } + } #region [ private ] //----------------- private Cメインフォーム formメインフォーム; diff --git a/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIトラック.cs b/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIトラック.cs index 7008c147..729c827f 100644 --- a/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIトラック.cs +++ b/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIトラック.cs @@ -34,34 +34,24 @@ namespace DTXCreator.MIDIインポート public void tトラックチャンクを走査する() { int p = 8; - int nデルタタイム合計 = 0; + UInt32 nデルタタイム合計 = 0; int nイベントbefore = 0; while( true ) { // デルタタイム計算 - int nデルタタイムLen = 1; - int[] nデルタタイム = new int[4]; - string str2進デルタタイム = ""; - nデルタタイム[0] = this.byMIDIトラックバイナリ[p]; - str2進デルタタイム += Convert.ToString( nデルタタイム[0], 2 ).PadLeft( 8, '0' ); - for (int i = 0; i < 3; i++) - { - if ( nデルタタイム[i] >= 128 ) - { - nデルタタイム[i+1] = this.byMIDIトラックバイナリ[p+i+1]; - str2進デルタタイム += Convert.ToString( nデルタタイム[i+1], 2 ).PadLeft( 8, '0' ); - nデルタタイムLen = i+2; - } - } - string str2進デルタタイム計算用 = ""; - for ( int i=0 ; i < nデルタタイムLen; i++ ) - { - str2進デルタタイム計算用 += str2進デルタタイム.Substring(1+i*8,7); - } - nデルタタイム[0] = Convert.ToInt32(str2進デルタタイム計算用,2); - nデルタタイム合計 += nデルタタイム[0]; - + int nデルタタイムLen = 0; + UInt32 deltatime = 0; + for ( int i = 0; i < 3; i++ ) // デルタタイムは最大4byte + { + ++nデルタタイムLen; + UInt32 b = this.byMIDIトラックバイナリ[ p + i ]; + deltatime <<= 7; + deltatime += ( b & 0x7F ); // 下位7bitのみ使用 + if ( b < 0x80 ) break; // MSBが0になったらデルタタイム終了 + } + nデルタタイム合計 += deltatime; + // イベント int nイベント = this.byMIDIトラックバイナリ[p+nデルタタイムLen]; int nイベントLen = 3; @@ -84,7 +74,7 @@ namespace DTXCreator.MIDIインポート this.nチャンネル = nイベント - 144 + 1; if ( this.nチャンネル == cMIDI.n読み込みCh ) { - cMIDI.lチップ.Add( new CMIDIチップ( cMIDI, nデルタタイム合計/2, nData1, nData2 ) ); + cMIDI.lチップ.Add( new CMIDIチップ( cMIDI, (int)nデルタタイム合計, nData1, nData2 ) ); cMIDI.nドラム各ノート数[nData1] ++; //this.str解析内容 += "Drum / Tick: "+nデルタタイム合計.ToString().PadLeft(6)+" Note: "+nData1.ToString("X2")+"\r\n"; } diff --git a/実行時フォルダ(DTXCreator)/DTXCreator.exe b/実行時フォルダ(DTXCreator)/DTXCreator.exe index 889e6de5..9132f72e 100644 Binary files a/実行時フォルダ(DTXCreator)/DTXCreator.exe and b/実行時フォルダ(DTXCreator)/DTXCreator.exe differ diff --git a/実行時フォルダ(DTXCreator)/dll/FDK.dll b/実行時フォルダ(DTXCreator)/dll/FDK.dll index 452857c8..f9efe34f 100644 Binary files a/実行時フォルダ(DTXCreator)/dll/FDK.dll and b/実行時フォルダ(DTXCreator)/dll/FDK.dll differ diff --git a/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll b/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll index add00c70..d161ef8c 100644 Binary files a/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll and b/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll differ diff --git a/実行時フォルダ/dll/FDK.dll b/実行時フォルダ/dll/FDK.dll index 452857c8..f9efe34f 100644 Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ