Class: SFML::Music

Inherits:
Object
  • Object
show all
Defined in:
lib/sfml/audio/music.rb

Overview

A streamed audio source. Use this for long tracks (background music) so the file isn’t loaded into memory all at once.

bgm = SFML::Music.load("assets/track.ogg", looping: true, volume: 60)
bgm.play

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.load(path, **opts) ⇒ Object

Raises:



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/sfml/audio/music.rb', line 8

def self.load(path, **opts)
  ptr = C::Audio.sfMusic_createFromFile(path.to_s)
  raise Error, "Could not load music from #{path.inspect}" if ptr.null?

  m = allocate
  m.send(:_take_ownership, ptr)
  m.instance_variable_set(:@looping, false)
  m.volume  = opts[:volume]  if opts.key?(:volume)
  m.pitch   = opts[:pitch]   if opts.key?(:pitch)
  m.looping = opts[:looping] if opts.key?(:looping)
  m
end

Instance Method Details

#attenuationObject



64
# File 'lib/sfml/audio/music.rb', line 64

def attenuation = C::Audio.sfMusic_getAttenuation(@handle)

#attenuation=(value) ⇒ Object



66
67
68
# File 'lib/sfml/audio/music.rb', line 66

def attenuation=(value)
  C::Audio.sfMusic_setAttenuation(@handle, value.to_f)
end

#durationObject



30
# File 'lib/sfml/audio/music.rb', line 30

def duration = Time.from_native(C::Audio.sfMusic_getDuration(@handle))

#looping=(value) ⇒ Object



37
38
39
40
# File 'lib/sfml/audio/music.rb', line 37

def looping=(value)
  @looping = value ? true : false
  C::Audio.sfMusic_setLooping(@handle, @looping)
end

#looping?Boolean

Cached on the Ruby side; see Sound#looping? for the why.

Returns:

  • (Boolean)


33
34
35
# File 'lib/sfml/audio/music.rb', line 33

def looping?
  @looping
end

#min_distanceObject



70
# File 'lib/sfml/audio/music.rb', line 70

def min_distance = C::Audio.sfMusic_getMinDistance(@handle)

#min_distance=(value) ⇒ Object



72
73
74
# File 'lib/sfml/audio/music.rb', line 72

def min_distance=(value)
  C::Audio.sfMusic_setMinDistance(@handle, value.to_f)
end

#pauseObject



22
# File 'lib/sfml/audio/music.rb', line 22

def pause  = C::Audio.sfMusic_pause(@handle)

#paused?Boolean

Returns:

  • (Boolean)


27
# File 'lib/sfml/audio/music.rb', line 27

def paused?  = status == :paused

#pitchObject



48
# File 'lib/sfml/audio/music.rb', line 48

def pitch = C::Audio.sfMusic_getPitch(@handle)

#pitch=(value) ⇒ Object



50
51
52
# File 'lib/sfml/audio/music.rb', line 50

def pitch=(value)
  C::Audio.sfMusic_setPitch(@handle, value.to_f)
end

#playObject



21
# File 'lib/sfml/audio/music.rb', line 21

def play   = C::Audio.sfMusic_play(@handle)

#playing?Boolean

Returns:

  • (Boolean)


26
# File 'lib/sfml/audio/music.rb', line 26

def playing? = status == :playing

#positionObject

3D positional audio — see SFML::Sound for the why.



55
56
57
# File 'lib/sfml/audio/music.rb', line 55

def position
  Vector3.from_native(C::Audio.sfMusic_getPosition(@handle))
end

#position=(value) ⇒ Object



59
60
61
62
# File 'lib/sfml/audio/music.rb', line 59

def position=(value)
  vec = value.is_a?(Vector3) ? value : Vector3.new(*value)
  C::Audio.sfMusic_setPosition(@handle, vec.to_native_f)
end

#relative_to_listener=(value) ⇒ Object



78
79
80
# File 'lib/sfml/audio/music.rb', line 78

def relative_to_listener=(value)
  C::Audio.sfMusic_setRelativeToListener(@handle, value ? true : false)
end

#relative_to_listener?Boolean

Returns:

  • (Boolean)


76
# File 'lib/sfml/audio/music.rb', line 76

def relative_to_listener? = C::Audio.sfMusic_isRelativeToListener(@handle)

#statusObject



25
# File 'lib/sfml/audio/music.rb', line 25

def status   = C::Audio::STATUSES[C::Audio.sfMusic_getStatus(@handle)]

#stopObject



23
# File 'lib/sfml/audio/music.rb', line 23

def stop   = C::Audio.sfMusic_stop(@handle)

#stopped?Boolean

Returns:

  • (Boolean)


28
# File 'lib/sfml/audio/music.rb', line 28

def stopped? = status == :stopped

#volumeObject



42
# File 'lib/sfml/audio/music.rb', line 42

def volume = C::Audio.sfMusic_getVolume(@handle)

#volume=(value) ⇒ Object



44
45
46
# File 'lib/sfml/audio/music.rb', line 44

def volume=(value)
  C::Audio.sfMusic_setVolume(@handle, value.to_f)
end