sig
  type open_mode_t = READ | WRITE | RDWR
  type seek_mode_t = SEEK_SET | SEEK_CUR | SEEL_END
  type major_format_t =
      MAJOR_NONE
    | MAJOR_WAV
    | MAJOR_AIFF
    | MAJOR_AU
    | MAJOR_RAW
    | MAJOR_PAF
    | MAJOR_SVX
    | MAJOR_NIST
    | MAJOR_VOC
    | MAJOR_IRCAM
    | MAJOR_W64
    | MAJOR_MAT4
    | MAJOR_MAT5
    | MAJOR_PVF
    | MAJOR_XI
    | MAJOR_HTK
    | MAJOR_SDS
    | MAJOR_AVR
    | MAJOR_WAVEX
    | MAJOR_SD2
    | MAJOR_FLAC
    | MAJOR_CAF
  type minor_format_t =
      MINOR_NONE
    | MINOR_PCM_S8
    | MINOR_PCM_16
    | MINOR_PCM_24
    | MINOR_PCM_32
    | MINOR_PCM_U8
    | MINOR_FLOAT
    | MINOR_DOUBLE
    | MINOR_ULAW
    | MINOR_ALAW
    | MINOR_IMA_ADPCM
    | MINOR_MS_ADPCM
    | MINOR_GSM610
    | MINOR_VOX_ADPCM
    | MINOR_G721_32
    | MINOR_G723_24
    | MINOR_G723_40
    | MINOR_DWVW_12
    | MINOR_DWVW_16
    | MINOR_DWVW_24
    | MINOR_DWVW_N
    | MINOR_DPCM_8
    | MINOR_DPCM_16
  type endianness_t = ENDIAN_FILE | ENDIAN_LITTLE | ENDIAN_BIG | ENDIAN_CPU
  type file_format_t
  type t
  val format :
    Sndfile.major_format_t -> Sndfile.minor_format_t -> Sndfile.file_format_t
  val format_e :
    Sndfile.major_format_t ->
    Sndfile.minor_format_t -> Sndfile.endianness_t -> Sndfile.file_format_t
  val openfile :
    string ->
    ?info:Sndfile.open_mode_t * Sndfile.file_format_t * int * int ->
    unit -> Sndfile.t
  val close : Sndfile.t -> unit
  val error : Sndfile.t -> int
  val strerror : Sndfile.t -> string
  val read : Sndfile.t -> float array -> int
  val write : Sndfile.t -> float array -> int
  val frames : Sndfile.t -> Int64.t
  val samplerate : Sndfile.t -> int
  val channels : Sndfile.t -> int
  val seek : Sndfile.t -> Int64.t -> Sndfile.seek_mode_t -> Int64.t
  val compare : Sndfile.t -> Sndfile.t -> int
end