OSDN Git Service

#30333 [DTXC] MIDIインポート機能のbranchのビルド成功記念に、少しだけ修正。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Mon, 21 Mar 2016 12:30:47 +0000 (12:30 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Mon, 21 Mar 2016 12:30:47 +0000 (12:30 +0000)
 * 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

DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs
DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポートダイアログ.cs
DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIインポート管理.cs
DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDIトラック.cs
実行時フォルダ(DTXCreator)/DTXCreator.exe
実行時フォルダ(DTXCreator)/dll/FDK.dll
実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll
実行時フォルダ/dll/FDK.dll

index f6986c5..c4ab2e3 100644 (file)
@@ -741,7 +741,27 @@ namespace DTXCreator
 \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
index adc0d96..ce0e4c8 100644 (file)
@@ -144,7 +144,7 @@ namespace DTXCreator.MIDIインポート
             this.tMIDIファイルを開く( dialog.FileName );\r
         }\r
 \r
-        private void tMIDIファイルを開く( string strファイル名 )\r
+        public void tMIDIファイルを開く( string strファイル名 )\r
         {\r
             #region [ ファイル確認 ]\r
             //-----------------\r
@@ -352,7 +352,7 @@ namespace DTXCreator.MIDIインポート
                 {\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
index 1d71619..de6a305 100644 (file)
@@ -27,7 +27,21 @@ namespace DTXCreator.MIDIインポート
                 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
index 7008c14..729c827 100644 (file)
@@ -34,34 +34,24 @@ namespace DTXCreator.MIDIインポート
         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
@@ -84,7 +74,7 @@ namespace DTXCreator.MIDIインポート
                         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
index 889e6de..9132f72 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/DTXCreator.exe and b/実行時フォルダ(DTXCreator)/DTXCreator.exe differ
index 452857c..f9efe34 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/dll/FDK.dll and b/実行時フォルダ(DTXCreator)/dll/FDK.dll differ
index add00c7..d161ef8 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll and b/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll differ
index 452857c..f9efe34 100644 (file)
Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ