OSDN Git Service

#30333 [DTXC] MIDIインポート機能について
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 24 Mar 2016 15:31:06 +0000 (15:31 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 24 Mar 2016 15:31:06 +0000 (15:31 +0000)
 * SMFファイルをimportする直前に編集していたファイルの破棄のタイミングを、imprtを開始する直前にした
 * 1トラックあたり64KBを超えるMIDIファイルをとりあえず読み込めるようにした
 * 新デルタタイム取得部で最大3byteしか読んでなかったのを修正した
 * 最大小節長の計算部でのDivided By Zero抑止
 * ベロシティ0でのノートオンを、ノートオフとみなすよう修正
 * BPMの途中変化に対応した

git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/branches/160321(DTXCreator%20with%20MIDI%20Import)@951 16f42ceb-6dc6-49c8-ba94-f2d53467949d

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

index 6dcff43..f10aa9c 100644 (file)
     <Compile Include="コード\00.全体\Program.cs" />\r
     <Compile Include="Properties\AssemblyInfo.cs" />\r
     <Compile Include="コード\07.MIDIインポート\CMIDI.cs" />\r
-    <Compile Include="コード\07.MIDIインポート\CMIDIインポートダイアログ.cs" />\r
+    <Compile Include="コード\07.MIDIインポート\CMIDIインポートダイアログ.cs">\r
+      <SubType>Form</SubType>\r
+    </Compile>\r
     <Compile Include="コード\07.MIDIインポート\CMIDIインポートダイアログ.Designer.cs">\r
       <DependentUpon>CMIDIインポートダイアログ.cs</DependentUpon>\r
     </Compile>\r
     <Compile Include="コード\07.MIDIインポート\CMIDIインポート管理.cs" />\r
-    <Compile Include="ã\82³ã\83¼ã\83\89\07.MIDIã\82¤ã\83³ã\83\9dã\83¼ã\83\88\CMIDIã\83\81ã\83\83ã\83\97.cs" />\r
+    <Compile Include="ã\82³ã\83¼ã\83\89\07.MIDIã\82¤ã\83³ã\83\9dã\83¼ã\83\88\CMIDIã\82¤ã\83\99ã\83³ã\83\88.cs" />\r
     <Compile Include="コード\07.MIDIインポート\CMIDIトラック.cs" />\r
     <EmbeddedResource Include="Properties\Resources.ja-JP.resx">\r
       <SubType>Designer</SubType>\r
index c4ab2e3..4d5ea9c 100644 (file)
@@ -44,7 +44,7 @@ namespace DTXCreator
                public Cチップパレット dlgチップパレット;\r
                private Cオプション管理 mgrオプション管理者 = null;\r
                private C選択モード管理 mgr選択モード管理者 = null;\r
-               private C編集モード管理 mgr編集モード管理者 = null;\r
+               internal C編集モード管理 mgr編集モード管理者 = null;\r
                internal C譜面管理 mgr譜面管理者 = null;\r
                internal CWAVリスト管理 mgrWAVリスト管理者 = null;\r
                internal CBMPリスト管理 mgrBMPリスト管理者 = null;\r
@@ -742,7 +742,6 @@ namespace DTXCreator
                        #region [ ファイルを読み込む。]\r
                        //-----------------\r
                        string strExt = Path.GetExtension( strファイル名 ).ToLower();\r
-                       Debug.WriteLine( "ext=" + strExt );\r
 \r
                        if ( strExt.Equals(".dtx") )\r
                        {\r
index c01d43b..8b39a4c 100644 (file)
@@ -16,13 +16,13 @@ namespace DTXCreator.MIDIインポート
         public byte[] byMIDIバイナリ;\r
         public bool bMIDIファイル;\r
         public List<CMIDIトラック> lMIDIトラック;\r
-        public List<CMIDIã\83\81ã\83\83ã\83\97> lチップ;\r
+        public List<CMIDIã\82¤ã\83\99ã\83³ã\83\88> lチップ;\r
         public double dBPM;\r
         public string strTimeSignature;\r
         public int[] nドラム各ノート数;\r
         public int n分解能;\r
         public Cメインフォーム formメインフォーム;\r
-               public List<CMIDIã\83\81ã\83\83ã\83\97> lMIDIWAV;\r
+               public List<CMIDIã\82¤ã\83\99ã\83³ã\83\88> lMIDIWAV;\r
                public int n読み込みCh;\r
 \r
         public int dトラック数\r
@@ -39,9 +39,9 @@ namespace DTXCreator.MIDIインポート
             this.byMIDIバイナリ = File.ReadAllBytes( this.strファイル名 );\r
             this.bMIDIファイル = ( strBin2BinStr(this.byMIDIバイナリ, 0, 4) == "4D 54 68 64" );\r
             this.lMIDIトラック = new List<CMIDIトラック>();\r
-            this.lã\83\81ã\83\83ã\83\97 = new List<CMIDIã\83\81ã\83\83ã\83\97>();\r
-            this.nドラム各ノート数 = new int[128];\r
-                       this.lMIDIWAV = new List<CMIDIã\83\81ã\83\83ã\83\97>();\r
+            this.lã\83\81ã\83\83ã\83\97 = new List<CMIDIã\82¤ã\83\99ã\83³ã\83\88>();\r
+            this.nドラム各ノート数 = new int[256];\r
+                       this.lMIDIWAV = new List<CMIDIã\82¤ã\83\99ã\83³ã\83\88>();\r
         }\r
 \r
         // 解析処理 全バイナリを見てMTrkだけ抜き取る\r
@@ -49,7 +49,7 @@ namespace DTXCreator.MIDIインポート
         {\r
             // MThdが存在しなければ解析処理を行わない\r
             if ( !bMIDIファイル ) return;\r
-                       this.lMIDIWAV = new List<CMIDIã\83\81ã\83\83ã\83\97>();\r
+                       this.lMIDIWAV = new List<CMIDIã\82¤ã\83\99ã\83³ã\83\88>();\r
 \r
                        this.n分解能 = nBin2Int( this.byMIDIバイナリ, 12, 2 );\r
 \r
@@ -58,7 +58,8 @@ namespace DTXCreator.MIDIインポート
                 // MTrkがあればトラックを追加する\r
                 if ( strBin2BinStr(this.byMIDIバイナリ, i, 4) == "4D 54 72 6B" )\r
                 {\r
-                    byte[] data_track = new byte[65536];\r
+                                       int track_size = nBin2Int( this.byMIDIバイナリ, i + 4, 4 );\r
+                    byte[] data_track = new byte[track_size + 8 + 8];  // 大きめに取りました\r
                     Array.Copy( this.byMIDIバイナリ, i, data_track, 0, nBin2Int( this.byMIDIバイナリ, i+4, 4 ) + 8 );\r
                     this.lMIDIトラック.Add( new CMIDIトラック( this, this.dトラック数, data_track ) );\r
                     this.lMIDIトラック[this.lMIDIトラック.Count-1].tトラックチャンクを走査する();\r
@@ -69,7 +70,7 @@ namespace DTXCreator.MIDIインポート
                // DataGridViewに設定した値に応じて各レーンに振り分ける\r
         public void tMIDIチップをレーンに割り当てる( DataGridView dgv )\r
         {\r
-                       foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIチップ in this.lチップ )\r
+                       foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIチップ in this.lチップ )\r
                        {\r
                                foreach (DataGridViewRow dgvr in dgv.Rows)\r
                                {\r
@@ -87,6 +88,10 @@ namespace DTXCreator.MIDIインポート
                                                        vMIDIチップ.strコメント = "";\r
                                                        vMIDIチップ.b入力 = false;\r
                                                }\r
+                                               if ( vMIDIチップ.eイベントタイプ == CMIDIイベント.Eイベントタイプ.BPM )\r
+                                               {\r
+                                                       vMIDIチップ.b入力 = true;\r
+                                               }\r
                                        }\r
                                }\r
                        }\r
@@ -95,13 +100,13 @@ namespace DTXCreator.MIDIインポート
 \r
         public void tMIDIチップをMIDIWAVリスト化する()\r
         {\r
-                       this.lMIDIWAV = new List<CMIDIã\83\81ã\83\83ã\83\97>();\r
+                       this.lMIDIWAV = new List<CMIDIã\82¤ã\83\99ã\83³ã\83\88>();\r
 \r
-                       foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIチップ in this.lチップ )\r
+                       foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIチップ in this.lチップ )\r
                        {\r
                                // WAVリストで、同じ内容(キーとベロシティ)が無ければ挿入する\r
                                bool bMIDIWAV_AddFlag = true;\r
-                               foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIWAV in this.lMIDIWAV )\r
+                               foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIWAV in this.lMIDIWAV )\r
                                {\r
                                        if ( vMIDIWAV.strWAV重複チェック == vMIDIチップ.strWAV重複チェック )\r
                                        {\r
@@ -122,9 +127,9 @@ namespace DTXCreator.MIDIインポート
                        if (this.lチップ.Count == 0) return 0;\r
 \r
                        int nMIDIチップ同時刻同レーン重複 = 0;\r
-                       foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIチップ1 in this.lチップ )\r
+                       foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIチップ1 in this.lチップ )\r
                        {\r
-                               foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIチップ2 in this.lチップ )\r
+                               foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIチップ2 in this.lチップ )\r
                                {\r
                                        if ( vMIDIチップ1.nキー != vMIDIチップ2.nキー && vMIDIチップ1.nレーン番号 == vMIDIチップ2.nレーン番号 && vMIDIチップ1.n時間 == vMIDIチップ2.n時間 )\r
                                        {\r
@@ -135,12 +140,12 @@ namespace DTXCreator.MIDIインポート
                        return nMIDIチップ同時刻同レーン重複/2;\r
                }\r
 \r
-               public CMIDIã\83\81ã\83\83ã\83\97 pMIDIチップで一番遅い時間のチップを返す()\r
+               public CMIDIã\82¤ã\83\99ã\83³ã\83\88 pMIDIチップで一番遅い時間のチップを返す()\r
                {\r
                        if (this.lチップ.Count == 0) return null;\r
 \r
-                       CMIDIã\83\81ã\83\83ã\83\97 cMIDIチップ = null;\r
-                       foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIチップ in this.lチップ )\r
+                       CMIDIã\82¤ã\83\99ã\83³ã\83\88 cMIDIチップ = null;\r
+                       foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIチップ in this.lチップ )\r
                        {\r
                                if ( cMIDIチップ == null || cMIDIチップ.n時間 <= vMIDIチップ.n時間 )\r
                                {\r
index ce0e4c8..0a68137 100644 (file)
@@ -6,6 +6,7 @@ using System.Windows.Forms;
 using System.ComponentModel;\r
 using System.IO;\r
 using System.Drawing;\r
+using System.Diagnostics;\r
 using DTXCreator.譜面;\r
 using DTXCreator.WAV_BMP_AVI;\r
 using DTXCreator.Properties;\r
@@ -282,14 +283,14 @@ namespace DTXCreator.MIDIインポート
             if ( cMIDI != null && cMIDI.lチップ.Count > 0 )\r
             {\r
                                // チップリストで、ベロシティをDTX向けに調整する\r
-                               foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIチップ in cMIDI.lチップ )\r
+                               foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIチップ in cMIDI.lチップ )\r
                                {\r
-                                       int num3 = vMIDIチップ.nベロシティ;\r
-                                       if ( this.checkBox2.Checked ) num3 = (int)(num3 / 1.27);\r
-                                       if ( this.checkBox1.Checked ) num3 = (int)( Math.Pow( num3, 1.5 ) / Math.Pow( 100, 0.5 ) );\r
-                                       num3 = ( num3 / (int)this.numericUpDown1.Value ) * (int)this.numericUpDown1.Value;\r
-                                       num3 = ( num3 > 100 ) ? 100 : ( ( num3 == 0 ) ? 1 : num3 );\r
-                                       vMIDIチップ.nベロシティ_DTX変換後 = num3;\r
+                                       int velo = vMIDIチップ.nベロシティ;\r
+                                       if ( this.checkBox2.Checked ) velo = (int)(velo / 1.27);\r
+                                       if ( this.checkBox1.Checked ) velo = (int)( Math.Pow( velo, 1.5 ) / Math.Pow( 100, 0.5 ) );\r
+                                       velo = ( velo / (int)this.numericUpDown1.Value ) * (int)this.numericUpDown1.Value;\r
+                                       velo = ( velo > 100 ) ? 100 : ( ( velo == 0 ) ? 1 : velo );\r
+                                       vMIDIチップ.nベロシティ_DTX変換後 = velo;\r
                                }\r
 \r
                                // 配置予定チップをレーン指定に沿って割り当てる\r
@@ -308,7 +309,7 @@ namespace DTXCreator.MIDIインポート
                                int nWAVCount = 4;\r
                                int nレーン番号before = 0;\r
                                \r
-                               foreach ( CMIDIã\83\81ã\83\83ã\83\97 vチップWAV in cMIDI.lMIDIWAV )\r
+                               foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vチップWAV in cMIDI.lMIDIWAV )\r
                                {\r
                                        if ( nWAVCount > 4 && nレーン番号before != vチップWAV.nレーン番号 ) nWAVCount++;\r
                                        nレーン番号before = vチップWAV.nレーン番号;\r
@@ -323,7 +324,7 @@ namespace DTXCreator.MIDIインポート
                                        cwav.col背景色 = Color.FromArgb( color.R/2 + 128, color.G/2 + 128, color.B/2 + 128 );\r
 \r
                                        // 配置予定全チップのWAVを指定する\r
-                                       foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIチップ in cMIDI.lチップ )\r
+                                       foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIチップ in cMIDI.lチップ )\r
                                        {\r
                                                if ( vチップWAV.strWAV重複チェック == vMIDIチップ.strWAV重複チェック ) vMIDIチップ.nWAV = nWAVCount;\r
                                        }\r
@@ -340,29 +341,27 @@ namespace DTXCreator.MIDIインポート
                 if ( cMIDI.nMIDI重複チップ数を返す() > 0 ) this.formメインフォーム.textBoxコメント.Text = "重複チップ : "+cMIDI.nMIDI重複チップ数を返す();\r
                                \r
                                // 小節付加\r
-                               int num = this.formメインフォーム.mgr譜面管理者.n現在の最大の小節番号を返す();\r
-                               int num2 = cMIDI.pMIDIチップで一番遅い時間のチップを返す().n時間 / ( cMIDI.n分解能 / 96 ) / 384;\r
-                               for( int i = num + 1; i <= num2 ; i++ )\r
+                               int nCurrentMaxBar = this.formメインフォーム.mgr譜面管理者.n現在の最大の小節番号を返す();                                      // ★★拍子変更対応の場合、ここも修正しないとダメよ****************\r
+                               UInt32 nMaxBar = cMIDI.pMIDIチップで一番遅い時間のチップを返す().n時間 * (192 / 4) / (UInt32) cMIDI.n分解能 / 384;\r
+                               for ( int i = nCurrentMaxBar + 1; i <= nMaxBar; i++ )\r
                                {\r
                                        this.formメインフォーム.mgr譜面管理者.dic小節.Add( i, new C小節( i ) );\r
                                }\r
                                \r
                                // チップ配置\r
-                foreach ( CMIDIã\83\81ã\83\83ã\83\97 vMIDIチップ in cMIDI.lチップ )\r
+                foreach ( CMIDIã\82¤ã\83\99ã\83³ã\83\88 vMIDIチップ in cMIDI.lチップ )\r
                 {\r
                                        if ( vMIDIチップ.b入力 )\r
                                        {\r
-                                               this.formメインフォーム.mgr譜面管理者.tチップを配置または置換する( vMIDIチップ.nレーン番号, vMIDIチップ.n時間 * (192 / 4) / cMIDI.n分解能, vMIDIチップ.nWAV, 0f, false );\r
+                                               vMIDIチップ.挿入( this.formメインフォーム, cMIDI.n分解能 );\r
                                        }\r
                 }\r
                                this.formメインフォーム.mgr譜面管理者.tチップを配置または置換する( this.formメインフォーム.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BGM" ), 0, 2, 0f, false );\r
-                               \r
-\r
             }\r
-        }\r
+               }\r
                \r
                // lMIDIWAVソート用\r
-               static int nMIDIWAVSort( CMIDIã\83\81ã\83\83ã\83\97 a, CMIDIã\83\81ã\83\83ã\83\97 b )\r
+               static int nMIDIWAVSort( CMIDIã\82¤ã\83\99ã\83³ã\83\88 a, CMIDIã\82¤ã\83\99ã\83³ã\83\88 b )\r
                {\r
                        if ( a.nレーン番号 > b.nレーン番号 ) return 1;\r
                        else if ( a.nレーン番号 < b.nレーン番号 ) return -1;\r
index de6a305..0d4cf87 100644 (file)
@@ -13,10 +13,6 @@ namespace DTXCreator.MIDIインポート
                }\r
                public void tMIDIインポート管理を開く()\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
@@ -24,21 +20,24 @@ namespace DTXCreator.MIDIインポート
 \r
             if (cMIDIインポートダイアログ.ShowDialog() == DialogResult.OK)\r
             {\r
-                cMIDIインポートダイアログ.tMIDIインポート結果を反映する();\r
+                               if ( this.formメインフォーム.t未保存なら保存する() == DialogResult.Cancel ) return;\r
+                               this.formメインフォーム.b未保存 = false;\r
+                               this.formメインフォーム.tシナリオ_新規作成();\r
+\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
+                               this.formメインフォーム.b未保存 = false;\r
+                               this.formメインフォーム.tシナリオ_新規作成();\r
+\r
                                cMIDIインポートダイアログ.tMIDIインポート結果を反映する();\r
                        }\r
                }\r
index 729c827..565cd97 100644 (file)
@@ -5,6 +5,7 @@ using System.Linq;
 using System.Text;\r
 using System.Threading.Tasks;\r
 using System.Windows.Forms;\r
+using System.Diagnostics;\r
 \r
 namespace DTXCreator.MIDIインポート\r
 {\r
@@ -40,9 +41,9 @@ namespace DTXCreator.MIDIインポート
             while( true )\r
             {\r
                                // デルタタイム計算\r
-                int nデルタタイムLen = 0;\r
+                               int nデルタタイムLen = 0;\r
                                UInt32 deltatime = 0;\r
-                               for ( int i = 0; i < 3; i++ )           // デルタタイムは最大4byte\r
+                               for ( int i = 0; i < 4; i++ )           // デルタタイムは最大4byte\r
                                {\r
                                        ++nデルタタイムLen;\r
                                        UInt32 b = this.byMIDIトラックバイナリ[ p + i ];\r
@@ -57,26 +58,26 @@ namespace DTXCreator.MIDIインポート
                 int nイベントLen = 3;\r
 \r
                                // デルタタイムの直後がイベントじゃなかったら、前のイベントを継ぐ\r
-                               if ( nイベント < 128 && nイベントbefore >= 128 && nイベントbefore < 160 )\r
+                               if ( nイベント < 0x80 )\r
                                {\r
                                        nイベント = nイベントbefore;\r
                                        p -= 1;\r
                                }\r
                 \r
                 // 8n - 9n ノートオフ・オン\r
-                if ( nイベント >= 128 && nイベント < 160 )\r
+                if ( 0x80 <= nイベント && nイベント <= 0x9F )\r
                 {\r
                     int nData1 = this.byMIDIトラックバイナリ[p+nデルタタイムLen+1];\r
                     int nData2 = this.byMIDIトラックバイナリ[p+nデルタタイムLen+2];\r
-                    // ノートオン(9n)の時の値を取得\r
-                    if ( nイベント >= 144 )\r
+                    // ノートオン(9n)の時の値を取得 (ノートオンでも、ベロシティ0の場合はノートオフの意味なので、無視する)\r
+                    if ( nイベント >= 0x90 && nData2 > 0 )\r
                     {\r
-                        this.nチャンネル = nイベント - 144 + 1;\r
+                        this.nチャンネル = nイベント - 0x90 + 1;\r
                         if ( this.nチャンネル == cMIDI.n読み込みCh )\r
                         {\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
+                            cMIDI.lチップ.Add( new CMIDINote( nデルタタイム合計, nData1, nData2 ) );\r
+                            cMIDI.nドラム各ノート数[nData1]++;\r
+                                                       //this.str解析内容 += "Drum  / Tick: " + nデルタタイム合計.ToString().PadLeft( 6 ) + " Note: " + nData1.ToString( "X2" ) + "\r\n";\r
                         }\r
                     }\r
                                        //this.str解析内容 += ((nイベント>=144)?"N-ON ":"N-OFF")+" "+p.ToString().PadLeft(6)+" "+nデルタタイム[0]+","+nData1.ToString("X2")+","+nData2.ToString("X2")+"\r\n";\r
@@ -84,15 +85,17 @@ namespace DTXCreator.MIDIインポート
                     nイベントLen = 3;\r
                 }\r
                 // A0 - EF コントロールチェンジ等\r
-                else if ( nイベント >= 160 && nイベント < 240 )\r
+                else if ( 0xA0 <= nイベント && nイベント <= 0xEF )\r
                 {\r
                     int nData1 = this.byMIDIトラックバイナリ[p+nデルタタイムLen+1];\r
                     int nData2 = this.byMIDIトラックバイナリ[p+nデルタタイムLen+2];\r
                     \r
                     nイベントLen = 3;\r
-                    if ( nイベント >= 192 && nイベント < 224 ) nイベントLen = 2;\r
+                    if ( 0xC0 <= nイベント && nイベント < 0xDF ) nイベントLen = 2;\r
 \r
                     //this.str解析内容 += "CC    / Tick: "+nデルタタイム合計.ToString().PadLeft(6)+" Type: "+nData1.ToString("X2")+"\r\n";\r
+\r
+                                       // 面倒なので、コントロールチェンジが3byteになる場合はとりあえず想定しない。相当レアだし。\r
                 }\r
                 // F0 システム?\r
                 else if ( nイベント.ToString("X2") == "F0" )\r
@@ -148,7 +151,9 @@ namespace DTXCreator.MIDIインポート
                         case "51" :\r
                             cMIDI.dBPM = Math.Round( (double) 60.0 * Math.Pow(10,6) / CMIDI.nBin2Int( this.byMIDIトラックバイナリ, p+nデルタタイムLen+3, 3 ), 2 );\r
                             nイベントLen = 6;\r
-                            break;\r
+                                                       cMIDI.lチップ.Add( new CMIDIBPM( nデルタタイム合計, (float) cMIDI.dBPM) );\r
+                            cMIDI.nドラム各ノート数[128] ++;\r
+                                                       break;\r
 \r
                         // FF 54\r
                         case "54" :\r
@@ -158,8 +163,16 @@ namespace DTXCreator.MIDIインポート
                         // FF 58\r
                         case "58" :\r
                             // 拍設定 格納だけして何もしてない\r
+                                                       int n分子 = this.byMIDIトラックバイナリ[ p + nデルタタイムLen + 3 ];\r
+                                                       int n分母 = this.byMIDIトラックバイナリ[ p + nデルタタイムLen + 4 ];\r
+                                                       int nメトロノームクリックtick = this.byMIDIトラックバイナリ[ p + nデルタタイムLen + 5 ];\r
+                                                       int nメトロノームクリック数内32分音符数 = this.byMIDIトラックバイナリ[ p + nデルタタイムLen + 6 ];\r
+\r
                             cMIDI.strTimeSignature = CMIDI.strBin2BinStr( this.byMIDIトラックバイナリ, p+nデルタタイムLen+3, 4 );\r
                             nイベントLen = 7;\r
+\r
+                                                       cMIDI.lチップ.Add( new CMIDIBARLen( nデルタタイム合計, n分子, n分母 ) );\r
+                            cMIDI.nドラム各ノート数[128] ++;\r
                             break;\r
 \r
                         // FF 59\r
index 9132f72..0731a8c 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/DTXCreator.exe and b/実行時フォルダ(DTXCreator)/DTXCreator.exe differ
index d161ef8..9e57547 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll and b/実行時フォルダ(DTXCreator)/ja-JP/DTXCreator.resources.dll differ
index 04e7876..d0e52c0 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ