OSDN Git Service

Merge branch 'feature/37178_プロジェクトとソリューションファイルの英語化' into develop
[dtxmania/dtxmania.git] / DTXCreatorプロジェクト / コード / 07.MIDIインポート / CMIDI.cs
diff --git a/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDI.cs b/DTXCreatorプロジェクト/コード/07.MIDIインポート/CMIDI.cs
deleted file mode 100644 (file)
index 049abc1..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-using System;\r
-using System.Collections.Generic;\r
-using System.Linq;\r
-using System.Text;\r
-using System.Threading.Tasks;\r
-using System.Windows.Forms;\r
-using System.IO;\r
-using System.Drawing;\r
-using System.Diagnostics;\r
-using DTXCreator.WAV_BMP_AVI;\r
-\r
-namespace DTXCreator.MIDIインポート\r
-{\r
-    internal class CMIDI\r
-    {\r
-        public string strファイル名;\r
-        public byte[] byMIDIバイナリ;\r
-        public bool bMIDIファイル;\r
-        public List<CMIDIトラック> lMIDIトラック;\r
-        public List<CMIDIイベント> lMIDIイベント;\r
-        public float f先頭BPM;\r
-        public string strTimeSignature;\r
-        public int[] nドラムチャンネルのキー毎のノート数;\r
-               public int [] nチャンネル0to15毎のノート数;\r
-        public int n分解能;\r
-        public Cメインフォーム formメインフォーム;\r
-               public List<CMIDIイベント> lMIDIWAV;\r
-               public int n重複チップ数;\r
-               public DataGridView dgvチャンネル一覧;\r
-               public bool[] bドラムチャンネルと思われる;\r
-\r
-        public int dトラック数\r
-        {\r
-            get\r
-            {\r
-                return lMIDIトラック.Count;\r
-            }\r
-        }\r
-\r
-        public CMIDI( string _strファイル名 )\r
-        {\r
-            this.strファイル名 = _strファイル名;\r
-            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.lMIDIイベント = new List<CMIDIイベント>();\r
-            this.nドラムチャンネルのキー毎のノート数 = new int[256];\r
-                       this.lMIDIWAV = new List<CMIDIイベント>();\r
-                       this.f先頭BPM = 0.0f;\r
-                       this.n重複チップ数 = 0;\r
-                       this.nチャンネル0to15毎のノート数 = new int[17];\r
-                       this.dgvチャンネル一覧 = null;\r
-                       this.bドラムチャンネルと思われる = new bool[ 16 * 4 ];\r
-                       this.bドラムチャンネルと思われる[ 10 - 1 ] = true;\r
-               }\r
-\r
-        // 解析処理 全バイナリを見てMTrkだけ抜き取る\r
-        public void tMIDIを解析する()\r
-        {\r
-            // MThdが存在しなければ解析処理を行わない\r
-            if ( !bMIDIファイル ) return;\r
-                       this.lMIDIWAV = new List<CMIDIイベント>();\r
-\r
-                       this.n分解能 = nBin2Int( this.byMIDIバイナリ, 12, 2 );\r
-\r
-            for ( int i = 0; i<this.byMIDIバイナリ.Length; i++ )\r
-            {\r
-                // MTrkがあればトラックを追加する\r
-                if ( strBin2BinStr(this.byMIDIバイナリ, i, 4) == "4D 54 72 6B" )\r
-                {\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
-                }\r
-            }\r
-        }\r
-\r
-               // tMIDIチップをレーンに割り当てる()をCMIDIインポートダイアログに移動\r
-\r
-\r
-        // バイナリの指定のバイト数分を、"FF FF FF..."の形で出力する\r
-        static public string strBin2BinStr( byte[] byバイナリ, int d開始バイト, int dバイト数 )\r
-        {\r
-            string str文字列 = "";\r
-\r
-            if ( dバイト数 <= 0 ) return "";\r
-\r
-            for (int i = d開始バイト; i < d開始バイト + dバイト数; i++)\r
-            {\r
-                if ( i >= byバイナリ.Length ) break;\r
-                str文字列 += byバイナリ[i].ToString("X2") + " ";\r
-            }\r
-\r
-            return str文字列.Substring( 0, str文字列.Length-1 );\r
-        }\r
-        \r
-        // バイナリの指定のバイト数分を、文字列に変換して出力する\r
-        static public string strBin2Str( byte[] byバイナリ, int d開始バイト, int dバイト数 )\r
-        {\r
-            string str文字列 = "";\r
-\r
-            if ( dバイト数 <= 0 ) return "";\r
-\r
-                       byte[] by出力 = new byte[ dバイト数 + 1 ];\r
-\r
-            for (int i = d開始バイト; i < d開始バイト + dバイト数; i++)\r
-            {\r
-                if ( i >= byバイナリ.Length ) break;\r
-                by出力[i-d開始バイト] = byバイナリ[i];\r
-            }\r
-\r
-                       if ( by出力[ 0 ] == 0 ) str文字列 = "";\r
-\r
-                       System.Text.Encoding enc = GetCode( by出力 );                 //System.Text.Encoding.Default; //GetEncoding( "shift_jis" );\r
-                       if ( enc == null )\r
-                       {\r
-                               enc = System.Text.Encoding.Unicode;\r
-                       }\r
-                       str文字列 = enc.GetString( by出力 );\r
-\r
-            return str文字列.Trim('\0');\r
-        }\r
-        \r
-        // バイナリの指定のバイト数分を、数値に変換して出力する\r
-        static public int nBin2Int( byte[] byバイナリ, int d開始バイト, int dバイト数 )\r
-        {\r
-            int d数値 = 0;\r
-\r
-            if ( dバイト数 <= 0 ) return 0;\r
-\r
-            for (int i = d開始バイト; i < d開始バイト + dバイト数; i++)\r
-            {\r
-                if ( i >= byバイナリ.Length ) break;\r
-                d数値 += byバイナリ[i] * (int)Math.Pow( 256, dバイト数 - ( i - d開始バイト ) - 1 );\r
-            }\r
-\r
-            return d数値;\r
-        }\r
-\r
-               /// <summary>\r
-               /// 文字コードを判別する\r
-               /// </summary>\r
-               /// <remarks>\r
-               /// http://dobon.net/vb/dotnet/string/detectcode.html を少し修正したもの。\r
-               /// Jcode.pmのgetcodeメソッドを移植したものです。\r
-               /// Jcode.pm(http://openlab.ring.gr.jp/Jcode/index-j.html)\r
-               /// Jcode.pmのCopyright: Copyright 1999-2005 Dan Kogai\r
-               /// </remarks>\r
-               /// <param name="bytes">文字コードを調べるデータ</param>\r
-               /// <returns>適当と思われるEncodingオブジェクト。\r
-               /// 判断できなかった時はnull。</returns>\r
-               public static System.Text.Encoding GetCode( byte[] bytes )\r
-               {\r
-                       const byte bEscape = 0x1B;\r
-                       const byte bAt = 0x40;\r
-                       const byte bDollar = 0x24;\r
-                       const byte bAnd = 0x26;\r
-                       const byte bOpen = 0x28;    //'('\r
-                       const byte bB = 0x42;\r
-                       const byte bD = 0x44;\r
-                       const byte bJ = 0x4A;\r
-                       const byte bI = 0x49;\r
-\r
-                       int len = bytes.Length;\r
-                       if (bytes[ len - 1 ] == 0x00 )\r
-                       {\r
-                               --len;\r
-                       }\r
-                       byte b1, b2, b3, b4;\r
-\r
-                       bool ascii = true;\r
-                       for ( int i = 0; i < len; i++ )\r
-                       {\r
-                               b1 = bytes[ i ];\r
-                               if ( !( b1 >= 0x20 && b1 <= 0x7E ) )\r
-                               {\r
-                                       ascii = false;\r
-                                       break;\r
-                               }\r
-                       }\r
-                       if ( ascii )\r
-                       {\r
-                               return System.Text.Encoding.ASCII;\r
-                       }\r
-\r
-                       //Encode::is_utf8 は無視\r
-\r
-                       bool isBinary = false;\r
-                       for ( int i = 0; i < len; i++ )\r
-                       {\r
-                               b1 = bytes[ i ];\r
-                               if ( b1 <= 0x06 || b1 == 0x7F || b1 == 0xFF )\r
-                               {\r
-                                       //'binary'\r
-                                       isBinary = true;\r
-                                       if ( b1 == 0x00 && i < len - 1 && bytes[ i + 1 ] <= 0x7F )\r
-                                       {\r
-                                               //smells like raw unicode\r
-                                               return System.Text.Encoding.Unicode;\r
-                                       }\r
-                               }\r
-                       }\r
-                       if ( isBinary )\r
-                       {\r
-                               return null;\r
-                       }\r
-\r
-                       //not Japanese\r
-                       bool notJapanese = true;\r
-                       for ( int i = 0; i < len; i++ )\r
-                       {\r
-                               b1 = bytes[ i ];\r
-                               if ( b1 == bEscape || 0x80 <= b1 )\r
-                               {\r
-                                       notJapanese = false;\r
-                                       break;\r
-                               }\r
-                       }\r
-                       if ( notJapanese )\r
-                       {\r
-                               return System.Text.Encoding.ASCII;\r
-                       }\r
-\r
-                       for ( int i = 0; i < len - 2; i++ )\r
-                       {\r
-                               b1 = bytes[ i ];\r
-                               b2 = bytes[ i + 1 ];\r
-                               b3 = bytes[ i + 2 ];\r
-\r
-                               if ( b1 == bEscape )\r
-                               {\r
-                                       if ( b2 == bDollar && b3 == bAt )\r
-                                       {\r
-                                               //JIS_0208 1978\r
-                                               //JIS\r
-                                               return System.Text.Encoding.GetEncoding( 50220 );\r
-                                       }\r
-                                       else if ( b2 == bDollar && b3 == bB )\r
-                                       {\r
-                                               //JIS_0208 1983\r
-                                               //JIS\r
-                                               return System.Text.Encoding.GetEncoding( 50220 );\r
-                                       }\r
-                                       else if ( b2 == bOpen && ( b3 == bB || b3 == bJ ) )\r
-                                       {\r
-                                               //JIS_ASC\r
-                                               //JIS\r
-                                               return System.Text.Encoding.GetEncoding( 50220 );\r
-                                       }\r
-                                       else if ( b2 == bOpen && b3 == bI )\r
-                                       {\r
-                                               //JIS_KANA\r
-                                               //JIS\r
-                                               return System.Text.Encoding.GetEncoding( 50220 );\r
-                                       }\r
-                                       if ( i < len - 3 )\r
-                                       {\r
-                                               b4 = bytes[ i + 3 ];\r
-                                               if ( b2 == bDollar && b3 == bOpen && b4 == bD )\r
-                                               {\r
-                                                       //JIS_0212\r
-                                                       //JIS\r
-                                                       return System.Text.Encoding.GetEncoding( 50220 );\r
-                                               }\r
-                                               if ( i < len - 5 &&\r
-                                                       b2 == bAnd && b3 == bAt && b4 == bEscape &&\r
-                                                       bytes[ i + 4 ] == bDollar && bytes[ i + 5 ] == bB )\r
-                                               {\r
-                                                       //JIS_0208 1990\r
-                                                       //JIS\r
-                                                       return System.Text.Encoding.GetEncoding( 50220 );\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       //should be euc|sjis|utf8\r
-                       //use of (?:) by Hiroki Ohzaki <ohzaki@iod.ricoh.co.jp>\r
-                       int sjis = 0;\r
-                       int euc = 0;\r
-                       int utf8 = 0;\r
-                       for ( int i = 0; i < len - 1; i++ )\r
-                       {\r
-                               b1 = bytes[ i ];\r
-                               b2 = bytes[ i + 1 ];\r
-                               if ( ( ( 0x81 <= b1 && b1 <= 0x9F ) || ( 0xE0 <= b1 && b1 <= 0xFC ) ) &&\r
-                                       ( ( 0x40 <= b2 && b2 <= 0x7E ) || ( 0x80 <= b2 && b2 <= 0xFC ) ) )\r
-                               {\r
-                                       //SJIS_C\r
-                                       sjis += 2;\r
-                                       i++;\r
-                               }\r
-                       }\r
-                       for ( int i = 0; i < len - 1; i++ )\r
-                       {\r
-                               b1 = bytes[ i ];\r
-                               b2 = bytes[ i + 1 ];\r
-                               if ( ( ( 0xA1 <= b1 && b1 <= 0xFE ) && ( 0xA1 <= b2 && b2 <= 0xFE ) ) ||\r
-                                       ( b1 == 0x8E && ( 0xA1 <= b2 && b2 <= 0xDF ) ) )\r
-                               {\r
-                                       //EUC_C\r
-                                       //EUC_KANA\r
-                                       euc += 2;\r
-                                       i++;\r
-                               }\r
-                               else if ( i < len - 2 )\r
-                               {\r
-                                       b3 = bytes[ i + 2 ];\r
-                                       if ( b1 == 0x8F && ( 0xA1 <= b2 && b2 <= 0xFE ) &&\r
-                                               ( 0xA1 <= b3 && b3 <= 0xFE ) )\r
-                                       {\r
-                                               //EUC_0212\r
-                                               euc += 3;\r
-                                               i += 2;\r
-                                       }\r
-                               }\r
-                       }\r
-                       for ( int i = 0; i < len - 1; i++ )\r
-                       {\r
-                               b1 = bytes[ i ];\r
-                               b2 = bytes[ i + 1 ];\r
-                               if ( ( 0xC0 <= b1 && b1 <= 0xDF ) && ( 0x80 <= b2 && b2 <= 0xBF ) )\r
-                               {\r
-                                       //UTF8\r
-                                       utf8 += 2;\r
-                                       i++;\r
-                               }\r
-                               else if ( i < len - 2 )\r
-                               {\r
-                                       b3 = bytes[ i + 2 ];\r
-                                       if ( ( 0xE0 <= b1 && b1 <= 0xEF ) && ( 0x80 <= b2 && b2 <= 0xBF ) &&\r
-                                               ( 0x80 <= b3 && b3 <= 0xBF ) )\r
-                                       {\r
-                                               //UTF8\r
-                                               utf8 += 3;\r
-                                               i += 2;\r
-                                       }\r
-                               }\r
-                       }\r
-                       //M. Takahashi's suggestion\r
-                       //utf8 += utf8 / 2;\r
-\r
-                       //Debug.WriteLine(\r
-                       //      string.Format( "sjis = {0}, euc = {1}, utf8 = {2}", sjis, euc, utf8 ) );\r
-                       if ( euc > sjis && euc > utf8 )\r
-                       {\r
-                               //EUC\r
-                               return System.Text.Encoding.GetEncoding( 51932 );\r
-                       }\r
-                       else if ( sjis > euc && sjis > utf8 )\r
-                       {\r
-                               //SJIS\r
-                               return System.Text.Encoding.GetEncoding( 932 );\r
-                       }\r
-                       else if ( utf8 > euc && utf8 > sjis )\r
-                       {\r
-                               //UTF8\r
-                               return System.Text.Encoding.UTF8;\r
-                       }\r
-\r
-                       return null;\r
-               }\r
-       }\r
-\r
-}\r