sig
  type t
  val init : int -> Audio.Mono.Analyze.FFT.t
  val duration : Audio.Mono.Analyze.FFT.t -> int
  val complex_create :
    Audio.Mono.buffer -> int -> int -> Stdlib.Complex.t array
  val fft : Audio.Mono.Analyze.FFT.t -> Stdlib.Complex.t array -> unit
  val band_freq : int -> Audio.Mono.Analyze.FFT.t -> int -> float
  module Window :
    sig
      val cosine : Stdlib.Complex.t array -> unit
      val hann : Stdlib.Complex.t array -> unit
      val hamming : Stdlib.Complex.t array -> unit
      val lanczos : Stdlib.Complex.t array -> unit
      val triangular : Stdlib.Complex.t array -> unit
      val bartlett_hann : Stdlib.Complex.t array -> unit
      val blackman :
        ?alpha:float ->
        Audio.Mono.Analyze.FFT.t -> Stdlib.Complex.t array -> unit
      val nuttall :
        Audio.Mono.Analyze.FFT.t -> Stdlib.Complex.t array -> unit
      val blackman_harris :
        Audio.Mono.Analyze.FFT.t -> Stdlib.Complex.t array -> unit
      val blackman_nuttall :
        Audio.Mono.Analyze.FFT.t -> Stdlib.Complex.t array -> unit
    end
  val notes :
    int ->
    Audio.Mono.Analyze.FFT.t ->
    ?window:(Stdlib.Complex.t array -> unit) ->
    ?note_min:int ->
    ?note_max:int ->
    ?volume_min:float ->
    ?filter_harmonics:bool ->
    float array -> int -> int -> (Audio.Note.t * float) list
  val loudest_note :
    (Audio.Note.t * float) list -> (Audio.Note.t * float) option
end