sig
  type 'a reference = 'a
  module Listener :
    sig
      val set_global_volume : float -> unit
      val get_global_volume : unit -> float
      val set_position : float -> float -> float -> unit
      val set_position_v : float * float * float -> unit
      val get_position : unit -> float * float * float
      val set_direction : float -> float -> float -> unit
      val set_direction_v : float * float * float -> unit
      val get_direction : unit -> float * float * float
    end
  type status = Stopped | Paused | Playing
  module SoundSource :
    sig
      type t
      val destroy : OcsfmlAudio.SoundSource.t -> unit
      val set_pitch : OcsfmlAudio.SoundSource.t -> float -> unit
      val set_volume : OcsfmlAudio.SoundSource.t -> float -> unit
      val set_position :
        OcsfmlAudio.SoundSource.t -> float -> float -> float -> unit
      val set_position_v :
        OcsfmlAudio.SoundSource.t -> float * float * float -> unit
      val set_relative_to_listener :
        OcsfmlAudio.SoundSource.t -> bool -> unit
      val set_min_distance : OcsfmlAudio.SoundSource.t -> float -> unit
      val set_attenuation : OcsfmlAudio.SoundSource.t -> float -> unit
      val get_pitch : OcsfmlAudio.SoundSource.t -> float
      val get_volume : OcsfmlAudio.SoundSource.t -> float
      val get_position : OcsfmlAudio.SoundSource.t -> float * float * float
      val is_relative_to_listener : OcsfmlAudio.SoundSource.t -> bool
      val get_min_distance : OcsfmlAudio.SoundSource.t -> float
      val get_attenuation : OcsfmlAudio.SoundSource.t -> float
    end
  class sound_source :
    ?pitch:float ->
    ?volume:float ->
    ?position:float * float * float ->
    ?relative_to_listener:bool ->
    ?min_distance:float ->
    ?attenuation:float ->
    OcsfmlAudio.SoundSource.t ->
    object
      val t_sound_source : OcsfmlAudio.SoundSource.t
      method destroy : unit
      method get_attenuation : float
      method get_min_distance : float
      method get_pitch : float
      method get_position : float * float * float
      method get_volume : float
      method is_relative_to_listener : bool
      method rep__sf_SoundSource : OcsfmlAudio.SoundSource.t
      method set_attenuation : float -> unit
      method set_min_distance : float -> unit
      method set_pitch : float -> unit
      method set_position : float -> float -> float -> unit
      method set_position_v : float * float * float -> unit
      method set_relative_to_listener : bool -> unit
      method set_volume : float -> unit
    end
  module SoundStream :
    sig
      type t
      val destroy : OcsfmlAudio.SoundStream.t -> unit
      val to_sound_source :
        OcsfmlAudio.SoundStream.t -> OcsfmlAudio.SoundSource.t
      val play : OcsfmlAudio.SoundStream.t -> unit
      val pause : OcsfmlAudio.SoundStream.t -> unit
      val stop : OcsfmlAudio.SoundStream.t -> unit
      val get_channel_count : OcsfmlAudio.SoundStream.t -> int
      val get_sample_rate : OcsfmlAudio.SoundStream.t -> int
      val get_status : OcsfmlAudio.SoundStream.t -> OcsfmlAudio.status
      val set_playing_offset :
        OcsfmlAudio.SoundStream.t -> OcsfmlSystem.Time.t -> unit
      val get_playing_offset :
        OcsfmlAudio.SoundStream.t -> OcsfmlSystem.Time.t
      val set_loop : OcsfmlAudio.SoundStream.t -> bool -> unit
      val get_loop : OcsfmlAudio.SoundStream.t -> bool
    end
  class sound_stream :
    ?pitch:float ->
    ?volume:float ->
    ?position:float * float * float ->
    ?relative_to_listener:bool ->
    ?min_distance:float ->
    ?attenuation:float ->
    ?playing_offset:OcsfmlSystem.Time.t ->
    ?loop:bool ->
    OcsfmlAudio.SoundStream.t ->
    object
      val t_sound_source : SoundSource.t
      val t_sound_stream : OcsfmlAudio.SoundStream.t
      method destroy : unit
      method get_attenuation : float
      method get_channel_count : int
      method get_loop : bool
      method get_min_distance : float
      method get_pitch : float
      method get_playing_offset : OcsfmlSystem.Time.t
      method get_position : float * float * float
      method get_sample_rate : int
      method get_status : OcsfmlAudio.status
      method get_volume : float
      method is_relative_to_listener : bool
      method pause : unit
      method play : unit
      method rep__sf_SoundSource : SoundSource.t
      method rep__sf_SoundStream : OcsfmlAudio.SoundStream.t
      method set_attenuation : float -> unit
      method set_loop : bool -> unit
      method set_min_distance : float -> unit
      method set_pitch : float -> unit
      method set_playing_offset : OcsfmlSystem.Time.t -> unit
      method set_position : float -> float -> float -> unit
      method set_position_v : float * float * float -> unit
      method set_relative_to_listener : bool -> unit
      method set_volume : float -> unit
      method stop : unit
    end
  module Music :
    sig
      type t
      val destroy : OcsfmlAudio.Music.t -> unit
      val to_sound_stream : OcsfmlAudio.Music.t -> OcsfmlAudio.SoundStream.t
      val default : unit -> OcsfmlAudio.Music.t
      val open_from_file : OcsfmlAudio.Music.t -> string -> bool
      val get_duration : OcsfmlAudio.Music.t -> OcsfmlSystem.Time.t
    end
  class music :
    ?pitch:float ->
    ?volume:float ->
    ?position:float * float * float ->
    ?relative_to_listener:bool ->
    ?min_distance:float ->
    ?attenuation:float ->
    ?playing_offset:OcsfmlSystem.Time.t ->
    ?loop:bool ->
    unit ->
    object
      val t_music_base : OcsfmlAudio.Music.t
      val t_sound_source : SoundSource.t
      val t_sound_stream : SoundStream.t
      method destroy : unit
      method get_attenuation : float
      method get_channel_count : int
      method get_duration : OcsfmlSystem.Time.t
      method get_loop : bool
      method get_min_distance : float
      method get_pitch : float
      method get_playing_offset : OcsfmlSystem.Time.t
      method get_position : float * float * float
      method get_sample_rate : int
      method get_status : status
      method get_volume : float
      method is_relative_to_listener : bool
      method open_from_file : string -> bool
      method pause : unit
      method play : unit
      method rep__sf_Music : OcsfmlAudio.Music.t
      method rep__sf_SoundSource : SoundSource.t
      method rep__sf_SoundStream : SoundStream.t
      method set_attenuation : float -> unit
      method set_loop : bool -> unit
      method set_min_distance : float -> unit
      method set_pitch : float -> unit
      method set_playing_offset : OcsfmlSystem.Time.t -> unit
      method set_position : float -> float -> float -> unit
      method set_position_v : float * float * float -> unit
      method set_relative_to_listener : bool -> unit
      method set_volume : float -> unit
      method stop : unit
    end
  type samples_type =
      (int, Bigarray.int16_signed_elt, Bigarray.c_layout) Bigarray.Array1.t
  module SoundBuffer :
    sig
      type t
      val destroy : OcsfmlAudio.SoundBuffer.t -> unit
      val default : unit -> OcsfmlAudio.SoundBuffer.t
      val copy : OcsfmlAudio.SoundBuffer.t -> OcsfmlAudio.SoundBuffer.t
      val affect :
        OcsfmlAudio.SoundBuffer.t ->
        OcsfmlAudio.SoundBuffer.t -> OcsfmlAudio.SoundBuffer.t
      val load_from_file : OcsfmlAudio.SoundBuffer.t -> string -> bool
      val load_from_stream :
        OcsfmlAudio.SoundBuffer.t -> OcsfmlSystem.input_stream -> bool
      val load_from_samples :
        OcsfmlAudio.SoundBuffer.t ->
        OcsfmlAudio.samples_type -> int -> int -> bool
      val save_to_file : OcsfmlAudio.SoundBuffer.t -> string -> bool
      val get_samples : OcsfmlAudio.SoundBuffer.t -> OcsfmlAudio.samples_type
      val get_sample_count : OcsfmlAudio.SoundBuffer.t -> int
      val get_sample_rate : OcsfmlAudio.SoundBuffer.t -> int
      val get_channel_count : OcsfmlAudio.SoundBuffer.t -> int
      val get_duration : OcsfmlAudio.SoundBuffer.t -> OcsfmlSystem.Time.t
    end
  class const_sound_buffer :
    [ `Copy of < rep__sf_SoundBuffer : OcsfmlAudio.SoundBuffer.t; .. >
    | `None ] ->
    object
      val t_sound_buffer_base : OcsfmlAudio.SoundBuffer.t
      method destroy : unit
      method get_channel_count : int
      method get_duration : OcsfmlSystem.Time.t
      method get_sample_count : int
      method get_sample_rate : int
      method get_samples : OcsfmlAudio.samples_type
      method rep__sf_SoundBuffer : OcsfmlAudio.SoundBuffer.t
      method save_to_file : string -> bool
    end
  class sound_buffer :
    [ `Copy of < rep__sf_SoundBuffer : OcsfmlAudio.SoundBuffer.t; .. >
    | `File of string
    | `None
    | `Samples of OcsfmlAudio.samples_type * int * int
    | `Stream of OcsfmlSystem.input_stream ] ->
    object
      val t_sound_buffer_base : OcsfmlAudio.SoundBuffer.t
      method affect : #OcsfmlAudio.const_sound_buffer -> unit
      method destroy : unit
      method get_channel_count : int
      method get_duration : OcsfmlSystem.Time.t
      method get_sample_count : int
      method get_sample_rate : int
      method get_samples : OcsfmlAudio.samples_type
      method load_from_file : string -> bool
      method load_from_samples :
        OcsfmlAudio.samples_type -> int -> int -> bool
      method load_from_stream : OcsfmlSystem.input_stream -> bool
      method rep__sf_SoundBuffer : OcsfmlAudio.SoundBuffer.t
      method save_to_file : string -> bool
    end
  module SoundRecorder :
    sig
      type t
      val destroy : OcsfmlAudio.SoundRecorder.t -> unit
      val start :
        OcsfmlAudio.SoundRecorder.t -> ?sampleRate:int -> unit -> unit
      val stop : OcsfmlAudio.SoundRecorder.t -> unit
      val get_sample_rate : OcsfmlAudio.SoundRecorder.t -> int
      val is_available : unit -> bool
    end
  class sound_recorder :
    OcsfmlAudio.SoundRecorder.t ->
    object
      val t_sound_recorder : OcsfmlAudio.SoundRecorder.t
      method destroy : unit
      method get_sample_rate : int
      method rep__sf_SoundRecorder : OcsfmlAudio.SoundRecorder.t
      method start : ?sampleRate:int -> unit -> unit
      method stop : unit
    end
  module SoundBufferRecorder :
    sig
      type t
      val destroy : OcsfmlAudio.SoundBufferRecorder.t -> unit
      val to_sound_recorder :
        OcsfmlAudio.SoundBufferRecorder.t -> OcsfmlAudio.SoundRecorder.t
      val default : unit -> OcsfmlAudio.SoundBufferRecorder.t
      val get_buffer :
        OcsfmlAudio.SoundBufferRecorder.t -> OcsfmlAudio.SoundBuffer.t
    end
  class sound_buffer_recorder :
    object
      val t_sound_buffer_recorder_base : OcsfmlAudio.SoundBufferRecorder.t
      val t_sound_recorder : SoundRecorder.t
      method destroy : unit
      method get_buffer :
        OcsfmlAudio.const_sound_buffer OcsfmlAudio.reference
      method get_sample_rate : int
      method rep__sf_SoundBufferRecorder : OcsfmlAudio.SoundBufferRecorder.t
      method rep__sf_SoundRecorder : SoundRecorder.t
      method start : ?sampleRate:int -> unit -> unit
      method stop : unit
    end
  module Sound :
    sig
      type t
      val destroy : OcsfmlAudio.Sound.t -> unit
      val to_sound_source : OcsfmlAudio.Sound.t -> OcsfmlAudio.SoundSource.t
      val default : unit -> OcsfmlAudio.Sound.t
      val create_from_sound_buffer :
        OcsfmlAudio.SoundBuffer.t -> OcsfmlAudio.Sound.t
      val play : OcsfmlAudio.Sound.t -> unit
      val pause : OcsfmlAudio.Sound.t -> unit
      val stop : OcsfmlAudio.Sound.t -> unit
      val set_buffer :
        OcsfmlAudio.Sound.t -> OcsfmlAudio.SoundBuffer.t -> unit
      val set_loop : OcsfmlAudio.Sound.t -> bool -> unit
      val set_playing_offset :
        OcsfmlAudio.Sound.t -> OcsfmlSystem.Time.t -> unit
      val get_buffer : OcsfmlAudio.Sound.t -> OcsfmlAudio.SoundBuffer.t
      val get_loop : OcsfmlAudio.Sound.t -> bool
      val get_playing_offset : OcsfmlAudio.Sound.t -> OcsfmlSystem.Time.t
      val get_status : OcsfmlAudio.Sound.t -> OcsfmlAudio.status
    end
  class sound :
    ?pitch:float ->
    ?volume:float ->
    ?position:float * float * float ->
    ?relative_to_listener:bool ->
    ?min_distance:float ->
    ?attenuation:float ->
    ?loop:bool ->
    ?buffer:OcsfmlAudio.sound_buffer ->
    ?playing_offset:OcsfmlSystem.Time.t ->
    unit ->
    object
      val t_sound_base : OcsfmlAudio.Sound.t
      val t_sound_source : SoundSource.t
      method destroy : unit
      method get_attenuation : float
      method get_buffer :
        OcsfmlAudio.const_sound_buffer OcsfmlAudio.reference
      method get_loop : bool
      method get_min_distance : float
      method get_pitch : float
      method get_playing_offset : OcsfmlSystem.Time.t
      method get_position : float * float * float
      method get_status : OcsfmlAudio.status
      method get_volume : float
      method is_relative_to_listener : bool
      method pause : unit
      method play : unit
      method rep__sf_Sound : OcsfmlAudio.Sound.t
      method rep__sf_SoundSource : SoundSource.t
      method set_attenuation : float -> unit
      method set_buffer : OcsfmlAudio.sound_buffer -> unit
      method set_loop : bool -> unit
      method set_min_distance : float -> unit
      method set_pitch : float -> unit
      method set_playing_offset : OcsfmlSystem.Time.t -> unit
      method set_position : float -> float -> float -> unit
      method set_position_v : float * float * float -> unit
      method set_relative_to_listener : bool -> unit
      method set_volume : float -> unit
      method stop : unit
    end
end