OSDN Git Service

#24820 アプリの再起動無しに、WASAPI/ASIO/DirectSoundの設定を切り替えられるようにした。CONFIGURATION画面からの脱出時に切り替える。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Tue, 22 Jan 2013 16:37:37 +0000 (16:37 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Tue, 22 Jan 2013 16:37:37 +0000 (16:37 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/branches/130101(DTXMania%20with%20%2324820SoundTimerVer)@505 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs
FDK17プロジェクト/コード/03.サウンド/CSound.cs
FDK17プロジェクト/コード/03.サウンド/CSoundDeviceASIO.cs
FDK17プロジェクト/コード/03.サウンド/CSoundDeviceDirectSound.cs
FDK17プロジェクト/コード/03.サウンド/CSoundDeviceWASAPI.cs
実行時フォルダ/DTXManiaGR.exe
実行時フォルダ/FDK.dll

index 95cd73e..57b764f 100644 (file)
@@ -204,8 +204,8 @@ namespace DTXMania
                                "遅延の少ない演奏を楽しむことが\n" +\r
                                "できます。\n" +\r
                                "\n" +\r
-                               "※ 設定はアプリ再起動後に有効に\n" +\r
-                               " なります。",\r
+                               "※ 設定はCONFIGURATION画面の\n" +\r
+                               " 終了時に有効になります。",\r
                                "Sound output type:\n" +\r
                                "You can choose WASAPI, ASIO or\n" +\r
                                "DShow(DirectShow).\n" +\r
@@ -215,7 +215,7 @@ namespace DTXMania
                                "You should use WASAPI or ASIO\n" +\r
                                "to decrease the sound lag.\n" +\r
                                "\n" +\r
-                               "Note: Restart DTXMania to make\n" +\r
+                               "Note: Exit CONFIGURATION to make\n" +\r
                                "     the setting take effect.",\r
                                new string[] { "DShow", "ASIO", "WASAPI" });\r
                        this.list項目リスト.Add(this.iSystemSoundType);\r
@@ -228,7 +228,9 @@ namespace DTXMania
                                "サイズを自動設定します。\n" +\r
                                "値を小さくするほど発音ラグが\n" +\r
                                "減少しますが、音割れや異常動作を\n" +\r
-                               "引き起こす場合があります。\n",\r
+                               "引き起こす場合があります。\n" +\r
+                               "※ 設定はCONFIGURATION画面の\n" +\r
+                               " 終了時に有効になります。",\r
                                "Sound buffer size for WASAPI:\n" +\r
                                "You can set from 0 to 99999ms.\n" +\r
                                "Set 0 to use a default sysytem\n" +\r
@@ -236,7 +238,7 @@ namespace DTXMania
                                "Smaller value makes smaller lag,\n" +\r
                                "but it may cause sound troubles.\n" +\r
                                "\n" +\r
-                               "Note: Restart DTXMania to make\n" +\r
+                               "Note: Exit CONFIGURATION to make\n" +\r
                                "     the setting take effect." );\r
                        this.list項目リスト.Add( this.iSystemWASAPIBufferSizeMs );\r
 \r
@@ -247,13 +249,13 @@ namespace DTXMania
                                "ASIO使用時のサウンドデバイスを\n" +\r
                                "選択します。\n" +\r
                                "\n" +\r
-                               "※ 設定はアプリ再起動後に有効に\n" +\r
-                               " なります。",\r
+                               "※ 設定はCONFIGURATION画面の\n" +\r
+                               " 終了時に有効になります。",\r
                                "ASIO Sound Device:\n" +\r
                                "Select the sound device to use\n" +\r
                                "under ASIO mode.\n" +\r
                                "\n" +\r
-                               "Note: Restart DTXMania to make\n" +\r
+                               "Note: Exit CONFIGURATION to make\n" +\r
                                "     the setting take effect.",\r
                                asiodevs );\r
                        this.list項目リスト.Add( this.iSystemASIODevice );\r
@@ -268,8 +270,8 @@ namespace DTXMania
                                "減少しますが、音割れや異常動作を\n" +\r
                                "引き起こす場合があります。\n" +\r
                                "\n" +\r
-                               "※ 設定はアプリ再起動後に有効に\n" +\r
-                               " なります。",\r
+                               "※ 設定はCONFIGURATION画面の\n" +\r
+                               " 終了時に有効になります。",\r
                                "Sound buffer size for ASIO:\n" +\r
                                "You can set from 0 to 99999ms.\n" +\r
                                "Set 0 to use a default value already\n" +\r
@@ -277,9 +279,9 @@ namespace DTXMania
                                "Smaller value makes smaller lag,\n" +\r
                                "but it may cause sound troubles.\n" +\r
                                "\n" +\r
-                               "Note: Restart DTXMania to make\n" +\r
-                               "     the setting take effect.");\r
-                       this.list項目リスト.Add(this.iSystemASIOBufferSizeMs);\r
+                               "Note: Exit CONFIGURATION to make\n" +\r
+                               "     the setting take effect." );\r
+                       this.list項目リスト.Add( this.iSystemASIOBufferSizeMs );\r
 \r
                        this.iSystemSkinSubfolder = new CItemList( "Skin (General)", CItemBase.Eパネル種別.通常, nSkinIndex,\r
                                "スキン切替:\n" +\r
@@ -1436,7 +1438,11 @@ namespace DTXMania
                        this.n現在のスクロールカウンタ = 0;\r
                        this.nスクロール用タイマ値 = -1;\r
                        this.ct三角矢印アニメ = new CCounter();\r
-                       \r
+\r
+                       this.iSystemSoundType_initial                   = this.iSystemSoundType.n現在選択されている項目番号;       // CONFIGに入ったときの値を保持しておく\r
+                       this.iSystemWASAPIBufferSizeMs_initial  = this.iSystemWASAPIBufferSizeMs.n現在の値;                         // CONFIG脱出時にこの値から変更されているようなら\r
+                       this.iSystemASIOBufferSizeMs_initial    = this.iSystemASIOBufferSizeMs.n現在の値;                           // サウンドデバイスを再構築する\r
+                       this.iSystemASIODevice_initial                  = this.iSystemASIODevice.n現在選択されている項目番号;      //\r
                        base.On活性化();\r
                }\r
                public override void On非活性化()\r
@@ -1449,12 +1455,44 @@ namespace DTXMania
                        this.ct三角矢印アニメ = null;\r
                        \r
                        base.On非活性化();\r
-\r
+                       #region [ Skin変更 ]\r
                        if ( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( true ) != this.skinSubFolder_org )\r
                        {\r
                                CDTXMania.stageChangeSkin.tChangeSkinMain();    // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新\r
                        }\r
+                       #endregion\r
+\r
+                       // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。\r
+                       #region [ サウンドデバイス変更 ]\r
+                       if ( this.iSystemSoundType_initial != this.iSystemSoundType.n現在選択されている項目番号 ||\r
+                               this.iSystemWASAPIBufferSizeMs_initial != this.iSystemWASAPIBufferSizeMs.n現在の値 ||\r
+                               this.iSystemASIOBufferSizeMs_initial != this.iSystemASIOBufferSizeMs.n現在の値 ||\r
+                               this.iSystemASIODevice_initial != this.iSystemASIODevice.n現在選択されている項目番号 )\r
+                       {\r
+                               ESoundDeviceType soundDeviceType;\r
+                               switch ( this.iSystemSoundType.n現在選択されている項目番号 )\r
+                               {\r
+                                       case 0:\r
+                                               soundDeviceType = ESoundDeviceType.DirectSound;\r
+                                               break;\r
+                                       case 1:\r
+                                               soundDeviceType = ESoundDeviceType.ASIO;\r
+                                               break;\r
+                                       case 2:\r
+                                               soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;\r
+                                               break;\r
+                                       default:\r
+                                               soundDeviceType = ESoundDeviceType.Unknown;\r
+                                               break;\r
+                               }\r
 \r
+                               FDK.CSound管理.t初期化( soundDeviceType,\r
+                                                                               this.iSystemWASAPIBufferSizeMs.n現在の値,\r
+                                                                               this.iSystemASIOBufferSizeMs.n現在の値,\r
+                                                                               this.iSystemASIODevice.n現在選択されている項目番号 );\r
+                               CDTXMania.app.AddSoundTypeToWindowTitle();\r
+                       }\r
+                       #endregion\r
                }\r
                public override void OnManagedリソースの作成()\r
                {\r
@@ -1865,6 +1903,12 @@ namespace DTXMania
                private CItemInteger iSystemASIOBufferSizeMs;           // #24820 2013.1.3 yyagi\r
                private CItemList       iSystemASIODevice;                              // $24820 2013.1.17 yyagi\r
 \r
+               private int iSystemSoundType_initial;\r
+               private int iSystemWASAPIBufferSizeMs_initial;\r
+               private int iSystemASIOBufferSizeMs_initial;\r
+               private int iSystemASIODevice_initial;\r
+\r
+\r
                private List<CItemBase> list項目リスト;\r
                private long nスクロール用タイマ値;\r
                private int n現在のスクロールカウンタ;\r
index 13635e3..ae13f9e 100644 (file)
@@ -128,6 +128,7 @@ namespace FDK
                public CSound管理( IntPtr handle, ESoundDeviceType soundDeviceType, int nSoundDelayExclusiveWASAPI, int nSoundDelayASIO, int nASIODevice )\r
                {\r
                        WindowHandle = handle;\r
+                       SoundDevice = null;\r
                        t初期化( soundDeviceType, nSoundDelayExclusiveWASAPI, nSoundDelayASIO, nASIODevice );\r
                }\r
                public void Dispose()\r
@@ -143,7 +144,7 @@ namespace FDK
 \r
                public static void t初期化( ESoundDeviceType soundDeviceType, int _nSoundDelayExclusiveWASAPI, int _nSoundDelayASIO, int _nASIODevice )\r
                {\r
-                       SoundDevice = null;                                                     // ユーザ依存\r
+                       //SoundDevice = null;                                           // 後で再初期化することがあるので、null初期化はコンストラクタに回す\r
                        rc演奏用タイマ = null;                                            // Global.Bass 依存(つまりユーザ依存)\r
                        nMixing = 0;\r
 \r
@@ -179,6 +180,7 @@ namespace FDK
                        {\r
                                try\r
                                {\r
+Debug.WriteLine( "n初期デバイス=" + n初期デバイス );\r
                                        t現在のユーザConfigに従ってサウンドデバイスとすべての既存サウンドを再構築する();\r
                                        break;\r
                                }\r
@@ -1013,8 +1015,11 @@ Debug.WriteLine( "停止: " + System.IO.Path.GetFileName( this.strファイル
 \r
                public static void tすべてのサウンドを初期状態に戻す()\r
                {\r
-                       foreach( var sound in CSound.listインスタンス )\r
+                       foreach ( var sound in CSound.listインスタンス )\r
+                       {\r
+                               Debug.WriteLine( "解放: " + Path.GetFileName( sound.strファイル名 ) );\r
                                sound.t解放する();\r
+                       }\r
                }\r
                public static void tすべてのサウンドを再構築する( ISoundDevice device )\r
                {\r
index 1363756..22af4e8 100644 (file)
@@ -343,6 +343,7 @@ Debug.WriteLine( "Default device no.: " + nASIODevice );
                                C共通.tDisposeする( this.tmシステムタイマ );\r
                                this.tmシステムタイマ = null;\r
                        }\r
+                       this.e出力デバイス = ESoundDeviceType.Unknown;\r
                }\r
                ~CSoundDeviceASIO()\r
                {\r
index 279727e..a81ee70 100644 (file)
@@ -212,6 +212,7 @@ namespace FDK
                                C共通.tDisposeする( ref this.DirectSound );\r
                                C共通.tDisposeする( this.tmシステムタイマ );\r
                        }\r
+                       this.e出力デバイス = ESoundDeviceType.Unknown;\r
                }\r
                ~CSoundDeviceDirectSound()\r
                {\r
index 11d3bde..a72ce72 100644 (file)
@@ -261,6 +261,7 @@ Retry:
                                C共通.tDisposeする( this.tmシステムタイマ );\r
                                this.tmシステムタイマ = null;\r
                        }\r
+                       this.e出力デバイス = ESoundDeviceType.Unknown;\r
                }\r
                ~CSoundDeviceWASAPI()\r
                {\r
index 923f130..9a54e3d 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
index 8bf81fe..33ca5c5 100644 (file)
Binary files a/実行時フォルダ/FDK.dll and b/実行時フォルダ/FDK.dll differ