OSDN Git Service

#30333 MIDIインポート設定ファイルの読込/保存を追加。
[dtxmania/dtxmania.git] / DTXCreatorプロジェクト / コード / 07.MIDIインポート / CMIDIインポートダイアログ.cs
index 5f68253..21529c4 100644 (file)
@@ -7,6 +7,8 @@ using System.ComponentModel;
 using System.IO;\r
 using System.Drawing;\r
 using System.Diagnostics;\r
+using System.Xml;\r
+using System.Runtime.Serialization;\r
 using DTXCreator.譜面;\r
 using DTXCreator.WAV_BMP_AVI;\r
 using DTXCreator.Properties;\r
@@ -41,8 +43,18 @@ namespace DTXCreator.MIDIインポート
 \r
         private void buttonOpen_Click(object sender, EventArgs e)\r
         {\r
-            this.tMIDIファイルを選択する();\r
+            tMIDIファイルを選択する();\r
         }\r
+\r
+               private void buttonOpenSettings_Click(object sender, EventArgs e)\r
+               {\r
+                       tMIDIインポート設定ファイル選択ダイアログを開く();\r
+               }\r
+\r
+               private void buttonSaveSettings_Click(object sender, EventArgs e)\r
+               {\r
+                       tMIDIインポート設定ファイル保存ダイアログを開く();\r
+               }\r
         \r
         // レーン名をワンクリックで開く用\r
         private void dgv割り当て一覧_CellEnter( object sender, DataGridViewCellEventArgs e )\r
@@ -53,15 +65,15 @@ namespace DTXCreator.MIDIインポート
                 SendKeys.Send("{F4}");\r
         }\r
 \r
-               // レーン名を変更したら\r
+               // 割り当て一覧が更新された時の処理\r
         private void dgv割り当て一覧_CellEndEdit( object sender, DataGridViewCellEventArgs e )\r
         {\r
             DataGridView dgv割り当て一覧 = (DataGridView) sender;\r
 \r
-            if ( dgv割り当て一覧.Columns[e.ColumnIndex].Name == "DTX_Lane" )\r
+            if ( dgv割り当て一覧.Columns[e.ColumnIndex].Name == "Assign_DTX_Lane" )\r
                 tMIDI割り当て一覧のレーン名の背景色を変更する( e.RowIndex );\r
                        \r
-            if ( cMIDI != null ) tMIDIチップをレーンに割り当てる();\r
+            tMIDIチップをレーンに割り当てる();\r
 \r
         }\r
 \r
@@ -103,14 +115,14 @@ namespace DTXCreator.MIDIインポート
                private void dgvチャンネル一覧_CellValueChanged( object sender, DataGridViewCellEventArgs e )\r
                {\r
                        if ( cMIDI != null ) {\r
-                               t読み込むチャンネルを取得して割り当て一覧のノート数に反映する();\r
+                               t読み込むチャンネルを取得してキー毎のノート数を計算する();\r
                        }\r
                }\r
 \r
                /// <summary>\r
                /// ファイルを開いた時か、チャンネル一覧のチェック変更時に呼び出す\r
                /// </summary>\r
-               private void t読み込むチャンネルを取得して割り当て一覧のノート数に反映する()\r
+               private void t読み込むチャンネルを取得してキー毎のノート数を計算する()\r
                {\r
                        // キー毎のノート数初期化\r
                        for ( int i = 0 ; i < 128 ; i++ ) cMIDI.nドラムチャンネルのキー毎のノート数[i] = 0;\r
@@ -120,13 +132,14 @@ namespace DTXCreator.MIDIインポート
                        {\r
                                if (vMIDIイベント.eイベントタイプ == CMIDIイベント.Eイベントタイプ.NoteOnOff)\r
                                {\r
-                                       if ( (bool)cMIDI.dgvチャンネル一覧.Rows[vMIDIイベント.nチャンネル0to15].Cells["ChLoad"].Value )\r
+                                       if ((bool)cMIDI.dgvチャンネル一覧.Rows[vMIDIイベント.nチャンネル0to15].Cells[ "Channel_Load" ].Value)\r
+                                       {\r
                                                cMIDI.nドラムチャンネルのキー毎のノート数[vMIDIイベント.nキー] ++;\r
-                                       \r
                                }\r
                        }\r
+                       }\r
             for ( int i = 0 ; i < 128 ; i++ )\r
-                this.dgv割り当て一覧.Rows[127-i].Cells["Notes"].Value = cMIDI.nドラムチャンネルのキー毎のノート数[i];\r
+                this.dgv割り当て一覧.Rows[127-i].Cells[ "Assign_Notes" ].Value = cMIDI.nドラムチャンネルのキー毎のノート数[i];\r
 \r
                        t同時刻で同じレーンに配置予定のチップを数えて反映する();\r
 \r
@@ -135,10 +148,10 @@ namespace DTXCreator.MIDIインポート
         public void tMIDI割り当て一覧を作成する()\r
         {\r
             // レーン一覧を作成\r
-            this.DTX_Lane.Items.AddRange( "* Disuse *" );\r
+            this.Assign_DTX_Lane.Items.AddRange( "* Disuse *" );\r
             foreach ( Cレーン cレーン in this.formメインフォーム.mgr譜面管理者.listレーン )\r
             {\r
-                               if ( cレーン.eレーン種別 == Cレーン.E種別.WAV ) this.DTX_Lane.Items.AddRange( cレーン.strレーン名 );\r
+                               if ( cレーン.eレーン種別 == Cレーン.E種別.WAV ) this.Assign_DTX_Lane.Items.AddRange( cレーン.strレーン名 );\r
             }\r
             \r
             // MIDIキー一覧を作成\r
@@ -196,33 +209,32 @@ namespace DTXCreator.MIDIインポート
                     case 78 : str楽器名 = "Mute Cuica"; break;\r
                     case 79 : str楽器名 = "Open Cuica"; break;\r
                     case 80 : str楽器名 = "Mute Triangle"; break;\r
-                    case 81 : str楽器名 = "Open Triangle"; break;\r
-                }\r
+                    case 81 : str楽器名 = "Open Triangle"; break;                }\r
                 this.dgv割り当て一覧.Rows.Add( i, strキー名[i%12], strレーン名, b裏チャンネル, 0, str楽器名 );\r
 \r
                                // 黒鍵に色付け\r
-                if ( i%12 == 1 || i%12 == 3 || i%12 == 6 || i%12 == 8 || i%12 == 10 ) this.dgv割り当て一覧.Rows[127-i].DefaultCellStyle.BackColor = Color.FromArgb( 240, 248, 255 );\r
+                if ( i%12 == 1 || i%12 == 3 || i%12 == 6 || i%12 == 8 || i%12 == 10 )\r
+                                       this.dgv割り当て一覧.Rows[127-i].DefaultCellStyle.BackColor = Color.FromArgb( 240, 248, 255 );\r
                                // C(ド)に色付け\r
                 if ( i%12 == 0 ) this.dgv割り当て一覧.Rows[127-i].DefaultCellStyle.BackColor = Color.FromArgb( 255, 224, 224 );\r
 \r
                 tMIDI割り当て一覧のレーン名の背景色を変更する( 127-i );\r
 \r
             }\r
-            this.dgv割り当て一覧.Columns["MIDI_Key"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;\r
-            this.dgv割り当て一覧.Columns["DTX_Lane"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;\r
-            this.dgv割り当て一覧.Columns["DTX_Lane"].DefaultCellStyle.Font = new Font( "meiryo", 8f, FontStyle.Bold );\r
+            this.dgv割り当て一覧.Columns[ "Assign_MIDI_Key" ].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;\r
+            this.dgv割り当て一覧.Columns[ "Assign_DTX_Lane" ].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;\r
+            this.dgv割り当て一覧.Columns[ "Assign_DTX_Lane" ].DefaultCellStyle.Font = new Font( "meiryo", 8f, FontStyle.Bold );\r
             this.dgv割り当て一覧.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;\r
 \r
-            this.dgv割り当て一覧.FirstDisplayedScrollingRowIndex = 81;//key35=LBDが表示される位置\r
-\r
+            this.dgv割り当て一覧.FirstDisplayedScrollingRowIndex = 82;//key35=LBDが表示される位置\r
         }\r
 \r
         public void tMIDIチャンネル一覧を作成する()\r
         {\r
-                       for (int i = 1; i <= 16; i++)\r
+                       for (int i = 0; i < 16; i++)\r
                        {\r
-                               this.dgvチャンネル一覧.Rows.Add( i, 0, (i==10) );\r
-                               this.dgvチャンネル一覧.Rows[i-1].DefaultCellStyle.BackColor = (i==10) ? Color.FromArgb( 255, 224, 224 ) : Color.FromArgb( 255, 255, 255 );\r
+                               this.dgvチャンネル一覧.Rows.Add( i+1, 0, (i+1==10) );\r
+                               this.dgvチャンネル一覧.Rows[i].DefaultCellStyle.BackColor = (i+1==10) ? Color.FromArgb( 255, 224, 224 ) : Color.FromArgb( 255, 255, 255 );\r
                        }\r
                        //      dgvチャンネル一覧変更イベント復旧();     //ここでイベントを復旧してはいけない\r
                                                                                                                //(直後にファイルを開く動作+解析動作が発生するのでそこで)\r
@@ -235,8 +247,8 @@ namespace DTXCreator.MIDIインポート
             //-----------------\r
 \r
             OpenFileDialog dialog = new OpenFileDialog();\r
-            dialog.Title = "MIDIファイルを選択";\r
-            dialog.Filter = "MIDIファイル (*.mid,*.midi)|*.mid;*.midi|すべてのファイル (*.*)|*.*";\r
+                       dialog.Title = Resources.strMIDIファイル選択ダイアログのタイトル;\r
+            dialog.Filter = Resources.strMIDIファイル選択ダイアログのフィルタ;\r
             dialog.FilterIndex = 1;\r
             dialog.InitialDirectory = this.formメインフォーム.strMIDIインポートフォルダ;\r
             DialogResult result = dialog.ShowDialog();\r
@@ -256,8 +268,8 @@ namespace DTXCreator.MIDIインポート
             if ( !File.Exists( strファイル名 ) )\r
             {\r
                 MessageBox.Show(\r
-                    "ファイルが見つかりません。",\r
-                    "MIDIインポート",\r
+                    Resources.strファイルが存在しませんMSG,\r
+                    Resources.strMIDIインポートエラーのタイトル,\r
                     MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);\r
                 return;\r
             }\r
@@ -271,9 +283,9 @@ namespace DTXCreator.MIDIインポート
             if ( !str拡張子.Equals(".mid", StringComparison.OrdinalIgnoreCase ) && !str拡張子.Equals( ".midi", StringComparison.OrdinalIgnoreCase) )\r
             {\r
                 MessageBox.Show(\r
-                    "MIDIファイルではありません。",\r
-                    "MIDIインポート",\r
-                    MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);\r
+                                       Resources.strMIDIファイルではないMSG,\r
+                                       Resources.strMIDIインポートエラーのタイトル,\r
+                                       MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 );\r
                 return;\r
             }\r
             //-----------------\r
@@ -296,9 +308,9 @@ namespace DTXCreator.MIDIインポート
             if ( !cMIDI.bMIDIファイル )\r
             {\r
                 MessageBox.Show(\r
-                    "MIDIファイルではありません。",\r
-                    "MIDIインポート",\r
-                    MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);\r
+                    Resources.strMIDIファイルではないMSG,\r
+                                       Resources.strMIDIインポートエラーのタイトル,\r
+                                       MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 );\r
                                cMIDI = null;\r
                 return;\r
             }\r
@@ -324,24 +336,24 @@ namespace DTXCreator.MIDIインポート
             }\r
             \r
             this.textBox1.Text = str文字列;\r
+\r
+                       //-----------------\r
+            #endregion\r
                        \r
             // 各チャンネルのノート数をチャンネル一覧に出力する\r
                        dgvチャンネル一覧変更イベント抑止();\r
                        for ( int i = 0; i < 16; i++ )\r
                        {\r
-                               this.dgvチャンネル一覧.Rows[i].Cells["ChNotes"].Value = cMIDI.nチャンネル0to15毎のノート数[i];\r
-                               this.dgvチャンネル一覧.Rows[i].Cells["ChLoad"].Value  = cMIDI.bドラムチャンネルと思われる[i];\r
+                               this.dgvチャンネル一覧.Rows[i].Cells[ "Channel_Notes" ].Value = cMIDI.nチャンネル0to15毎のノート数[i];\r
+                               this.dgvチャンネル一覧.Rows[i].Cells[ "Channel_Load" ].Value  = cMIDI.bドラムチャンネルと思われる[i];\r
                        }\r
                        dgvチャンネル一覧変更イベント復旧();\r
 \r
             // 各キーのノート数を割り当て一覧に出力する\r
-                       t読み込むチャンネルを取得して割り当て一覧のノート数に反映する();\r
+                       t読み込むチャンネルを取得してキー毎のノート数を計算する();\r
 \r
-                       // è¨­å®\9aã\81«å¿\9cã\81\98ã\81¦å\87¦ç\90\86ã\81\99ã\82\8b\r
+                       // èª­ã\81¿è¾¼ã\82\80ã\83\81ã\83£ã\83³ã\83\8dã\83«ã\81\8c確å®\9aã\81\97ã\81\9fã\82\89ã\80\81å\89²ã\82\8aå½\93ã\81¦ä¸\80覧ã\81\8cæ\9b´æ\96°ã\81\95ã\82\8cã\81\9fæ\99\82ã\81®å\87¦ç\90\86\r
                        tMIDIチップをレーンに割り当てる();\r
-\r
-                       //-----------------\r
-            #endregion\r
         }\r
                \r
                /// <summary>\r
@@ -349,19 +361,19 @@ namespace DTXCreator.MIDIインポート
                /// </summary>\r
         private void tMIDI割り当て一覧のレーン名の背景色を変更する( int RowIndex )\r
         {\r
-                       string strレーン名 = (string)this.dgv割り当て一覧.Rows[RowIndex].Cells["DTX_Lane"].Value;\r
+                       string strレーン名 = (string)this.dgv割り当て一覧.Rows[RowIndex].Cells[ "Assign_DTX_Lane" ].Value;\r
             int nレーン番号 = this.formメインフォーム.mgr譜面管理者.nレーン名に対応するレーン番号を返す( strレーン名 );\r
 \r
             if ( nレーン番号 >= this.formメインフォーム.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "LC" ) )\r
             {\r
                 Color color = this.formメインフォーム.mgr譜面管理者.listレーン[nレーン番号].col背景色;\r
                 color = Color.FromArgb( color.R/2+128, color.G/2+128, color.B/2+128 );\r
-                this.dgv割り当て一覧.Rows[RowIndex].Cells["DTX_Lane"].Style.BackColor = color;\r
+                this.dgv割り当て一覧.Rows[RowIndex].Cells[ "Assign_DTX_Lane" ].Style.BackColor = color;\r
             }\r
                        else if ( strレーン名 == "* Disuse *" )\r
                        {\r
                 Color color = Color.FromArgb( 128, 128, 128 );\r
-                this.dgv割り当て一覧.Rows[RowIndex].Cells["DTX_Lane"].Style.BackColor = color;\r
+                this.dgv割り当て一覧.Rows[RowIndex].Cells[ "Assign_DTX_Lane" ].Style.BackColor = color;\r
                        }\r
         }\r
 \r
@@ -369,7 +381,6 @@ namespace DTXCreator.MIDIインポート
         {\r
             if ( cMIDI != null && cMIDI.lMIDIイベント.Count > 0 )\r
             {\r
-                               \r
                                #region [ チップリストで、ベロシティをDTX向けに調整する ]\r
                                foreach ( CMIDIイベント vMIDIイベント in cMIDI.lMIDIイベント )\r
                                {\r
@@ -381,6 +392,10 @@ namespace DTXCreator.MIDIインポート
                                        vMIDIイベント.nベロシティ_DTX変換後 = velo;\r
                                }\r
                                #endregion\r
+                               \r
+                               #region [ 読み込むチャンネルを取得してキー毎のノート数を計算する ]\r
+                               t読み込むチャンネルを取得してキー毎のノート数を計算する();\r
+                               #endregion\r
 \r
                                #region [ 配置予定チップを割り当て一覧に沿ってレーンを割り当てる ]\r
                                tMIDIチップをレーンに割り当てる();\r
@@ -404,8 +419,8 @@ namespace DTXCreator.MIDIインポート
                                \r
                                foreach ( CMIDIイベント vMIDIWAV in cMIDI.lMIDIWAV )\r
                                {\r
-                                       // ノートチップ以外をWAVリストに表示させない\r
-                                       if ( vMIDIWAV.eイベントタイプ != CMIDIイベント.Eイベントタイプ.NoteOnOff ) continue;\r
+                                       // ノートチップ以外をWAVリストに表示させない→WAVリスト化する部分で処理する\r
+                                       //if ( vMIDIWAV.eイベントタイプ != CMIDIイベント.Eイベントタイプ.NoteOnOff ) continue;\r
 \r
                                        // レーン毎に1行空ける\r
                                        if ( nWAVCount > 4 && nレーン番号before != vMIDIWAV.nレーン番号 ) nWAVCount++;\r
@@ -450,7 +465,7 @@ namespace DTXCreator.MIDIインポート
                                // 配置予定チップで、選択されているチャンネルのノーツを実際に配置する\r
                 foreach ( CMIDIイベント vMIDIイベント in cMIDI.lMIDIイベント )\r
                 {\r
-                                       if ( vMIDIイベント.b入力 && (bool)dgvチャンネル一覧.Rows[vMIDIイベント.nチャンネル0to15].Cells["ChLoad"].Value )\r
+                                       if ( vMIDIイベント.b入力 )\r
                                        {\r
                                                vMIDIイベント.挿入( this.formメインフォーム, cMIDI.n分解能 );\r
                                        }\r
@@ -477,13 +492,15 @@ namespace DTXCreator.MIDIインポート
                                #region [ LP発生なら、LPレーンを表示する。 ]\r
                                for ( int i = 0; i < this.dgv割り当て一覧.Rows.Count; i++ )\r
                                {\r
-                                       if ( (string)this.dgv割り当て一覧.Rows[ i ].Cells[ "DTX_Lane" ].Value == "LP" &&\r
-                                               (int)this.dgv割り当て一覧.Rows[ i ].Cells[ "Notes" ].Value > 0 )\r
+                                       if ( (string)this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_DTX_Lane" ].Value == "LP" &&\r
+                                               (int)this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_Notes" ].Value > 0 )\r
                                        {\r
                                                this.formメインフォーム.mgr譜面管理者.tExpandLanes( Cレーン.ELaneType.LP );\r
                                        }\r
                                }\r
                                #endregion\r
+\r
+                               tMIDIインポート設定をファイルに保存する();\r
                        }\r
                }\r
                \r
@@ -492,20 +509,22 @@ namespace DTXCreator.MIDIインポート
                /// </summary>\r
         private void tMIDIチップをレーンに割り当てる()\r
         {\r
+                       if ( cMIDI == null ) return;\r
+\r
                        // MIDIイベントがひとつでもあるなら処理する\r
                        if ( cMIDI.lMIDIイベント.Count == 0 ) return;\r
 \r
                        #region [ 振り分け ]\r
                        foreach ( CMIDIイベント vMIDIイベント in cMIDI.lMIDIイベント )\r
                        {\r
-                               if (vMIDIイベント.nキー == (int)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells["MIDI_Key"].Value )\r
+                               if (vMIDIイベント.nキー == (int)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells[ "Assign_MIDI_Key" ].Value )\r
                                {\r
-                                       if ( (string)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells["DTX_Lane"].Value != "* Disuse *" )\r
+                                       if ( (string)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells[ "Assign_DTX_Lane" ].Value != "* Disuse *" )\r
                                        {\r
-                                               vMIDIイベント.nレーン番号 = this.formメインフォーム.mgr譜面管理者.nレーン名に対応するレーン番号を返す( (string)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells["DTX_Lane"].Value );\r
-                                               vMIDIイベント.strコメント = (string)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells["Comment"].Value;\r
-                                               vMIDIイベント.b裏チャンネル = (bool)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells["BackCH"].Value;\r
-                                               vMIDIイベント.b入力 = true;\r
+                                               vMIDIイベント.nレーン番号 = this.formメインフォーム.mgr譜面管理者.nレーン名に対応するレーン番号を返す( (string)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells[ "Assign_DTX_Lane" ].Value );\r
+                                               vMIDIイベント.strコメント = (string)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells[ "Assign_Comment" ].Value;\r
+                                               vMIDIイベント.b裏チャンネル = (bool)dgv割り当て一覧.Rows[127-vMIDIイベント.nキー].Cells[ "Assign_BackCH" ].Value;\r
+                                               vMIDIイベント.b入力 = (bool)cMIDI.dgvチャンネル一覧.Rows[vMIDIイベント.nチャンネル0to15].Cells[ "Channel_Load" ].Value;\r
                                        }\r
                                        else\r
                                        {\r
@@ -528,6 +547,9 @@ namespace DTXCreator.MIDIインポート
 \r
                        foreach ( CMIDIイベント vMIDIイベント in cMIDI.lMIDIイベント )\r
                        {\r
+                               // チャンネル一覧で選択されているものと、ノートのみリスト化\r
+                               if ( !vMIDIイベント.b入力 || vMIDIイベント.eイベントタイプ != CMIDIイベント.Eイベントタイプ.NoteOnOff ) continue;\r
+\r
                                // WAVリストで、同じ内容(キーとベロシティ)が無ければ挿入する\r
                                bool bMIDIWAV_AddFlag = true;\r
                                foreach ( CMIDIイベント vMIDIWAV in cMIDI.lMIDIWAV )\r
@@ -546,7 +568,6 @@ namespace DTXCreator.MIDIインポート
                        #endregion\r
 \r
                        t同時刻で同じレーンに配置予定のチップを数えて反映する();\r
-                       \r
         }\r
 \r
                private void t同時刻で同じレーンに配置予定のチップを数えて反映する()\r
@@ -556,12 +577,13 @@ namespace DTXCreator.MIDIインポート
                        \r
                        // 読み込むチャンネルだけチェックする\r
                        foreach ( CMIDIイベント vMIDIイベント in cMIDI.lMIDIイベント ){\r
-                               if ( (bool)dgvチャンネル一覧.Rows[vMIDIイベント.nチャンネル0to15].Cells["ChLoad"].Value ){\r
+                               // チャンネル一覧で選択されているものと、ノートのみ数える\r
+                               if ( !vMIDIイベント.b入力 || vMIDIイベント.eイベントタイプ != CMIDIイベント.Eイベントタイプ.NoteOnOff ) continue;\r
+\r
                                        string str = "" + vMIDIイベント.nレーン番号 + ":" + vMIDIイベント.n時間;\r
                                        if ( lMIDIイベント_重複.Contains( str ) ) cMIDI.n重複チップ数 ++;\r
                                        else lMIDIイベント_重複.Add( str );\r
                                }\r
-                       }\r
 \r
                        this.label重複チップ数.Text = resource.GetString("label重複チップ数.Text") + " : " + cMIDI.n重複チップ数;\r
                }\r
@@ -586,8 +608,8 @@ namespace DTXCreator.MIDIインポート
 \r
                        // 最終拍子イベント以降、曲最後までの小節について、この先のロジックで小節長を変更するために、ダミーで最後に拍子変更のイベントを入れる。\r
 \r
-                       int n最終分子 = 1;\r
-                       int n最終分母 = 1;\r
+                       int n最終分子 = 4;\r
+                       int n最終分母 = 4;\r
                        int n最終時間 = (int)cml[ cml.Count - 1 ].n時間;\r
 \r
                        cml.Reverse();\r
@@ -602,13 +624,11 @@ namespace DTXCreator.MIDIインポート
                        }\r
                        cml.Reverse();\r
 \r
-                       if ( n最終時間 >= 0 )\r
+                       //if ( n最終時間 >= 0 )\r
                        {\r
                                cml.Add( new CMIDIBARLen( (UInt32)n最終時間, n最終分子, n最終分母 ) );\r
                        }\r
-\r
-                       \r
-                       this.formメインフォーム.mgr譜面管理者.dic小節.Clear();\r
+               \r
                        foreach ( CMIDIイベント cm in cml )\r
                        {\r
                                if ( cm.eイベントタイプ == CMIDIイベント.Eイベントタイプ.BarLen )\r
@@ -659,7 +679,7 @@ namespace DTXCreator.MIDIインポート
                                        }\r
                                }\r
                        }\r
-               }\r
+                       }\r
 \r
                /// <summary>\r
                /// WAVリストを順番にソートする\r
@@ -694,5 +714,243 @@ namespace DTXCreator.MIDIインポート
                        }\r
                }\r
 \r
+               #region [ 設定ファイル関連 ]\r
+               //-----------------\r
+\r
+//             [Serializable]\r
+               [DataContract]\r
+               [KnownType( typeof( DTXC_MIDIConvSetting ) )]\r
+               public struct DTXC_MIDIConvSetting\r
+               {\r
+                       [DataMember]\r
+                       public DTXC_MIDIConvSetting_Assign[] Assign;\r
+                       [DataMember]\r
+                       public DTXC_MIDIConvSetting_Other Other;\r
+\r
+                       public DTXC_MIDIConvSetting(DTXC_MIDIConvSetting_Assign[] _Assign, DTXC_MIDIConvSetting_Other _Other)\r
+                       {\r
+                               Assign = _Assign;\r
+                               Other = _Other;\r
+                       }\r
+\r
+               }\r
+\r
+               [DataContract]\r
+               [KnownType( typeof( DTXC_MIDIConvSetting_Assign ) )]\r
+               public struct DTXC_MIDIConvSetting_Assign\r
+               {\r
+                       [DataMember]\r
+                       public int MIDI_Key;\r
+                       [DataMember]\r
+                       public string DTX_Lane;\r
+                       [DataMember]\r
+                       public bool BackCH;\r
+                       [DataMember]\r
+                       public string Comment;\r
+\r
+                       public DTXC_MIDIConvSetting_Assign(int _MIDI_Key, string _DTX_Lane, bool _BackCH, string _Comment)\r
+                       {\r
+                               MIDI_Key = _MIDI_Key;\r
+                               DTX_Lane = _DTX_Lane;\r
+                               BackCH   = _BackCH;\r
+                               Comment   = _Comment;\r
+                       }\r
+               }\r
+               \r
+               [DataContract]\r
+               [KnownType( typeof( DTXC_MIDIConvSetting_Other ) )]\r
+               public struct DTXC_MIDIConvSetting_Other\r
+               {\r
+                       [DataMember]\r
+                       public bool VelocityMax127;\r
+                       [DataMember]\r
+                       public bool VelocityCurveFix;\r
+                       [DataMember]\r
+                       public int DTXVOLUME;\r
+\r
+                       public DTXC_MIDIConvSetting_Other( bool _VelocityCurveFix, bool _VelocityMax127, int _DTXVOLUME )\r
+                       {\r
+                               VelocityCurveFix = _VelocityCurveFix;\r
+                               VelocityMax127   = _VelocityMax127;\r
+                               DTXVOLUME        = _DTXVOLUME;\r
+                       }\r
+               }\r
+\r
+               public void tMIDIインポート設定をファイルから読み込む()\r
+               {\r
+                       #region [ ファイル確認 ]\r
+                       // ファイルが無かったら新規で保存して読み込まない\r
+                       if ( !File.Exists( this.formメインフォーム.strMIDIインポート設定ファイル ) ) {\r
+                               this.formメインフォーム.strMIDIインポート設定ファイル = Directory.GetCurrentDirectory() + @"\" + "DTXCreatorSMFSettings.xml";\r
+                               tMIDIインポート設定をファイルに保存する();\r
+                               return;\r
+                       }\r
+                       #endregion\r
+                       \r
+                       #region [ xmlファイルから読込 ]\r
+                       DTXC_MIDIConvSetting mcs;\r
+\r
+                       using ( var stream = new FileStream( this.formメインフォーム.strMIDIインポート設定ファイル, FileMode.Open ) )\r
+                       {\r
+                               var serializer = new System.Xml.Serialization.XmlSerializer( typeof( DTXC_MIDIConvSetting ) );\r
+                               mcs = (DTXC_MIDIConvSetting) serializer.Deserialize( stream );\r
+                       }\r
+                       #endregion\r
+                       \r
+                       #region [ 割り当て一覧の反映 ]\r
+                       for ( int i = 0; i < 128; i++ )\r
+                       {\r
+                               this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_MIDI_Key" ].Value = mcs.Assign[ i ].MIDI_Key;\r
+                               this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_DTX_Lane" ].Value = mcs.Assign[ i ].DTX_Lane;\r
+                               this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_BackCH" ].Value   = mcs.Assign[ i ].BackCH;\r
+                               this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_Comment" ].Value  = mcs.Assign[ i ].Comment;\r
+                       }\r
+                       #endregion\r
+\r
+                       #region [ その他インポート設定の反映 ]\r
+                       checkBoxベロシティカーブ調整.Checked = mcs.Other.VelocityCurveFix;\r
+                       checkBoxベロシティ最大値127.Checked  = mcs.Other.VelocityMax127;\r
+                       numericUpDownVOLUME間隔.Value        = mcs.Other.DTXVOLUME;\r
+                       #endregion\r
+                       \r
+                       labelMIDIImportSettingsFile.Text = Path.GetFileName( this.formメインフォーム.strMIDIインポート設定ファイル );\r
+\r
+                       #region [ 割り当て一覧が更新された時の処理 ]\r
+            //-----------------\r
+                       for ( int i = 0 ; i < 128 ; i++ ) tMIDI割り当て一覧のレーン名の背景色を変更する( i );\r
+                       tMIDIチップをレーンに割り当てる();\r
+            //-----------------\r
+            #endregion\r
+               }\r
+       \r
+               public void tMIDIインポート設定をファイルに保存する()\r
+               {\r
+                       DTXC_MIDIConvSetting mcs = new DTXC_MIDIConvSetting();\r
+                       mcs.Assign = new DTXC_MIDIConvSetting_Assign[ 128 ];\r
+                       mcs.Other = new DTXC_MIDIConvSetting_Other();\r
+\r
+                       #region [ 割り当て一覧の格納 ]\r
+                       for (int i = 0; i < 128; i++)\r
+                       {\r
+                               mcs.Assign[ i ].MIDI_Key = (int)    this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_MIDI_Key" ].Value;\r
+                               mcs.Assign[ i ].DTX_Lane = (string) this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_DTX_Lane" ].Value;\r
+                               mcs.Assign[ i ].BackCH   = (bool)   this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_BackCH" ].Value;\r
+                               mcs.Assign[ i ].Comment  = (string) this.dgv割り当て一覧.Rows[ i ].Cells[ "Assign_Comment" ].Value;\r
+                       }\r
+                       #endregion\r
+\r
+                       #region [ その他インポート設定の格納 ]\r
+                       mcs.Other.VelocityCurveFix = checkBoxベロシティカーブ調整.Checked;\r
+                       mcs.Other.VelocityMax127   = checkBoxベロシティ最大値127.Checked;\r
+                       mcs.Other.DTXVOLUME        = (int)numericUpDownVOLUME間隔.Value;\r
+                       #endregion\r
+                       \r
+                       #region [ xmlファイルに保存 ]\r
+                       using ( var stream = new FileStream( this.formメインフォーム.strMIDIインポート設定ファイル, FileMode.Create ) )\r
+                       {\r
+                               var serializer = new System.Xml.Serialization.XmlSerializer( typeof( DTXC_MIDIConvSetting ) );\r
+                               serializer.Serialize( stream, mcs );\r
+                       }\r
+                       #endregion\r
+                       \r
+                       labelMIDIImportSettingsFile.Text = Path.GetFileName( this.formメインフォーム.strMIDIインポート設定ファイル );\r
+               }\r
+\r
+               private void tMIDIインポート設定ファイル選択ダイアログを開く()\r
+               {\r
+                       #region [ ファイル選択 ]\r
+            //-----------------\r
+            OpenFileDialog dialog = new OpenFileDialog();\r
+                       dialog.Title = Resources.strMIDIインポート設定ファイル選択ダイアログのタイトル;\r
+            dialog.Filter = Resources.strMIDIインポート設定ファイル選択ダイアログのフィルタ;\r
+            dialog.FilterIndex = 1;\r
+            dialog.InitialDirectory =\r
+                               ( this.formメインフォーム.strMIDIインポート設定ファイル != "" )\r
+                               ? Path.GetDirectoryName( this.formメインフォーム.strMIDIインポート設定ファイル ) + @"\"\r
+                               : Directory.GetCurrentDirectory();\r
+            DialogResult result = dialog.ShowDialog();\r
+\r
+            if (result != DialogResult.OK) return;\r
+\r
+                       string strファイル名 = dialog.FileName;\r
+            //-----------------\r
+            #endregion\r
+\r
+                       #region [ ファイル確認 ]\r
+            //-----------------\r
+            if ( !File.Exists( strファイル名 ) )\r
+            {\r
+                MessageBox.Show(\r
+                    Resources.strMIDIインポート設定ファイルではないMSG,\r
+                    Resources.strMIDIインポートエラーのタイトル,\r
+                    MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);\r
+                return;\r
+            }\r
+            //-----------------\r
+            #endregion\r
+\r
+            #region [ 拡張子確認 ]\r
+            //-----------------\r
+            string str拡張子 = Path.GetExtension(strファイル名);\r
+\r
+            if ( !str拡張子.Equals(".xml", StringComparison.OrdinalIgnoreCase ) )\r
+            {\r
+                MessageBox.Show(\r
+                                       Resources.strMIDIインポート設定ファイルではないMSG,\r
+                                       Resources.strMIDIインポートエラーのタイトル,\r
+                                       MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1 );\r
+                return;\r
+            }\r
+            //-----------------\r
+            #endregion\r
+\r
+                       #region [ 各設定 ]\r
+            //-----------------\r
+                       this.formメインフォーム.strMIDIインポート設定ファイル = strファイル名;\r
+            //-----------------\r
+            #endregion\r
+\r
+                       tMIDIインポート設定をファイルから読み込む();\r
+               }\r
+\r
+               private void tMIDIインポート設定ファイル保存ダイアログを開く()\r
+               {\r
+                       #region [ ファイル選択 ]\r
+            //-----------------\r
+                       SaveFileDialog dialog = new SaveFileDialog();\r
+                       dialog.Title = Resources.strMIDIインポート設定ファイル保存ダイアログのタイトル;\r
+                       dialog.Filter = Resources.strMIDIインポート設定ファイル選択ダイアログのフィルタ;\r
+                       dialog.FilterIndex = 1;\r
+                       dialog.InitialDirectory = \r
+                               ( this.formメインフォーム.strMIDIインポート設定ファイル != "" )\r
+                               ? Path.GetDirectoryName( this.formメインフォーム.strMIDIインポート設定ファイル ) + @"\"\r
+                               : Directory.GetCurrentDirectory();\r
+                       DialogResult result = dialog.ShowDialog();\r
+\r
+            if (result != DialogResult.OK) return;\r
+\r
+                       string strファイル名 = dialog.FileName;\r
+            //-----------------\r
+            #endregion\r
+\r
+                       #region [ 拡張子変更 ]\r
+            //-----------------\r
+                       if ( Path.GetExtension( strファイル名 ).Length == 0 )\r
+                               strファイル名 = Path.ChangeExtension( strファイル名, ".xml" );\r
+            //-----------------\r
+            #endregion\r
+                       \r
+                       #region [ 各設定 ]\r
+            //-----------------\r
+                       this.formメインフォーム.strMIDIインポート設定ファイル = strファイル名;\r
+            //-----------------\r
+            #endregion\r
+\r
+                       tMIDIインポート設定をファイルに保存する();\r
+               }\r
+\r
+               //-----------------\r
+               #endregion\r
+\r
        }\r
 }\r