public static IEnumerable <ProbabilityGenerationResult> MoveToStartFromLastNote(ProbabilityGenerationContext context) { if (context.TargetNoteNode == null || context.TargetNoteNode.Next != null) { yield break; } yield return(ProbabilityGenerationResult.CreateToStartState(context.RemainingProbability, false)); }
/// <summary> /// 歌唱をやめてスタートに戻る確率 /// </summary> public static IEnumerable <ProbabilityGenerationResult> StopSinging(ProbabilityGenerationContext context) { if (context.TargetNoteNode?.Next == null) { yield break; // 最後のノートからスタートへの移動は後で } yield return(ProbabilityGenerationResult.CreateToStartState(0.05, false)); }
/// <summary> /// 自己ループの確率(音程変化の判定が過剰に反応してしまった場合) /// </summary> public static IEnumerable <ProbabilityGenerationResult> SelfLoop(ProbabilityGenerationContext context) { if (context.TargetNoteNode == null) { // スタート状態 yield return(ProbabilityGenerationResult.CreateToStartState(0.8, false)); } else { yield return(new ProbabilityGenerationResult(context.TargetNoteNode.Value.Index, 0.33, false)); } }