OSDN Git Service

DirectSoundを選択すると例外が発生するミス、ならびにWASAPIを正常に選択できないミスを修正。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Sat, 6 May 2017 13:23:32 +0000 (22:23 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Sat, 6 May 2017 13:23:32 +0000 (22:23 +0900)
SharpDX.DirectSound.SecondarySoundBuffer.GetFormat() の使い方を誤っていたので、GetFormat() しなくてもいいように、private メンバでフォーマットを持っておくよう変更。
WASAPIの初期化時、BASS_Init() の device が 0 (no sound)ではなく -1 (default device) になっていたミスを修正。
WASAPIの初期化時、BASS_WASAPI_Init() の device を -1 (default output device) から、手動で列挙して見つけたデフォルトデバイス番号へせっかくなので変更。
DTXManiaのタイトルバーのバージョンを "108+(170506)"に修正。
sondlist.db, songs.dl を .gitignore に追加。

.gitignore
DTXManiaプロジェクト/コード/全体/CDTXMania.cs
FDK17プロジェクト/コード/03.サウンド/CSound.cs
FDK17プロジェクト/コード/03.サウンド/CSoundDeviceWASAPI.cs
実行時フォルダ/DTXCreator.exe
実行時フォルダ/DTXManiaGR.exe
実行時フォルダ/dll/FDK.dll
実行時フォルダ/ja-JP/DTXCreator.resources.dll
実行時フォルダ/ja-JP/DTXManiaGR.resources.dll

index eb9d0c7..a82c8e6 100644 (file)
@@ -8,6 +8,8 @@
 *.sln.docstates
 Config.xml
 DTXManiaLog.txt
+songlist.db
+songs.db
 
 # User-specific files (MonoDevelop/Xamarin Studio)
 *.userprefs
index dd384f6..a63ea56 100644 (file)
@@ -23,7 +23,7 @@ namespace DTXMania
        {\r
                // プロパティ\r
                #region [ properties ]\r
-               public static readonly string VERSION = "108(170401)";\r
+               public static readonly string VERSION = "108+(170506)";\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
index 882c1f7..4a21da8 100644 (file)
@@ -974,9 +974,11 @@ namespace FDK
                {\r
                        // セカンダリバッファを作成し、PCMデータを書き込む。\r
 \r
+                       this._Format = wfx;\r
+\r
                        this.Buffer = new SecondarySoundBuffer( DirectSound, new SoundBufferDescription()\r
                        {\r
-                               Format = ( wfx.Encoding == WaveFormatEncoding.Pcm ) ? wfx : (SharpDX.Multimedia.WaveFormatExtensible) wfx,\r
+                               Format = this._Format,\r
                                Flags = flags,\r
                                BufferBytes = nPCMサイズbyte,\r
                        } );\r
@@ -991,13 +993,9 @@ namespace FDK
 \r
                        // DTXMania用に追加\r
                        this.nオリジナルの周波数 = wfx.SampleRate;\r
-                       var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) };\r
-                       this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ );\r
-                       n総演奏時間ms = (int) ( ( (double) nPCMサイズbyte ) / ( format[ 0 ].AverageBytesPerSecond * 0.001 ) );\r
-\r
+                       n総演奏時間ms = (int) ( ( (double) nPCMサイズbyte ) / ( this._Format.AverageBytesPerSecond * 0.001 ) );\r
 \r
                        // インスタンスリストに登録。\r
-\r
                        CSound.listインスタンス.Add( this );\r
                }\r
 \r
@@ -1238,13 +1236,10 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ
                        }\r
                        else if( this.bDirectSoundである )\r
                        {\r
-                               var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) };\r
-                               this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ );\r
-\r
-                               int n位置sample = (int) ( format[ 0 ].SampleRate * n位置ms * 0.001 * _db周波数倍率 * _db再生速度 );  // #30839 2013.2.24 yyagi; add _db周波数倍率 and _db再生速度\r
+                               int n位置sample = (int) ( this._Format.SampleRate * n位置ms * 0.001 * _db周波数倍率 * _db再生速度 );  // #30839 2013.2.24 yyagi; add _db周波数倍率 and _db再生速度\r
                                try\r
                                {\r
-                                       this.Buffer.CurrentPosition = n位置sample * format[ 0 ].BlockAlign;\r
+                                       this.Buffer.CurrentPosition = n位置sample * this._Format.BlockAlign;\r
                                }\r
                                catch ( Exception e )\r
                                {\r
@@ -1272,11 +1267,7 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ
                        {\r
                                this.Buffer.GetCurrentPosition( out int pos, out _ );\r
                                n位置byte = (long) pos;\r
-\r
-                               var format = new SharpDX.Multimedia.WaveFormatExtensible[] { new SharpDX.Multimedia.WaveFormatExtensible( 0, 0, 0 ) };\r
-                               this.Buffer.GetFormat( format, Marshal.SizeOf<SharpDX.Multimedia.WaveFormatExtensible>(), out _ );\r
-\r
-                               db位置ms = n位置byte / format[ 0 ].SampleRate / 0.001 / _db周波数倍率 / _db再生速度;\r
+                               db位置ms = n位置byte / this._Format.SampleRate / 0.001 / _db周波数倍率 / _db再生速度;\r
                        }\r
                        else\r
                        {\r
@@ -1502,6 +1493,7 @@ Debug.WriteLine("更に再生に失敗: " + Path.GetFileName(this.strファイ
                private double _db周波数倍率 = 1.0;\r
                private double _db再生速度 = 1.0;\r
                private bool bIs1倍速再生 = true;\r
+               private WaveFormat _Format;\r
 \r
                private void tBASSサウンドを作成する( string strファイル名, int hMixer, BASSFlag flags )\r
                {\r
index 0f12581..5f9d4f1 100644 (file)
@@ -172,7 +172,6 @@ namespace FDK
 \r
                        // BASS の初期化。\r
 \r
-                       int nデバイス = 0;          // 0:"no device" … BASS からはデバイスへアクセスさせない。アクセスは BASSWASAPI アドオンから行う。\r
                        int n周波数 = 44100; // 仮決め。lデバイス(≠ドライバ)がネイティブに対応している周波数であれば何でもいい?ようだ。BASSWASAPIでデバイスの周波数は変えられる。いずれにしろBASSMXで自動的にリサンプリングされる。\r
                        // BASS_Initは、WASAPI初期化の直前に行うよう変更。WASAPIのmix周波数を使って初期化することで、余計なリサンプリング処理を省き高速化するため。\r
                        //if( !Bass.BASS_Init( nデバイス, n周波数, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) )\r
@@ -200,7 +199,6 @@ namespace FDK
 \r
                        // BASS WASAPI の初期化。\r
 \r
-                       nデバイス = -1;\r
                        n周波数 = 0;                 // デフォルトデバイスの周波数 (0="mix format" sample rate)\r
                        int nチャンネル数 = 0;    // デフォルトデバイスのチャンネル数 (0="mix format" channels)\r
                        this.tWasapiProc = new WASAPIPROC( this.tWASAPI処理 );                // アンマネージに渡す delegate は、フィールドとして保持しておかないとGCでアドレスが変わってしまう。\r
@@ -221,7 +219,7 @@ namespace FDK
                        }\r
                        if ( nDevNo != -1 )\r
                        {\r
-                               if ( !Bass.BASS_Init( nデバイス, deviceInfo.mixfreq, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) )\r
+                               if ( !Bass.BASS_Init( 0, deviceInfo.mixfreq, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero ) )  // device = 0:"no device": BASS からはデバイスへアクセスさせない。アクセスは BASSWASAPI アドオンから行う。\r
                                        throw new Exception( string.Format( "BASS (WASAPI) の初期化に失敗しました。(BASS_Init)[{0}]", Bass.BASS_ErrorGetCode().ToString() ) );\r
 \r
 \r
@@ -246,7 +244,7 @@ namespace FDK
                        {\r
                                flags |= BASSWASAPIInit.BASS_WASAPI_EVENT;      // Win7以降の場合は、WASAPIをevent drivenで動作させてCPU負荷減、レイテインシ改善\r
                        }\r
-                       if ( BassWasapi.BASS_WASAPI_Init( nデバイス, n周波数, nチャンネル数, flags, ( n希望バッファサイズms / 1000.0f ), ( n更新間隔ms / 1000.0f ), this.tWasapiProc, IntPtr.Zero ) )\r
+                       if ( BassWasapi.BASS_WASAPI_Init( nDevNo, n周波数, nチャンネル数, flags, ( n希望バッファサイズms / 1000.0f ), ( n更新間隔ms / 1000.0f ), this.tWasapiProc, IntPtr.Zero ) )\r
                        {\r
                                if( mode == Eデバイスモード.排他 )\r
                                {\r
index 66f910b..507c71b 100644 (file)
Binary files a/実行時フォルダ/DTXCreator.exe and b/実行時フォルダ/DTXCreator.exe differ
index 6cf7817..2dabaa9 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
index d6a4735..0ea9b08 100644 (file)
Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ
index bfc592d..dc504b9 100644 (file)
Binary files a/実行時フォルダ/ja-JP/DTXCreator.resources.dll and b/実行時フォルダ/ja-JP/DTXCreator.resources.dll differ
index f3388df..254214e 100644 (file)
Binary files a/実行時フォルダ/ja-JP/DTXManiaGR.resources.dll and b/実行時フォルダ/ja-JP/DTXManiaGR.resources.dll differ