public static SST.曲.曲ツリー管理 曲ツリー管理 => ( StrokeStyleT.bs_曲ツリー管理 );
public static SSTFormat.スコア 演奏スコア { get; set; } = null;
public static SST.設定.Config Config => ( StrokeStyleT.bs_Config );
-
- /// <summary>
- /// ビュアーモード用のプロパティ。(static)
- /// 各プロパティの値は、起動時のコマンドライン引数を解析して得られる。
- /// </summary>
- public class ViewerMode
- {
- public bool ビュアーモードである => ( this.曲ファイルパス.Nullでも空でもない() );
- public string 曲ファイルパス { get; set; } = null;
- public int 演奏開始小節番号 { get; set; } = 0;
- public bool 演奏停止 { get; set; } = false;
- public bool ドラム音を使う { get; set; } = false;
- }
- public static ViewerMode ビュアーモード => ( StrokeStyleT.bs_ビュアーモード );
+ public static bool ビュアーモードである { get; set; } = false;
+ public static SST.ステージ.演奏.ビュアーメッセージキュー ビュアーメッセージキュー => ( StrokeStyleT.bs_ビュアーメッセージキュー );
public static void すべての入力デバイスをポーリングする()
{
{
Debug.Assert( null == this.デバイスリソース, "デバイスリソースの作成前であること。" );
- StrokeStyleT.bs_ビュアーモード = this.コマンドライン引数を解析する(
- Environment.GetCommandLineArgs().Skip( 1 ) ); // 最初の要素は exe ファイル名なのでスキップする。
+ this.コマンドライン引数を解析する( Environment.GetCommandLineArgs().Skip( 1 ) ); // 最初の要素は exe ファイル名なのでスキップする。
this.MainForm.Text = $"StrokeStyle<T> {System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}";
this.設計画面サイズdpx = new SharpDX.Size2F( 1920, 1080 ); // 設計画面サイズdpx(固定)
case nameof( ステージ.ステージ ):
#region " ビュアーモード → ビュアーステージへ。"
//----------------
- if( StrokeStyleT.ビュアーモード.ビュアーモードである )
+ if( StrokeStyleT.ビュアーモードである )
{
this.ビュアーステージ.活性化する( this.デバイスリソース );
this.現在のステージ = this.ビュアーステージ;
lock( this.スレッド間同期 )
{
- if( StrokeStyleT.ビュアーモード.ビュアーモードである )
+ if( StrokeStyleT.ビュアーモードである )
{
- this.新しいビュアーモード = this.コマンドライン引数を解析する( eventArgs.CommandLine );
- this.ビュアーモードアクションを実行せよ.状態 = FDK.同期.TriStateEvent.状態種別.ON;
+ this.コマンドライン引数を解析する( eventArgs.CommandLine );
}
else
{
private SST.ステージ.ステージ 現在のステージ = null;
- // ビュアーモード連携。
- private ViewerMode 新しいビュアーモード = null;
- private FDK.同期.TriStateEvent ビュアーモードアクションを実行せよ = new FDK.同期.TriStateEvent( FDK.同期.TriStateEvent.状態種別.OFF );
-
#region " バックストア。"
//----------------
private static SST.フォルダ bs_フォルダ = null;
private static SST.ユーザ.ユーザ管理 bs_ユーザ管理 = null;
private static SST.曲.曲ツリー管理 bs_曲ツリー管理 = null;
private static SST.設定.Config bs_Config = null;
- private static SST.StrokeStyleT.ViewerMode bs_ビュアーモード = new ViewerMode();
+ private static readonly SST.ステージ.演奏.ビュアーメッセージキュー bs_ビュアーメッセージキュー = new ステージ.演奏.ビュアーメッセージキュー();
//----------------
#endregion
/// </summary>
/// <param name="args">コマンドライン引数の列挙。exeファイル名は含まない。</param>
/// <return>引数を反映したビュアーモード変数。</return>
- private ViewerMode コマンドライン引数を解析する( IEnumerable<string> args )
+ private void コマンドライン引数を解析する( IEnumerable<string> args )
{
FDK.Log.BeginInfo( $"{FDK.Utilities.現在のメソッド名}" );
- var vmode = new ViewerMode() {
- 曲ファイルパス = null,
- 演奏停止 = false,
- 演奏開始小節番号 = 0,
- ドラム音を使う = false,
- };
-
try
{
if( 0 == args.Count() )
{
- FDK.Log.Info( "引数は指定されていません。" ); // ビュアーモードではない。
- return vmode;
+ FDK.Log.Info( "引数は指定されていません。" ); // ビュアーモードではない。
+ return;
}
+ StrokeStyleT.ビュアーモードである = true;
+
try
{
+ // 新しいメッセージを生成する。
+ var msg = new ステージ.演奏.ビュアーメッセージ() {
+ 種別 = ステージ.演奏.ビュアーメッセージ.E種別.演奏開始, // 規定値は「演奏開始」
+ 曲ファイルパス = null,
+ 演奏開始小節番号 = 0,
+ ドラム音を発声する = false, // 規定値は false
+ };
+
// オプションを定義する。
var optionSet = new Mono.Options.OptionSet() {
"Usage: StrokeStyleT [File] [OPTIONS]+",
" File\t\t\t\tビュアーモードで表示する曲ファイル名です。",
- { "p=|part=", "ビュアーモードで起動し、指定された小節番号から演奏を開始します。小節番号を省略すると、先頭から再生します。", (int v) => { vmode.演奏開始小節番号 = v; } },
- { "s|stop", "ビュアーモードで演奏中であれば、演奏を停止します。", v => { vmode.演奏停止 = ( v != null ); } },
- { "d|drums", "ビュアーモードで、チップヒット時に内蔵のドラム音を再生します。", v => { vmode.ドラム音を使う = ( v != null ); } },
+ { "p=|part=", "ビュアーモードで起動し、指定された小節番号から演奏を開始します。小節番号を省略すると、先頭から再生します。", (int v) => { msg.演奏開始小節番号 = v; } },
+ { "s|stop", "ビュアーモードで演奏中であれば、演奏を停止します。", v => { if ( v != null ) { msg.種別 = ステージ.演奏.ビュアーメッセージ.E種別.演奏停止; } } },
+ { "d|drums", "ビュアーモードで、チップヒット時に内蔵のドラム音を再生します。", v => { if( v != null ) { msg.ドラム音を発声する = true; } } },
};
// オプションを解析する。
List<string> ファイルパスs = optionSet.Parse( args );
// 解析結果。
- if( vmode.演奏停止 )
+ if( msg.種別 == ステージ.演奏.ビュアーメッセージ.E種別.演奏停止 )
{
// (A) 演奏停止(曲ファイルパスは省略可。)
- FDK.Log.Info( "演奏停止" );
+ FDK.Log.Info( "ビュアーメッセージ: 演奏停止" );
}
else
{
{
if( File.Exists( ファイルパスs[ 0 ] ) )
{
- vmode.曲ファイルパス = ファイルパスs[ 0 ];
+ msg.曲ファイルパス = ファイルパスs[ 0 ];
}
else
{
- vmode.曲ファイルパス = null; // ファイルが存在しなかったら null 。
+ msg.曲ファイルパス = null; // ファイルが存在しなかったら null 。
throw new Mono.Options.OptionException( $"ファイルが存在しません。[{FDK.フォルダ.絶対パスをフォルダ変数付き絶対パスに変換して返す( ファイルパスs[ 0 ] )}]", "File" );
}
}
throw new Mono.Options.OptionException( "ファイルの指定がありません。", "File" );
}
- FDK.Log.Info( $"曲ファイルパス: {vmode.曲ファイルパス}" );
- FDK.Log.Info( $"開始小節番号: {vmode.演奏開始小節番号}" );
- FDK.Log.Info( $"ドラム音: {vmode.ドラム音を使う}" );
+ FDK.Log.Info( "ビュアーメッセージ: 演奏開始" );
+ FDK.Log.Info( $"曲ファイルパス: {msg.曲ファイルパス}" );
+ FDK.Log.Info( $"開始小節番号: {msg.演奏開始小節番号}" );
+ FDK.Log.Info( $"ドラム音: {msg.ドラム音を発声する}" );
}
+
+ // キューへ格納。
+ StrokeStyleT.ビュアーメッセージキュー.格納する( msg );
+ FDK.Log.Info( "ビュアーメッセージを送信しました。" );
}
catch( Mono.Options.OptionException e )
{
FDK.Log.ERROR( $"{e.Message}" );
}
-
- return vmode;
}
finally
{