sig
  module type Lame_t =
    sig
      val get_lame_version : unit -> string
      val get_lame_short_version : unit -> string
      val get_lame_very_short_version : unit -> string
      val get_lame_url : unit -> string
      val get_psy_version : unit -> string
      type encoder
      val create_encoder : unit -> Lame_dynlink.Lame_t.encoder
      val set_in_samplerate : Lame_dynlink.Lame_t.encoder -> int -> unit
      val set_num_channels : Lame_dynlink.Lame_t.encoder -> int -> unit
      val set_out_samplerate : Lame_dynlink.Lame_t.encoder -> int -> unit
      val set_quality : Lame_dynlink.Lame_t.encoder -> int -> unit
      type mode = Stereo | Joint_stereo | Dual_channel | Mono
      val set_mode :
        Lame_dynlink.Lame_t.encoder -> Lame_dynlink.Lame_t.mode -> unit
      type vbr_mode =
          Vbr_off
        | Vbr_rh
        | Vbr_abr
        | Vbr_mtrh
        | Vbr_max_indicator
      val set_vbr_mode :
        Lame_dynlink.Lame_t.encoder -> Lame_dynlink.Lame_t.vbr_mode -> unit
      val set_vbr_quality : Lame_dynlink.Lame_t.encoder -> int -> unit
      val set_vbr_mean_bitrate : Lame_dynlink.Lame_t.encoder -> int -> unit
      val set_vbr_min_bitrate : Lame_dynlink.Lame_t.encoder -> int -> unit
      val set_vbr_max_bitrate : Lame_dynlink.Lame_t.encoder -> int -> unit
      val set_vbr_hard_min : Lame_dynlink.Lame_t.encoder -> bool -> unit
      val set_brate : Lame_dynlink.Lame_t.encoder -> int -> unit
      val set_compression_ratio :
        Lame_dynlink.Lame_t.encoder -> float -> unit
      val set_private : Lame_dynlink.Lame_t.encoder -> bool -> unit
      val get_private : Lame_dynlink.Lame_t.encoder -> bool
      val set_copyright : Lame_dynlink.Lame_t.encoder -> bool -> unit
      val get_copyright : Lame_dynlink.Lame_t.encoder -> bool
      val set_original : Lame_dynlink.Lame_t.encoder -> bool -> unit
      val get_original : Lame_dynlink.Lame_t.encoder -> bool
      exception Init_params_failed
      val init_params : Lame_dynlink.Lame_t.encoder -> unit
      val init_bitstream : Lame_dynlink.Lame_t.encoder -> unit
      exception Init_params_not_called
      exception Psychoacoustic_problem
      exception Unknown_error of int
      val encode_buffer_part :
        Lame_dynlink.Lame_t.encoder -> string -> int -> int -> string
      val encode_buffer :
        Lame_dynlink.Lame_t.encoder -> string -> int -> string
      val encode_buffer_float_part :
        Lame_dynlink.Lame_t.encoder ->
        float array -> float array -> int -> int -> string
      val encode_buffer_float :
        Lame_dynlink.Lame_t.encoder ->
        float array -> float array -> int -> string
      val encode_flush : Lame_dynlink.Lame_t.encoder -> string
      val encode_flush_nogap : Lame_dynlink.Lame_t.encoder -> string
      module Id3tag :
        sig
          val init : Lame_dynlink.Lame_t.encoder -> unit
          val set_title : Lame_dynlink.Lame_t.encoder -> string -> unit
          val set_artist : Lame_dynlink.Lame_t.encoder -> string -> unit
          val set_album : Lame_dynlink.Lame_t.encoder -> string -> unit
          val set_year : Lame_dynlink.Lame_t.encoder -> string -> unit
          val set_comment : Lame_dynlink.Lame_t.encoder -> string -> unit
          val set_track : Lame_dynlink.Lame_t.encoder -> string -> unit
          val set_genre : Lame_dynlink.Lame_t.encoder -> string -> unit
        end
      type mpeg_version = Mpeg_1 | Mpeg_2 | Mpeg_2_5
      val get_version :
        Lame_dynlink.Lame_t.encoder -> Lame_dynlink.Lame_t.mpeg_version
      val get_encoder_delay : Lame_dynlink.Lame_t.encoder -> int
      val get_framesize : Lame_dynlink.Lame_t.encoder -> int
      val get_nb_samples_to_encode : Lame_dynlink.Lame_t.encoder -> int
      val get_nb_encoded_frames : Lame_dynlink.Lame_t.encoder -> int
      val get_nb_frames : Lame_dynlink.Lame_t.encoder -> int
    end
  type handler = {
    mutable lame_module : (module Lame_dynlink.Lame_t) option;
  }
  val handler : Lame_dynlink.handler
end