//----------------
{
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.現在のフェーズ = フェーズ.完了;
}