OSDN Git Service

FDK.Utilities.変換_sec単位から100ns単位へ() を、切り捨てではなく四捨五入するように修正。
[strokestylet/CsWin10Desktop3.git] / FDK24 / メディア / サウンド / WASAPI / Device.cs
index 28c92dd..984923c 100644 (file)
@@ -21,6 +21,8 @@ namespace FDK.メディア.サウンド.WASAPI
 
                public void 初期化する( CSCore.CoreAudioAPI.AudioClientShareMode 共有モード, double 希望更新間隔sec = 0.015 )
                {
+                       FDK.Log.BeginInfo( $"{FDK.Utilities.現在のメソッド名}" );
+
                        int hr = 0;
 
                        lock( this.スレッド間同期 )
@@ -128,19 +130,18 @@ namespace FDK.メディア.サウンド.WASAPI
                                this.bs_AudioClock = CSCore.CoreAudioAPI.AudioClock.FromAudioClient( this.AudioClient );
                                //-----------------
                                #endregion
-
-                               #region " ミキサーを生成し初期化する。"
+                               #region " エンドポイントバッファを無音で埋めておく。"
                                //-----------------
-                               this.Mixer = new Mixer();
-                               this.Mixer.初期化する( this.更新間隔sample );
+                               this.AudioRenderClient.GetBuffer( this.更新間隔sample );
+                               
+                               // 無音を書き込んだことにして、バッファをコミット。(GetBuffer の戻り値は使わない。)
+                               this.AudioRenderClient.ReleaseBuffer( this.更新間隔sample, CSCore.CoreAudioAPI.AudioClientBufferFlags.Silent );
                                //-----------------
                                #endregion
-                               #region " 最初のエンドポイントバッファを無音で埋めておく。"
-                               //-----------------
-                               var bufferPtr = this.AudioRenderClient.GetBuffer( this.更新間隔sample );
 
-                               // 無音を書き込んだことにして、バッファをコミット。(bufferPrtは使わない。)
-                               this.AudioRenderClient.ReleaseBuffer( this.更新間隔sample, CSCore.CoreAudioAPI.AudioClientBufferFlags.Silent );
+                               #region " ミキサーを生成し初期化する。"
+                               //-----------------
+                               this.Mixer = new Mixer( this.更新間隔sample );
                                //-----------------
                                #endregion
 
@@ -161,23 +162,16 @@ namespace FDK.メディア.サウンド.WASAPI
 
                                #region " ワークキューとイベントを作成し、作業項目を登録する。"
                                //-----------------
-                               // MediaFoundation が管理する、プロセス&MMCSSタスクごとに1つずつ作ることができる特別な共有ワークキューを取得、または生成して取得する。
+                               // MediaFoundation が管理する、プロセス&MMCSSタスクごとに1つずつ作ることができる特別な共有ワークキューを取得(または生成して取得)する。
                                int dwTaskId = 0;
-                               SharpDX.MediaFoundation.MediaFactory.LockSharedWorkQueue(
-                                       ( 0.011 > this.更新間隔sec ) ? "Pro Audio" : "Games", 0, ref dwTaskId, out this.QueueID );
+                               SharpDX.MediaFoundation.MediaFactory.LockSharedWorkQueue( ( 0.011 > this.更新間隔sec ) ? "Pro Audio" : "Games", 0, ref dwTaskId, out this.QueueID );
 
                                // エンドポイントバッファからの出力要請イベントを作成し、AudioClient に登録する。
                                this.出力要請イベント = CreateEvent( IntPtr.Zero, false, false, "WASAPI出力要請イベント" );
                                this.AudioClient.SetEventHandle( this.出力要請イベント );
 
                                // コールバックを作成し、ワークキューに最初の作業項目を登録する。
-                               this.出力要請イベントのコールバック = new MFAsyncCallback( this.QueueID, ( ar ) => {
-                                       this.出力要請イベントへ対応する( ar );
-                               } );
-                               //-----------------
-                               #endregion
-                               #region " 最初の作業項目を追加する。"
-                               //-----------------
+                               this.出力要請イベントのコールバック = new MFAsyncCallback( this.QueueID, this.出力要請イベントへ対応する );
                                this.作業項目をキューに格納する();
                                //-----------------
                                #endregion
@@ -187,9 +181,13 @@ namespace FDK.メディア.サウンド.WASAPI
                                //-----------------
                                #endregion
                        }
+
+                       FDK.Log.EndInfo( $"{FDK.Utilities.現在のメソッド名}" );
                }
                public void Dispose()
                {
+                       FDK.Log.BeginInfo( $"{FDK.Utilities.現在のメソッド名}" );
+
                        Trace.Assert( false == this.Dispose済み );
 
                        #region " WASAPI作業項目を終了させる。オーディオのレンダリングを止める前に行うこと。"
@@ -238,14 +236,14 @@ namespace FDK.メディア.サウンド.WASAPI
                                FDK.Utilities.解放する( ref this.出力要請イベントのコールバック );
 
                                if( IntPtr.Zero != this.出力要請イベント )
-                                       CloseHandle( this.出力要請イベント );
+                                       Device.CloseHandle( this.出力要請イベント );
                                //-----------------
                                #endregion
 
                                this.Dispose済み = true;
                        }
 
-                       FDK.Log.Info( "WASAPIクライアントを終了しました。" );
+                       FDK.Log.EndInfo( $"{FDK.Utilities.現在のメソッド名}" );
                }
                public void サウンドをミキサーに追加する( Sound sound )
                {