OSDN Git Service

スコアのチップにサウンドデバイスの遅延が反映されていなかったミスを修正。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Sun, 11 Jun 2017 11:12:57 +0000 (20:12 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Sun, 11 Jun 2017 11:12:57 +0000 (20:12 +0900)
StrokeStyleT/ステージ/曲読込/曲読込ステージ.cs

index 2a76bd3..3f04022 100644 (file)
@@ -57,29 +57,31 @@ namespace SST.ステージ.曲読込
                                        //----------------
                                        {
                                                var node = ( App.ビュアーモードではない ) ?
-                                                       (MusicNode) App.ユーザ管理.選択されているユーザ.曲ツリー.フォーカスノード :        // (A) 通常モード
+                                                       (MusicNode) App.ユーザ管理.選択されているユーザ.曲ツリー.フォーカスノード :    // (A) 通常モード
                                                        App.ビュアー用ノード;                                                        // (B) ビュアーモード時
 
                                                string 選択曲ファイルパス = node.曲ファイルパス;
                                                Trace.Assert( 選択曲ファイルパス.Nullでも空でもない() );
 
-                                               // スコアを読み込む。
                                                using( Log.Block( "曲の読み込み" ) )
                                                {
+                                                       // スコアを読み込む。
                                                        App.演奏スコア = new スコア( SST.IO.Folder.絶対パスに含まれるフォルダ変数を展開して返す( 選択曲ファイルパス ) );
 
-                                                       // サウンドデバイス遅延を取得し、全チップの発声時刻へ反映する。
-                                                       float 作成時遅延ms = App.演奏スコア.Header.サウンドデバイス遅延ms;
-                                                       if( 0 < 作成時遅延ms )
-                                                       {
-                                                               float 再生時遅延ms = (float) ( App.サウンドデバイス.遅延sec * 1000.0 );
-                                                               long 加算分ms = (long) ( 作成時遅延ms - 再生時遅延ms );  // 例: 作成時遅延 7ms, 再生時遅延 10ms の場合、発声時刻に 7-10 = -3ms 加算する(3ms 早く発声させる)。
+                                                       #region " サウンドデバイス遅延を取得し、全チップの発声時刻へ反映する。"
+                                                       //----------------
+                                                       float 再生時遅延ms = (float) ( App.サウンドデバイス.遅延sec * 1000.0 );
+                                                       float 作成時遅延ms = ( App.ビュアーモードではない ) ?
+                                                               App.演奏スコア.Header.サウンドデバイス遅延ms :    // 通常モードなら、スコアファイルに記載の値。
+                                                               再生時遅延ms;                                    // ビュアーモードなら、今のサウンドデバイスの値。(スコアファイルに記載の値は使わない)
 
-                                                               Log.Info( $"作成時遅延={作成時遅延ms}ms, 再生時遅延={再生時遅延ms}ms => 加算分 = {加算分ms}ms" );
+                                                       long 加算分ms = (long) ( 作成時遅延ms - 再生時遅延ms );  // 例: 作成時遅延 7ms, 再生時遅延 10ms の場合、発声時刻に 7-10 = -3ms 加算する(3ms 早く発声させる)。
+                                                       Log.Info( $"作成時遅延={作成時遅延ms}ms, 再生時遅延={再生時遅延ms}ms => 加算分 = {加算分ms}ms" );
 
-                                                               foreach( var chip in App.演奏スコア.チップリスト )
-                                                                       chip.発声時刻ms += 加算分ms;
-                                                       }
+                                                       foreach( var chip in App.演奏スコア.チップリスト )
+                                                               chip.発声時刻ms += 加算分ms - (long) 再生時遅延ms;
+                                                       //----------------
+                                                       #endregion
 
                                                        this.現在のフェーズ = フェーズ.完了;
                                                }