sig
  type t
  type format =
      AUDIO_U8
    | AUDIO_S8
    | AUDIO_U16LSB
    | AUDIO_S16LSB
    | AUDIO_U16MSB
    | AUDIO_S16MSB
    | AUDIO_U16
    | AUDIO_S16
    | AUDIO_S32LSB
    | AUDIO_S32MSB
    | AUDIO_S32
    | AUDIO_F32LSB
    | AUDIO_F32MSB
    | AUDIO_F32
    | AUDIO_U16SYS
    | AUDIO_S16SYS
    | AUDIO_S32SYS
    | AUDIO_F32SYS
  external get_drivers : unit -> string array = "caml_SDL_GetAudioDrivers"
  external init : driver_name:string -> unit = "caml_SDL_AudioInit"
  external quit : unit -> unit = "caml_SDL_AudioQuit"
  external get_current_driver : unit -> string
    = "caml_SDL_GetCurrentAudioDriver"
  type status = Stopped | Playing | Paused
  external get_status : unit -> Sdlaudio.status = "caml_SDL_GetAudioStatus"
  val string_of_status : Sdlaudio.status -> string
  external pause : pause_on:bool -> unit = "caml_SDL_PauseAudio"
  external lock : unit -> unit = "caml_SDL_LockAudio"
  external unlock : unit -> unit = "caml_SDL_UnlockAudio"
  external close : unit -> unit = "caml_SDL_CloseAudio"
  type audio_spec
  external new_audio_spec : unit -> Sdlaudio.audio_spec
    = "caml_SDL_alloc_audio_spec"
  external free_audio_spec : Sdlaudio.audio_spec -> unit
    = "caml_SDL_free_audio_spec"
  type audio_buffer
  external load_wav :
    filename:string ->
    spec:Sdlaudio.audio_spec -> Sdlaudio.audio_buffer * int32
    = "caml_SDL_LoadWAV"
  external free_wav : Sdlaudio.audio_buffer -> unit = "caml_SDL_FreeWAV"
  type audio_device_id
  external open_audio_device_simple :
    Sdlaudio.audio_spec -> Sdlaudio.audio_device_id
    = "caml_SDL_OpenAudioDevice_simple"
  external queue_audio :
    Sdlaudio.audio_device_id -> Sdlaudio.audio_buffer -> int32 -> unit
    = "caml_SDL_QueueAudio"
  external unpause_audio_device : Sdlaudio.audio_device_id -> unit
    = "caml_SDL_UnpauseAudioDevice"
  external pause_audio_device : Sdlaudio.audio_device_id -> unit
    = "caml_SDL_PauseAudioDevice"
  external close_audio_device : Sdlaudio.audio_device_id -> unit
    = "caml_SDL_CloseAudioDevice"
end