Module Rhythm

type judgement =
  1. | Perfect
  2. | Great
  3. | Good
  4. | Almost
  5. | Miss
val window : judgement -> float
val judge : float -> judgement option
val points : judgement -> int
val name : judgement -> string
val song_time : position:float -> offset:float -> float
type 'lane note = {
  1. at : float;
  2. lane : 'lane;
  3. length : float;
}
type 'lane performance = {
  1. judged : ('lane note * judgement option) list;
  2. errors : float list;
  3. combo : int;
  4. best_combo : int;
  5. score : int;
  6. last : (judgement * float) option;
  7. offset : float;
  8. now : float;
  9. started : float;
}
val start : offset:float -> started:float -> 'lane note list -> 'lane performance
val press : float -> 'lane -> 'lane performance -> 'lane performance
val misses : float -> 'lane performance -> 'lane performance
val play : float -> 'lane list -> 'lane performance -> 'lane performance
val average_error : 'lane performance -> float option
val sounding : Abc.tune -> int -> (float * float * int list) list
val on_frets : Abc.tune -> int -> int note list
type difficulty =
  1. | Easy
  2. | Medium
  3. | Hard
  4. | Expert
val difficulties : difficulty list
val difficulty_name : difficulty -> string
val frets_at : difficulty -> int
val chord_at : difficulty -> int
val reduce : difficulty -> int note list -> int note list
val strummed : strum:bool -> held:'lane list -> 'lane list
val sustain_min : float
val sustaining : float -> 'lane list -> 'lane performance -> int
val muted : int -> Abc.tune -> Abc.tune
val newly_hit : 'lane performance -> 'lane performance -> float list
val struck : Abc.tune -> int -> float -> Abc.tune