sig
  type sample_type = U8 | S8 | U16 | S16 | U16LSB | S16LSB | U16MSB | S16MSB
  type audio_status = STOPPED | PAUSED | PLAYING | UNKNOWN
  type channel_type = MONO | STEREO
  type audio_spec = {
    frequency : int;
    format : Sdl.Audio.sample_type;
    channels : Sdl.Audio.channel_type;
    silence : int;
    samples : int;
    size : int;
  }
  val mix_maxvolume : int
  val open_audio :
    Sdl.Audio.audio_spec -> (Sdl.byte_array -> unit) -> Sdl.Audio.audio_spec
  val close_audio : unit -> unit
  val load_wav : string -> Sdl.Audio.audio_spec * Sdl.byte_array
  val free_wav : Sdl.byte_array -> unit
  val pause_audio : bool -> unit
  val lock_audio : unit -> unit
  val unlock_audio : unit -> unit
  val mix_audio : Sdl.byte_array -> Sdl.byte_array -> int -> unit
  val get_audio_status : unit -> Sdl.Audio.audio_status
  val convert_audio :
    Sdl.Audio.sample_type ->
    Sdl.Audio.channel_type ->
    int ->
    Sdl.Audio.sample_type ->
    Sdl.Audio.channel_type -> int -> Sdl.byte_array -> Sdl.byte_array
  val fx_pan : float -> float -> Sdl.byte_array -> Sdl.byte_array
  val fx_shift : float -> Sdl.byte_array -> Sdl.byte_array
end