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 -> Complex.t array
  val fft : Audio.Mono.Analyze.FFT.t -> Complex.t array -> unit
  val band_freq : int -> Audio.Mono.Analyze.FFT.t -> int -> float
  module Window :
    sig
      val cosine : Complex.t array -> unit
      val hann : Complex.t array -> unit
      val hamming : Complex.t array -> unit
      val lanczos : Complex.t array -> unit
      val triangular : Complex.t array -> unit
      val bartlett_hann : Complex.t array -> unit
      val blackman :
        ?alpha:float -> Audio.Mono.Analyze.FFT.t -> Complex.t array -> unit
      val nuttall : Audio.Mono.Analyze.FFT.t -> Complex.t array -> unit
      val blackman_harris :
        Audio.Mono.Analyze.FFT.t -> Complex.t array -> unit
      val blackman_nuttall :
        Audio.Mono.Analyze.FFT.t -> Complex.t array -> unit
    end
  val notes :
    int ->
    Audio.Mono.Analyze.FFT.t ->
    ?window:(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