sig
  val rms : Audio.Mono.buffer -> int -> int -> float
  module FFT :
    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
end