sig
  type t
  type sound_status = Stopped | Paused | Playing
  val create : unit -> SFSound.t
  val copy : sound:SFSound.t -> SFSound.t
  val setBuffer : sound:SFSound.t -> buffer:SFSoundBuffer.t -> unit
  val play : sound:SFSound.t -> unit
  val pause : sound:SFSound.t -> unit
  val stop : sound:SFSound.t -> unit
  val setLoop : sound:SFSound.t -> loop:bool -> unit
  val getLoop : sound:SFSound.t -> bool
  val getStatus : sound:SFSound.t -> SFSound.sound_status
  val setPitch : sound:SFSound.t -> pitch:float -> unit
  val setVolume : sound:SFSound.t -> volume:float -> unit
  val setPosition : sound:SFSound.t -> pos:float * float * float -> unit
  val setPosition3 : sound:SFSound.t -> x:float -> y:float -> z:float -> unit
  val setRelativeToListener : sound:SFSound.t -> relative:bool -> unit
  val setMinDistance : sound:SFSound.t -> minDistance:float -> unit
  val setAttenuation : sound:SFSound.t -> attenuation:float -> unit
  val setPlayingOffset : sound:SFSound.t -> timeOffset:SFTime.t -> unit
  val getPlayingOffset : sound:SFSound.t -> SFTime.t
  val getPitch : sound:SFSound.t -> float
  val getVolume : sound:SFSound.t -> float
  val isRelativeToListener : sound:SFSound.t -> bool
  val getPosition : sound:SFSound.t -> float * float * float
  val getMinDistance : sound:SFSound.t -> float
  val getAttenuation : sound:SFSound.t -> float
end