sig
  type t
  external createFromFile : filename:string -> SFMusic.t
    = "caml_sfMusic_CreateFromFile"
  external createFromMemory : data:string -> SFMusic.t
    = "caml_sfMusic_CreateFromMemory"
  external destroy : music:SFMusic.t -> unit = "caml_sfMusic_Destroy"
  external play : music:SFMusic.t -> unit = "caml_sfMusic_Play"
  external stop : music:SFMusic.t -> unit = "caml_sfMusic_Stop"
  external pause : music:SFMusic.t -> unit = "caml_sfMusic_Pause"
  external setLoop : music:SFMusic.t -> loop:bool -> unit
    = "caml_sfMusic_SetLoop"
  external setVolume : music:SFMusic.t -> volume:float -> unit
    = "caml_sfMusic_SetVolume"
  external getVolume : music:SFMusic.t -> float = "caml_sfMusic_GetVolume"
  external setPitch : music:SFMusic.t -> pitch:float -> unit
    = "caml_sfMusic_SetPitch"
  external setMinDistance : music:SFMusic.t -> minDistance:float -> unit
    = "caml_sfMusic_SetMinDistance"
  external setAttenuation : music:SFMusic.t -> attenuation:float -> unit
    = "caml_sfMusic_SetAttenuation"
  external setPosition :
    music:SFMusic.t -> x:float -> y:float -> z:float -> unit
    = "caml_sfMusic_SetPosition"
  external setRelativeToListener : music:SFMusic.t -> relative:bool -> unit
    = "caml_sfMusic_SetRelativeToListener"
  external getDuration : music:SFMusic.t -> float
    = "caml_sfMusic_GetDuration"
  external getSampleRate : music:SFMusic.t -> int
    = "caml_sfMusic_GetSampleRate"
  external getChannelsCount : music:SFMusic.t -> int
    = "caml_sfMusic_GetChannelsCount"
  external getPlayingOffset : music:SFMusic.t -> float
    = "caml_sfMusic_GetPlayingOffset"
  type sound_status = Stopped | Paused | Playing
  external getStatus : music:SFMusic.t -> SFMusic.sound_status
    = "caml_sfMusic_GetStatus"
end