sig
  type application = [ `Audio | `Restricted_lowdelay | `Voip ]
  type bitrate = [ `Auto | `Bitrate of int | `Bitrate_max ]
  type mode = VBR of bool | CBR
  type max_bandwidth =
      [ `Full_band
      | `Medium_band
      | `Narrow_band
      | `Super_wide_band
      | `Wide_band ]
  type signal = [ `Auto | `Music | `Voice ]
  type t = {
    application : Encoder.Opus.application option;
    bitrate : Encoder.Opus.bitrate;
    complexity : int option;
    channels : int;
    frame_size : float;
    max_bandwidth : Encoder.Opus.max_bandwidth option;
    mode : Encoder.Opus.mode;
    samplerate : int;
    signal : Encoder.Opus.signal option;
    fill : int option;
  }
  val string_of_bitrate :
    [< `Auto | `Bitrate of int | `Bitrate_max ] -> string
  val string_of_mode : Encoder.Opus.mode -> string
  val string_of_application :
    [< `Audio | `Restricted_lowdelay | `Voip ] option -> string
  val string_of_bandwidth :
    [< `Full_band
     | `Medium_band
     | `Narrow_band
     | `Super_wide_band
     | `Wide_band ]
    option -> string
  val string_of_signal : [< `Auto | `Music | `Voice ] option -> string
  val to_string : Encoder.Opus.t -> string
end