Module Mu.Pitch


Absolute pitch

type abs = int

The type for absolute pitches in semitones on a chromatic 12-tone scale. The absolute pitch of middle C (C4) is 60. Constrained to the range [0;127] these values correspond to MIDI notes.

type rel = int

The type for relative pitches. This is an absolute pitch difference.

module Abs : sig ... end

Absolute pitches.

Pitch classes

module Class : sig ... end

Pitch classes.


type octave = int

The type for octave numbers. Octave number 4 corresponds to the octave of middle C (C4).

type t = Class.t * octave

The type for pitches. A pitch class and an octave.

  • (`A, 4) is A440.
  • (`A, 0) to (`C, 8) is the range of a piano.
  • (`C, -1) to (`G, 9) is the the MIDI note range.
val a440 : t

a440 is (`A, 4), the standard pitch A440.

val midi_min : t

midi_min is (`C, -1), the lowest MIDI note.

val midi_max : t

midi_max is (`G, 9), the highest MIDI note.


val transp : rel -> t -> t

transp r p transposes pitch p by r relative semitones.

val succ : t -> t

succ p is transp 1 p.

val pred : t -> t

pred p is transp (-1) p.

Predicates and comparisons

val equal : t -> t -> bool

equal p0 p1 is true iff p0 and p1 have the same absolute pitch.

val compare : t -> t -> int

compare p0 p1 is a total order on pitches compatible with equal.


val to_abs : t -> abs

to_abs p is the absolute pitch of p.

val of_abs : abs -> t

of_abs ap is a pitch for the absolute pitch of ap.


val pp : Stdlib.Format.formatter -> t -> unit

pp formats pitches.