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



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

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

#attenuation=(value) ⇒ Object



130
131
132
# File 'lib/sfml/audio/music.rb', line 130

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

#coneObject



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

def cone
  SoundCone.from_native(C::Audio.sfMusic_getCone(@handle))
end

#cone=(value) ⇒ Object



79
80
81
82
83
84
85
86
87
88
# File 'lib/sfml/audio/music.rb', line 79

def cone=(value)
  cone =
    case value
    when SoundCone then value
    when Hash      then SoundCone.new(**value)
    else
      raise ArgumentError, "Music#cone= expects SoundCone or Hash; got #{value.class}"
    end
  C::Audio.sfMusic_setCone(@handle, cone.to_native)
end

#directionObject



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

def direction
  v = C::Audio.sfMusic_getDirection(@handle)
  Vector3.new(v[:x], v[:y], v[:z])
end

#direction=(value) ⇒ Object



68
69
70
71
72
73
# File 'lib/sfml/audio/music.rb', line 68

def direction=(value)
  vec = value.is_a?(Vector3) ? value : Vector3.new(*value)
  packed = C::System::Vector3f.new
  packed[:x] = vec.x.to_f; packed[:y] = vec.y.to_f; packed[:z] = vec.z.to_f
  C::Audio.sfMusic_setDirection(@handle, packed)
end

#doppler_factorObject



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

def doppler_factor    = C::Audio.sfMusic_getDopplerFactor(@handle)

#doppler_factor=(v) ⇒ Object



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

def doppler_factor=(v) C::Audio.sfMusic_setDopplerFactor(@handle, v.to_f); end

#durationObject



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

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

#effect_processor=(callable) ⇒ Object

See Sound#effect_processor= — same audio-thread DSP callback.



91
92
93
94
# File 'lib/sfml/audio/music.rb', line 91

def effect_processor=(callable)
  @effect_cb = callable.nil? ? nil : Audio._build_effect_processor(callable)
  C::Audio.sfMusic_setEffectProcessor(@handle, @effect_cb, nil)
end

#looping=(value) ⇒ Object



101
102
103
104
# File 'lib/sfml/audio/music.rb', line 101

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)


97
98
99
# File 'lib/sfml/audio/music.rb', line 97

def looping?
  @looping
end

#min_distanceObject



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

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

#min_distance=(value) ⇒ Object



136
137
138
# File 'lib/sfml/audio/music.rb', line 136

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



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

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

#pitch=(value) ⇒ Object



114
115
116
# File 'lib/sfml/audio/music.rb', line 114

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

#playing_offsetObject

Current playback head as a SFML::Time. Reads from the underlying OpenAL source — only meaningful while the music is playing or paused (not after #stop).



35
36
37
# File 'lib/sfml/audio/music.rb', line 35

def playing_offset
  Time.from_native(C::Audio.sfMusic_getPlayingOffset(@handle))
end

#playing_offset=(value) ⇒ Object

Seek to ‘value` (a SFML::Time, or seconds as a Numeric). Works while the music is playing, paused, or stopped.



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

def playing_offset=(value)
  t = value.is_a?(Time) ? value : Time.seconds(value.to_f)
  C::Audio.sfMusic_setPlayingOffset(@handle, t.to_native)
end

#positionObject

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



119
120
121
# File 'lib/sfml/audio/music.rb', line 119

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

#position=(value) ⇒ Object



123
124
125
126
# File 'lib/sfml/audio/music.rb', line 123

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



142
143
144
# File 'lib/sfml/audio/music.rb', line 142

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

#relative_to_listener?Boolean

Returns:

  • (Boolean)


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

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

#velocityObject

3D velocity, Doppler factor, direction, cone — see Sound for the same methods on the simpler buffered source.



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

def velocity
  v = C::Audio.sfMusic_getVelocity(@handle)
  Vector3.new(v[:x], v[:y], v[:z])
end

#velocity=(value) ⇒ Object



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

def velocity=(value)
  vec = value.is_a?(Vector3) ? value : Vector3.new(*value)
  packed = C::System::Vector3f.new
  packed[:x] = vec.x.to_f; packed[:y] = vec.y.to_f; packed[:z] = vec.z.to_f
  C::Audio.sfMusic_setVelocity(@handle, packed)
end

#volumeObject



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

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

#volume=(value) ⇒ Object



108
109
110
# File 'lib/sfml/audio/music.rb', line 108

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