OSDN Git Service

#39698 099fで起動時に例外が出る問題を修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CDTXMania.cs
index eb02329..be07237 100644 (file)
@@ -20,7 +20,7 @@ namespace DTXMania
        {\r
                // プロパティ\r
                #region [ properties ]\r
-               public static readonly string VERSION = "098(131101)";\r
+               public static readonly string VERSION = "099g(191022)";\r
                public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";\r
                public static readonly string D3DXDLL = "d3dx9_43.dll";         // June 2010\r
         //public static readonly string D3DXDLL = "d3dx9_42.dll";      // February 2010\r
@@ -407,7 +407,13 @@ namespace DTXMania
                protected override void Initialize()\r
                {\r
 //                     new GCBeep();\r
-                       if( this.listトップレベルActivities != null )\r
+                       //sw.Start();\r
+                       //swlist1 = new List<int>( 8192 );\r
+                       //swlist2 = new List<int>( 8192 );\r
+                       //swlist3 = new List<int>( 8192 );\r
+                       //swlist4 = new List<int>( 8192 );\r
+                       //swlist5 = new List<int>( 8192 );\r
+                       if ( this.listトップレベルActivities != null )\r
                        {\r
                                foreach( CActivity activity in this.listトップレベルActivities )\r
                                        activity.OnManagedリソースの作成();\r
@@ -504,6 +510,10 @@ namespace DTXMania
                }\r
                protected override void Draw( GameTime gameTime )\r
                {\r
+                       if (Sound管理 == null)\r
+                       {\r
+                               return;\r
+                       }\r
                        Sound管理.t再生中の処理をする();\r
 \r
                        if( Timer != null )\r
@@ -1119,6 +1129,17 @@ for (int i = 0; i < 3; i++) {
                                        case CStage.Eステージ.演奏:\r
                                                #region [ *** ]\r
                                                //-----------------------------\r
+                                               //long n1 = FDK.CSound管理.rc演奏用タイマ.nシステム時刻ms;\r
+                                               //long n2 = FDK.CSound管理.SoundDevice.n経過時間ms;\r
+                                               //long n3 = FDK.CSound管理.SoundDevice.tmシステムタイマ.nシステム時刻ms;\r
+                                               //long n4 = FDK.CSound管理.rc演奏用タイマ.n現在時刻;\r
+                                               //long n5 = FDK.CSound管理.SoundDevice.n経過時間を更新したシステム時刻ms;\r
+\r
+                                               //swlist1.Add( Convert.ToInt32(n1) );\r
+                                               //swlist2.Add( Convert.ToInt32(n2) );\r
+                                               //swlist3.Add( Convert.ToInt32( n3 ) );\r
+                                               //swlist4.Add( Convert.ToInt32( n4 ) );\r
+                                               //swlist5.Add( Convert.ToInt32( n5 ) );\r
 \r
                                                #region [ DTXVモード中にDTXCreatorから指示を受けた場合の処理 ]\r
                                                if ( DTXVmode.Enabled && DTXVmode.Refreshed )\r
@@ -1141,6 +1162,37 @@ for (int i = 0; i < 3; i++) {
                                                                        this.previewSound.Dispose();\r
                                                                        this.previewSound = null;\r
                                                                }\r
+                                                               //{\r
+                                                               //    int lastd = 0;\r
+                                                               //    int f = 0;\r
+                                                               //    for ( int i = 0; i < swlist1.Count; i++ )\r
+                                                               //    {\r
+                                                               //        int d1 = swlist1[ i ];\r
+                                                               //        int d2 = swlist2[ i ];\r
+                                                               //        int d3 = swlist3[ i ];\r
+                                                               //        int d4 = swlist4[ i ];\r
+                                                               //        int d5 = swlist5[ i ];\r
+\r
+                                                               //        int dif = d1 - lastd;\r
+                                                               //        string s = "";\r
+                                                               //        if ( 16 <= dif && dif <= 17 )\r
+                                                               //        {\r
+                                                               //        }\r
+                                                               //        else\r
+                                                               //        {\r
+                                                               //            s = "★";\r
+                                                               //        }\r
+                                                               //        Trace.TraceInformation( "frame {0:D4}: {1:D3} ( {2:D3}, {3:D3} - {7:D3}, {4:D3} ) {5}, n現在時刻={6}", f, dif, d1, d2, d3, s, d4, d5 );\r
+                                                               //        lastd = d1;\r
+                                                               //        f++;\r
+                                                               //    }\r
+                                                               //    swlist1.Clear();\r
+                                                               //    swlist2.Clear();\r
+                                                               //    swlist3.Clear();\r
+                                                               //    swlist4.Clear();\r
+                                                               //    swlist5.Clear();\r
+\r
+                                                               //}\r
                                                        }\r
                                                        else if ( DTXVmode.Command == CDTXVmode.ECommand.Play )\r
                                                        {\r
@@ -1154,6 +1206,16 @@ for (int i = 0; i < 3; i++) {
                                                                        {\r
                                                                                CDTXMania.stage演奏ギター画面.t再読込();\r
                                                                        }\r
+\r
+                                                                       CDTXMania.ConfigIni.bDrums有効 = !DTXVmode.GRmode;\r
+                                                                       CDTXMania.ConfigIni.bGuitar有効 = true;\r
+                                                                       CDTXMania.ConfigIni.bTimeStretch = DTXVmode.TimeStretch;\r
+                                                                       CSound管理.bIsTimeStretch = DTXVmode.TimeStretch;\r
+                                                                       if ( CDTXMania.ConfigIni.b垂直帰線待ちを行う != DTXVmode.VSyncWait )\r
+                                                                       {\r
+                                                                               CDTXMania.ConfigIni.b垂直帰線待ちを行う = DTXVmode.VSyncWait;\r
+                                                                               CDTXMania.app.b次のタイミングで垂直帰線同期切り替えを行う = true;\r
+                                                                       }\r
                                                                }\r
                                                                else\r
                                                                {\r
@@ -1197,6 +1259,33 @@ for (int i = 0; i < 3; i++) {
                                                                //-----------------------------\r
                                                                scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Play canceled" );\r
 \r
+                                                               //int lastd = 0;\r
+                                                               //int f = 0;\r
+                                                               //for (int i = 0; i < swlist1.Count; i++)\r
+                                                               //{\r
+                                                               //    int d1 = swlist1[ i ];\r
+                                                               //    int d2 = swlist2[ i ];\r
+                                                               //    int d3 = swlist3[ i ];\r
+                                                               //    int d4 = swlist4[ i ];\r
+\r
+                                                               //    int dif = d1 - lastd;\r
+                                                               //    string s = "";\r
+                                                               //    if ( 16 <= dif && dif <= 17 )\r
+                                                               //    {\r
+                                                               //    }\r
+                                                               //    else\r
+                                                               //    {\r
+                                                               //        s = "★";\r
+                                                               //    }\r
+                                                               //    Trace.TraceInformation( "frame {0:D4}: {1:D3} ( {2:D3}, {3:D3}, {4:D3} ) {5}, n現在時刻={6}", f, dif, d1, d2, d3, s, d4 );\r
+                                                               //    lastd = d1;\r
+                                                               //    f++;\r
+                                                               //}\r
+                                                               //swlist1.Clear();\r
+                                                               //swlist2.Clear();\r
+                                                               //swlist3.Clear();\r
+                                                               //swlist4.Clear();\r
+               \r
                                                                #region [ プラグイン On演奏キャンセル() の呼び出し ]\r
                                                                //---------------------\r
                                                                foreach( STPlugin pg in this.listプラグイン )\r
@@ -1481,6 +1570,12 @@ for (int i = 0; i < 3; i++) {
 #if !GPUFlushAfterPresent\r
                        actFlushGPU.On進行描画();           // Flush GPU    // EndScene()~Present()間 (つまりVSync前) でFlush実行\r
 #endif\r
+                       if ( Sound管理.GetCurrentSoundDeviceType() != "DirectSound" )\r
+                       {\r
+                               Sound管理.t再生中の処理をする();     // サウンドバッファの更新; 画面描画と同期させることで、スクロールをスムーズにする\r
+                       }\r
+\r
+\r
                        #region [ 全画面・ウインドウ切り替え ]\r
                        if ( this.b次のタイミングで全画面・ウィンドウ切り替えを行う )\r
                        {\r
@@ -1630,6 +1725,7 @@ for (int i = 0; i < 3; i++) {
 // BEGIN #23629 2010.11.13 from: デバッグ時は Application.ExecutablePath が ($SolutionDir)/bin/x86/Debug/ などになり System/ の読み込みに失敗するので、カレントディレクトリを採用する。(プロジェクトのプロパティ→デバッグ→作業ディレクトリが有効になる)\r
 #if DEBUG\r
                        strEXEのあるフォルダ = Environment.CurrentDirectory + @"\";\r
+                       //strEXEのあるフォルダ = Path.GetDirectoryName( Environment.GetCommandLineArgs()[ 0 ] ) + @"\";\r
 #else\r
                        strEXEのあるフォルダ = Path.GetDirectoryName( Application.ExecutablePath ) + @"\";       // #23629 2010.11.9 yyagi: set correct pathname where DTXManiaGR.exe is.\r
 #endif\r
@@ -1664,7 +1760,7 @@ for (int i = 0; i < 3; i++) {
                        {\r
                                try\r
                                {\r
-                                       Trace.Listeners.Add( new CTraceLogListener( new StreamWriter( "DTXManiaLog.txt", false, Encoding.GetEncoding( "Shift_JIS" ) ) ) );\r
+                                       Trace.Listeners.Add( new CTraceLogListener( new StreamWriter( System.IO.Path.Combine( strEXEのあるフォルダ, "DTXManiaLog.txt" ), false, Encoding.GetEncoding( "Shift_JIS" ) ) ) );\r
                                }\r
                                catch ( System.UnauthorizedAccessException )                    // #24481 2011.2.20 yyagi\r
                                {\r
@@ -1744,6 +1840,11 @@ for (int i = 0; i < 3; i++) {
                                                        ConfigIni.nASIODevice = DTXVmode.nASIOdevice;\r
                                                        break;\r
                                        }\r
+\r
+                                       CDTXMania.ConfigIni.b垂直帰線待ちを行う = DTXVmode.VSyncWait;\r
+                                       CDTXMania.ConfigIni.bTimeStretch = DTXVmode.TimeStretch;\r
+                                       CDTXMania.ConfigIni.bDrums有効 = !DTXVmode.GRmode;\r
+                                       CDTXMania.ConfigIni.bGuitar有効 = true;\r
                                }\r
                                else                                                                                                            // 通常のコンパクトモード\r
                                {\r
@@ -1756,7 +1857,14 @@ for (int i = 0; i < 3; i++) {
 #if DEBUG\r
                                        Environment.Exit( -1 );\r
 #else\r
-                                       throw new FileNotFoundException( "コンパクトモードで指定されたファイルが見つかりません。DTXManiaを終了します。", strコンパクトモードファイル );\r
+                                       if ( strコンパクトモードファイル == "" )    // DTXMania未起動状態で、DTXCで再生停止ボタンを押した場合は、何もせず終了\r
+                                       {\r
+                                               Environment.Exit( -1 );\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               throw new FileNotFoundException( "コンパクトモードで指定されたファイルが見つかりません。DTXManiaを終了します。", strコンパクトモードファイル );\r
+                                       }\r
 #endif\r
                                }\r
                                if ( DTXVmode.Enabled )\r
@@ -1931,7 +2039,8 @@ for (int i = 0; i < 3; i++) {
                        Trace.Indent();\r
                        try\r
                        {\r
-                               Input管理 = new CInput管理( base.Window.Handle );\r
+                               bool bUseMIDIIn = !DTXVmode.Enabled;\r
+                               Input管理 = new CInput管理( base.Window.Handle, bUseMIDIIn );\r
                                foreach( IInputDevice device in Input管理.list入力デバイス )\r
                                {\r
                                        if( ( device.e入力デバイス種別 == E入力デバイス種別.Joystick ) && !ConfigIni.dicJoystick.ContainsValue( device.GUID ) )\r
@@ -1998,7 +2107,7 @@ for (int i = 0; i < 3; i++) {
                        Trace.TraceInformation( "サウンドデバイスの初期化を行います。" );\r
                        Trace.Indent();\r
                        try\r
-                       {                               \r
+                       {\r
                                ESoundDeviceType soundDeviceType;\r
                                switch ( CDTXMania.ConfigIni.nSoundDeviceType )\r
                                {\r
@@ -2017,17 +2126,20 @@ for (int i = 0; i < 3; i++) {
                                }\r
                                Sound管理 = new CSound管理( base.Window.Handle,\r
                                                                                        soundDeviceType,\r
-                                       // CDTXMania.ConfigIni.nWASAPIBufferSizeMs,\r
-                                                                                       0,\r
+                                                                                       CDTXMania.ConfigIni.nWASAPIBufferSizeMs,\r
+                                                                                       // 0,\r
                                        // CDTXMania.ConfigIni.nASIOBufferSizeMs,\r
                                                                                        0,\r
-                                                                                       CDTXMania.ConfigIni.nASIODevice\r
+                                                                                       CDTXMania.ConfigIni.nASIODevice,\r
+                                                                                       CDTXMania.ConfigIni.bUseOSTimer\r
                                );\r
                                //Sound管理 = FDK.CSound管理.Instance;\r
                                //Sound管理.t初期化( soundDeviceType, 0, 0, CDTXMania.ConfigIni.nASIODevice, base.Window.Handle );\r
        \r
                                ShowWindowTitleWithSoundType();\r
                                FDK.CSound管理.bIsTimeStretch = CDTXMania.ConfigIni.bTimeStretch;\r
+                               Sound管理.nMasterVolume = CDTXMania.ConfigIni.nMasterVolume;\r
+                               //FDK.CSound管理.bIsMP3DecodeByWindowsCodec = CDTXMania.ConfigIni.bNoMP3Streaming;\r
                                Trace.TraceInformation( "サウンドデバイスの初期化を完了しました。" );\r
                        }\r
                        catch (Exception e)\r
@@ -2591,6 +2703,10 @@ for (int i = 0; i < 3; i++) {
                        string[] strDLLs = System.IO.Directory.GetFiles( strプラグインフォルダパス, "*.dll" );\r
                        foreach( string dllName in strDLLs )\r
                        {\r
+                               if (Path.GetExtension(dllName).ToLower() != ".dll")\r
+                               {\r
+                                       continue;\r
+                               }\r
                                try\r
                                {\r
                                        // (1-1) dll をアセンブリとして読み込む。\r
@@ -2709,6 +2825,10 @@ for (int i = 0; i < 3; i++) {
                //}\r
        \r
                //-----------------\r
+\r
+               //Stopwatch sw = new Stopwatch();\r
+               //List<int> swlist1, swlist2, swlist3, swlist4, swlist5;\r
+\r
                #endregion\r
        }\r
 }\r