sig
  exception Invalid_parameters
  exception Invalid_quality
  exception Invalid_bitrate
  exception Invalid_channels
  exception Invalid_sample_freq
  exception Invalid_argument
  exception Could_not_open_file
  exception Not_vorbis
  exception Bad_header
  exception Read_error
  exception Internal_fault
  exception Hole_in_data
  exception Bad_link
  exception Version_mismatch
  exception Not_implemented
  exception Unknown_error of int
  exception Utf8_failure of string
  type bitstream = int
  type info = {
    vorbis_version : int;
    audio_channels : int;
    audio_samplerate : int;
    bitrate_upper : int;
    bitrate_nominal : int;
    bitrate_lower : int;
    bitrate_window : int;
  }
  val tags :
    ?title:string ->
    ?artist:string ->
    ?genre:string ->
    ?date:string ->
    ?album:string ->
    ?tracknumber:string -> ?comment:string -> unit -> (string * string) list
  module Encoder :
    sig
      type t
      val create : int -> int -> int -> int -> int -> Vorbis.Encoder.t
      val create_vbr : int -> int -> float -> Vorbis.Encoder.t
      val reset : Vorbis.Encoder.t -> unit
      val headerout :
        Vorbis.Encoder.t -> Ogg.Stream.t -> (string * string) list -> unit
      val encode_buffer_float :
        Vorbis.Encoder.t ->
        Ogg.Stream.t -> float array array -> int -> int -> unit
      val end_of_stream : Vorbis.Encoder.t -> Ogg.Stream.t -> unit
    end
  module Decoder :
    sig
      type t
      val create :
        (int -> string * int) ->
        (int -> Unix.seek_command -> int) ->
        (unit -> unit) -> (unit -> int) -> Vorbis.Decoder.t
      val openfile : string -> Vorbis.Decoder.t
      val openfile_with_fd : string -> Vorbis.Decoder.t * Unix.file_descr
      val decode_float :
        Vorbis.Decoder.t -> float array array -> int -> int -> int
      val decode_float_alloc : Vorbis.Decoder.t -> int -> float array array
      val decode :
        Vorbis.Decoder.t ->
        ?big_endian:bool ->
        ?sample_size:int -> ?signed:bool -> string -> int -> int -> int
      val close : Vorbis.Decoder.t -> unit
      val streams : Vorbis.Decoder.t -> int
      val bitstream : Vorbis.Decoder.t -> Vorbis.bitstream
      val comments :
        Vorbis.Decoder.t ->
        Vorbis.bitstream -> string * (string * string) list
      val info : Vorbis.Decoder.t -> Vorbis.bitstream -> Vorbis.info
      val bitrate : Vorbis.Decoder.t -> Vorbis.bitstream -> int
      val samples : Vorbis.Decoder.t -> Vorbis.bitstream -> int
      val duration : Vorbis.Decoder.t -> Vorbis.bitstream -> float
      val serialnumber : Vorbis.Decoder.t -> Vorbis.bitstream -> int
    end
end