sig
  exception SDLmixer_exception of string
  val version : unit -> Sdl.version
  type format =
      AUDIO_FORMAT_U8
    | AUDIO_FORMAT_S8
    | AUDIO_FORMAT_U16LSB
    | AUDIO_FORMAT_S16LSB
    | AUDIO_FORMAT_U16MSB
    | AUDIO_FORMAT_S16MSB
    | AUDIO_FORMAT_U16SYS
    | AUDIO_FORMAT_S16SYS
  type channels = MONO | STEREO
  val open_audio :
    ?freq:int ->
    ?format:Sdlmixer.format ->
    ?chunksize:int -> ?channels:Sdlmixer.channels -> unit -> unit
  val close_audio : unit -> unit
  type specs = {
    frequency : int;
    format : Sdlmixer.format;
    channels : Sdlmixer.channels;
  }
  val query_specs : unit -> Sdlmixer.specs
  type chunk
  val loadWAV : string -> Sdlmixer.chunk
  val loadWAV_from_mem : string -> Sdlmixer.chunk
  val load_string : string -> Sdlmixer.chunk
  val load_string_raw : string -> Sdlmixer.chunk
  val volume_chunk : Sdlmixer.chunk -> float
  val setvolume_chunk : Sdlmixer.chunk -> float -> unit
  val free_chunk : Sdlmixer.chunk -> unit
  type channel = int
  val all_channels : Sdlmixer.channel
  val num_channels : unit -> int
  val allocate_channels : int -> int
  val play_channel :
    ?channel:Sdlmixer.channel ->
    ?loops:int -> ?ticks:float -> Sdlmixer.chunk -> unit
  val play_sound : Sdlmixer.chunk -> unit
  val fadein_channel :
    ?channel:Sdlmixer.channel ->
    ?loops:int -> ?ticks:float -> Sdlmixer.chunk -> float -> unit
  val volume_channel : Sdlmixer.channel -> float
  val setvolume_channel : Sdlmixer.channel -> float -> unit
  val pause_channel : Sdlmixer.channel -> unit
  val resume_channel : Sdlmixer.channel -> unit
  val halt_channel : Sdlmixer.channel -> unit
  val expire_channel : Sdlmixer.channel -> float option -> unit
  val fadeout_channel : Sdlmixer.channel -> float -> unit
  val playing_channel : Sdlmixer.channel -> bool
  val num_playing_channel : unit -> int
  val paused_channel : Sdlmixer.channel -> bool
  val num_paused_channel : unit -> int
  type fade_status = NO_FADING | FADING_OUT | FADING_IN
  val fading_channel : Sdlmixer.channel -> Sdlmixer.fade_status
  type group = int
  val default_group : Sdlmixer.group
  val reserve_channels : int -> int
  val group_channel : Sdlmixer.channel -> Sdlmixer.group -> unit
  val group_channels :
    from_c:Sdlmixer.channel ->
    to_c:Sdlmixer.channel -> Sdlmixer.group -> unit
  val group_count : Sdlmixer.group -> int
  val group_available : Sdlmixer.group -> Sdlmixer.channel
  val group_oldest : Sdlmixer.group -> Sdlmixer.channel
  val group_newer : Sdlmixer.group -> Sdlmixer.channel
  val fadeout_group : Sdlmixer.group -> float -> unit
  val halt_group : Sdlmixer.group -> unit
  type music
  type music_kind = NONE | CMD | WAV | MOD | MID | OGG | MP3
  val load_music : string -> Sdlmixer.music
  val free_music : Sdlmixer.music -> unit
  val play_music : ?loops:int -> Sdlmixer.music -> unit
  val fadein_music : ?loops:int -> Sdlmixer.music -> float -> unit
  val volume_music : unit -> float
  val setvolume_music : float -> unit
  val pause_music : unit -> unit
  val resume_music : unit -> unit
  val rewind_music : unit -> unit
  val set_music_cmd : string -> unit
  val unset_music_cmd : unit -> unit
  val halt_music : unit -> unit
  val fadeout_music : float -> unit
  val music_type : Sdlmixer.music option -> Sdlmixer.music_kind
  val playing_music : unit -> bool
  val paused_music : unit -> bool
  val fading_music : unit -> Sdlmixer.fade_status
end