fmod 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/HISTORY.txt +23 -1
- data/README.md +1 -3
- data/Rakefile +2 -1
- data/bin/console +1 -0
- data/fmod.gemspec +1 -2
- data/lib/fmod/channel_control.rb +47 -0
- data/lib/fmod/core.rb +1 -0
- data/lib/fmod/core/bool_description.rb +9 -4
- data/lib/fmod/core/channel_mask.rb +61 -0
- data/lib/fmod/core/data_description.rb +44 -0
- data/lib/fmod/core/dsp_description.rb +172 -1
- data/lib/fmod/core/dsp_index.rb +13 -0
- data/lib/fmod/core/dsp_type.rb +154 -0
- data/lib/fmod/core/extensions.rb +19 -0
- data/lib/fmod/core/file_system.rb +1 -0
- data/lib/fmod/core/filter_type.rb +62 -0
- data/lib/fmod/core/float_description.rb +38 -0
- data/lib/fmod/core/guid.rb +27 -0
- data/lib/fmod/core/init_flags.rb +66 -0
- data/lib/fmod/core/integer_description.rb +22 -2
- data/lib/fmod/core/output_type.rb +81 -2
- data/lib/fmod/core/parameter_info.rb +36 -0
- data/lib/fmod/core/parameter_type.rb +15 -0
- data/lib/fmod/core/reverb.rb +113 -2
- data/lib/fmod/core/reverb_index.rb +105 -0
- data/lib/fmod/core/sound_ex_info.rb +4 -0
- data/lib/fmod/core/sound_group_behavior.rb +14 -0
- data/lib/fmod/core/sound_type.rb +1 -0
- data/lib/fmod/core/spectrum_data.rb +35 -0
- data/lib/fmod/core/structures.rb +10 -4
- data/lib/fmod/core/tag.rb +72 -11
- data/lib/fmod/core/tag_data_type.rb +30 -0
- data/lib/fmod/core/tag_type.rb +55 -0
- data/lib/fmod/core/time_unit.rb +3 -0
- data/lib/fmod/core/vector.rb +40 -3
- data/lib/fmod/core/window_type.rb +46 -0
- data/lib/fmod/dsp.rb +427 -98
- data/lib/fmod/dsp_connection.rb +3 -0
- data/lib/fmod/effects.rb +51 -37
- data/lib/fmod/error.rb +3 -0
- data/lib/fmod/geometry.rb +7 -0
- data/lib/fmod/handle.rb +82 -0
- data/lib/fmod/reverb3D.rb +25 -26
- data/lib/fmod/sound.rb +21 -1
- data/lib/fmod/sound_group.rb +79 -3
- data/lib/fmod/system.rb +301 -154
- data/lib/fmod/version.rb +4 -1
- metadata +6 -3
data/lib/fmod/dsp_connection.rb
CHANGED
data/lib/fmod/effects.rb
CHANGED
@@ -1,38 +1,52 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
require_relative 'effects/
|
9
|
-
require_relative 'effects/
|
10
|
-
require_relative 'effects/
|
11
|
-
require_relative 'effects/
|
12
|
-
require_relative 'effects/
|
13
|
-
require_relative 'effects/
|
14
|
-
require_relative 'effects/
|
15
|
-
require_relative 'effects/
|
16
|
-
require_relative 'effects/
|
17
|
-
require_relative 'effects/
|
18
|
-
require_relative 'effects/
|
19
|
-
require_relative 'effects/
|
20
|
-
require_relative 'effects/
|
21
|
-
require_relative 'effects/
|
22
|
-
require_relative 'effects/
|
23
|
-
require_relative 'effects/
|
24
|
-
require_relative 'effects/
|
25
|
-
require_relative 'effects/
|
26
|
-
require_relative 'effects/
|
27
|
-
require_relative 'effects/
|
28
|
-
require_relative 'effects/
|
29
|
-
require_relative 'effects/
|
30
|
-
require_relative 'effects/
|
31
|
-
require_relative 'effects/
|
32
|
-
require_relative 'effects/
|
33
|
-
require_relative 'effects/
|
34
|
-
require_relative 'effects/
|
35
|
-
require_relative 'effects/
|
36
|
-
require_relative 'effects/
|
37
|
-
require_relative 'effects/
|
38
|
-
require_relative 'effects/
|
2
|
+
module FMOD
|
3
|
+
|
4
|
+
##
|
5
|
+
# Namespace containing all of the built-in DSP effects.
|
6
|
+
module Effects
|
7
|
+
|
8
|
+
require_relative 'effects/channel_mix.rb'
|
9
|
+
require_relative 'effects/chorus.rb'
|
10
|
+
require_relative 'effects/compressor.rb'
|
11
|
+
require_relative 'effects/convolution_reverb.rb'
|
12
|
+
require_relative 'effects/delay.rb'
|
13
|
+
require_relative 'effects/distortion.rb'
|
14
|
+
require_relative 'effects/dsps.rb'
|
15
|
+
require_relative 'effects/echo.rb'
|
16
|
+
require_relative 'effects/envelope_follower.rb'
|
17
|
+
require_relative 'effects/fader.rb'
|
18
|
+
require_relative 'effects/fft.rb'
|
19
|
+
require_relative 'effects/flange.rb'
|
20
|
+
require_relative 'effects/high_pass.rb'
|
21
|
+
require_relative 'effects/high_pass_simple.rb'
|
22
|
+
require_relative 'effects/it_echo.rb'
|
23
|
+
require_relative 'effects/it_lowpass.rb'
|
24
|
+
require_relative 'effects/ladspa_plugin.rb'
|
25
|
+
require_relative 'effects/limiter.rb'
|
26
|
+
require_relative 'effects/loudness_meter.rb'
|
27
|
+
require_relative 'effects/low_pass.rb'
|
28
|
+
require_relative 'effects/low_pass_simple.rb'
|
29
|
+
require_relative 'effects/mixer.rb'
|
30
|
+
require_relative 'effects/multiband_eq.rb'
|
31
|
+
require_relative 'effects/normalize.rb'
|
32
|
+
require_relative 'effects/object_pan.rb'
|
33
|
+
require_relative 'effects/oscillator.rb'
|
34
|
+
require_relative 'effects/pan.rb'
|
35
|
+
require_relative 'effects/param_eq.rb'
|
36
|
+
require_relative 'effects/pitch_shift.rb'
|
37
|
+
require_relative 'effects/return.rb'
|
38
|
+
require_relative 'effects/send.rb'
|
39
|
+
require_relative 'effects/sfx_reverb.rb'
|
40
|
+
require_relative 'effects/three_eq.rb'
|
41
|
+
require_relative 'effects/transceiver.rb'
|
42
|
+
require_relative 'effects/tremolo.rb'
|
43
|
+
require_relative 'effects/vst_plugin.rb'
|
44
|
+
require_relative 'effects/winamp_plugin.rb'
|
45
|
+
|
46
|
+
deprecate_constant :HighPass
|
47
|
+
deprecate_constant :HighPassSimple
|
48
|
+
deprecate_constant :LowPass
|
49
|
+
deprecate_constant :LowPassSimple
|
50
|
+
deprecate_constant :LadspaPlugin
|
51
|
+
end
|
52
|
+
end
|
data/lib/fmod/error.rb
CHANGED
data/lib/fmod/geometry.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
|
2
2
|
module FMOD
|
3
|
+
|
4
|
+
##
|
5
|
+
# FMOD supports the supply of polygon mesh data, that can be processed in
|
6
|
+
# realtime to create the effect of occlusion in a real 3D world. In real world
|
7
|
+
# terms, the user can stop sounds travelling through walls, or even confine
|
8
|
+
# reverb inside a geometric volume so that it doesn't leak out into other
|
9
|
+
# areas.
|
3
10
|
class Geometry < Handle
|
4
11
|
|
5
12
|
include Enumerable
|
data/lib/fmod/handle.rb
CHANGED
@@ -2,16 +2,28 @@ require 'fiddle'
|
|
2
2
|
require 'fiddle/import'
|
3
3
|
|
4
4
|
module FMOD
|
5
|
+
|
6
|
+
##
|
7
|
+
# @abstract The superclass for all core FMOD classes.
|
8
|
+
# Contains a reference handle to an unmanaged object, and as such it is
|
9
|
+
# crucial to call {#release} on any derived class to prevent memory leaks.
|
5
10
|
class Handle < Fiddle::Pointer
|
6
11
|
|
7
12
|
include Fiddle
|
8
13
|
include FMOD::Core
|
9
14
|
|
15
|
+
##
|
16
|
+
# @param address [Pointer, Integer, String] The address of a native FMOD
|
17
|
+
# pointer.
|
10
18
|
def initialize(address)
|
11
19
|
address = address.unpack1('J') if address.is_a?(String)
|
12
20
|
super(address.to_i)
|
13
21
|
end
|
14
22
|
|
23
|
+
##
|
24
|
+
# Releases the native handle.
|
25
|
+
# Failure to call this function may result in memory leaks.
|
26
|
+
# @return [void]
|
15
27
|
def release
|
16
28
|
case self
|
17
29
|
when Sound then FMOD.invoke(:Sound_Release, self)
|
@@ -26,6 +38,9 @@ module FMOD
|
|
26
38
|
|
27
39
|
alias_method :dispose, :release
|
28
40
|
|
41
|
+
# @!attribute user_data
|
42
|
+
# @return [Pointer] a user value stored within the object.
|
43
|
+
|
29
44
|
def user_data
|
30
45
|
pointer = int_ptr
|
31
46
|
case self
|
@@ -71,16 +86,30 @@ module FMOD
|
|
71
86
|
pointer
|
72
87
|
end
|
73
88
|
|
89
|
+
##
|
90
|
+
# @return [String] the string representation of the object.
|
74
91
|
def to_s
|
75
92
|
inspect # TODO
|
76
93
|
end
|
77
94
|
|
95
|
+
##
|
96
|
+
# @return [String] an empty string buffer the size of the platforms pointer
|
97
|
+
# size.
|
78
98
|
def int_ptr
|
79
99
|
"\0" * SIZEOF_INTPTR_T
|
80
100
|
end
|
81
101
|
|
82
102
|
private
|
83
103
|
|
104
|
+
##
|
105
|
+
# Dynamically links a Ruby method to get a boolean value from a native
|
106
|
+
# FMOD function.
|
107
|
+
#
|
108
|
+
# @param name [Symbol] The Ruby method name to be defined.
|
109
|
+
# @param function [Symbol] The native FMOD function to import.
|
110
|
+
# The "FMOD_" prefix may be omitted.
|
111
|
+
#
|
112
|
+
# @return [void]
|
84
113
|
def self.bool_reader(name, function)
|
85
114
|
self.send(:define_method, name) do
|
86
115
|
FMOD.invoke(function, self, buffer = "\0" * SIZEOF_INT)
|
@@ -88,12 +117,30 @@ module FMOD
|
|
88
117
|
end
|
89
118
|
end
|
90
119
|
|
120
|
+
##
|
121
|
+
# Dynamically links a Ruby method to set a boolean value in a native
|
122
|
+
# FMOD function.
|
123
|
+
#
|
124
|
+
# @param name [Symbol] The Ruby method name to be defined.
|
125
|
+
# @param function [Symbol] The native FMOD function to import.
|
126
|
+
# The "FMOD_" prefix can be omitted.
|
127
|
+
#
|
128
|
+
# @return [void]
|
91
129
|
def self.bool_writer(name, function)
|
92
130
|
self.send(:define_method, name) do |bool|
|
93
131
|
FMOD.invoke(function, self, bool.to_i)
|
94
132
|
end
|
95
133
|
end
|
96
134
|
|
135
|
+
##
|
136
|
+
# Dynamically links a Ruby method to get an integer value from a native
|
137
|
+
# FMOD function.
|
138
|
+
#
|
139
|
+
# @param name [Symbol] The Ruby method name to be defined.
|
140
|
+
# @param function [Symbol] The native FMOD function to import.
|
141
|
+
# The "FMOD_" prefix may be omitted.
|
142
|
+
#
|
143
|
+
# @return [void]
|
97
144
|
def self.integer_reader(name, function)
|
98
145
|
self.send(:define_method, name) do
|
99
146
|
FMOD.invoke(function, self, buffer = "\0" * SIZEOF_INT)
|
@@ -101,6 +148,19 @@ module FMOD
|
|
101
148
|
end
|
102
149
|
end
|
103
150
|
|
151
|
+
##
|
152
|
+
# Dynamically links a Ruby method to set an integer value in a native
|
153
|
+
# FMOD function.
|
154
|
+
#
|
155
|
+
# @param name [Symbol] The Ruby method name to be defined.
|
156
|
+
# @param function [Symbol] The native FMOD function to import.
|
157
|
+
# The "FMOD_" prefix can be omitted.
|
158
|
+
# @param min [Numeric] The minimum permitted value that can be passed to
|
159
|
+
# the defined method. Values out of range will be clamped.
|
160
|
+
# @param max [Numeric] The maximum permitted value that can be passed to
|
161
|
+
# the defined method. Values out of range will be clamped.
|
162
|
+
#
|
163
|
+
# @return [void]
|
104
164
|
def self.integer_writer(name, function, min = nil, max = nil)
|
105
165
|
self.send(:define_method, name) do |int|
|
106
166
|
int = min if min && int < min
|
@@ -110,6 +170,15 @@ module FMOD
|
|
110
170
|
end
|
111
171
|
end
|
112
172
|
|
173
|
+
##
|
174
|
+
# Dynamically links a Ruby method to get a float value from a native
|
175
|
+
# FMOD function.
|
176
|
+
#
|
177
|
+
# @param name [Symbol] The Ruby method name to be defined.
|
178
|
+
# @param function [Symbol] The native FMOD function to import.
|
179
|
+
# The "FMOD_" prefix may be omitted.
|
180
|
+
#
|
181
|
+
# @return [void]
|
113
182
|
def self.float_reader(name, function)
|
114
183
|
self.send(:define_method, name) do
|
115
184
|
FMOD.invoke(function, self, buffer = "\0" * SIZEOF_FLOAT)
|
@@ -117,6 +186,19 @@ module FMOD
|
|
117
186
|
end
|
118
187
|
end
|
119
188
|
|
189
|
+
##
|
190
|
+
# Dynamically links a Ruby method to set a float value in a native
|
191
|
+
# FMOD function.
|
192
|
+
#
|
193
|
+
# @param name [Symbol] The Ruby method name to be defined.
|
194
|
+
# @param function [Symbol] The native FMOD function to import.
|
195
|
+
# The "FMOD_" prefix can be omitted.
|
196
|
+
# @param min [Numeric] The minimum permitted value that can be passed to
|
197
|
+
# the defined method. Values out of range will be clamped.
|
198
|
+
# @param max [Numeric] The maximum permitted value that can be passed to
|
199
|
+
# the defined method. Values out of range will be clamped.
|
200
|
+
#
|
201
|
+
# @return [void]
|
120
202
|
def self.float_writer(name, function, min = nil, max = nil)
|
121
203
|
self.send(:define_method, name) do |float|
|
122
204
|
float = min if min && float < min
|
data/lib/fmod/reverb3D.rb
CHANGED
@@ -15,32 +15,6 @@ module FMOD
|
|
15
15
|
# setting is set to the default ambient reverb setting.
|
16
16
|
class Reverb3D < Handle
|
17
17
|
|
18
|
-
##
|
19
|
-
# @!attribute properties
|
20
|
-
# Gets or sets the reverb parameters for the current reverb object.
|
21
|
-
# @return [Reverb]
|
22
|
-
|
23
|
-
##
|
24
|
-
# @!attribute position
|
25
|
-
# A {Vector} containing the 3D position of the center of the reverb in 3D
|
26
|
-
# space.
|
27
|
-
# * *Default:* {Vector.zero}
|
28
|
-
# @return [Vector]
|
29
|
-
|
30
|
-
##
|
31
|
-
# @!attribute min_distance
|
32
|
-
# The distance from the center-point that the reverb will have full effect
|
33
|
-
# at.
|
34
|
-
# * *Default:* 0.0
|
35
|
-
# @return [Float]
|
36
|
-
|
37
|
-
##
|
38
|
-
# @!attribute max_distance
|
39
|
-
# The distance from the center-point that the reverb will not have any
|
40
|
-
# effect.
|
41
|
-
# * *Default:* 0.0
|
42
|
-
# @return [Float]
|
43
|
-
|
44
18
|
##
|
45
19
|
# @!attribute active
|
46
20
|
# Gets or sets the a state to disable or enable a reverb object so that it
|
@@ -50,6 +24,13 @@ module FMOD
|
|
50
24
|
bool_reader(:active, :Reverb3D_GetActive)
|
51
25
|
bool_writer(:active=, :Reverb3D_SetActive)
|
52
26
|
|
27
|
+
##
|
28
|
+
# @!attribute min_distance
|
29
|
+
# The distance from the center-point that the reverb will have full effect
|
30
|
+
# at.
|
31
|
+
# * *Default:* 0.0
|
32
|
+
# @return [Float]
|
33
|
+
|
53
34
|
def min_distance
|
54
35
|
buffer = "\0" * SIZEOF_FLOAT
|
55
36
|
FMOD.invoke(:Reverb3D_Get3DAttributes, self, nil, buffer, nil)
|
@@ -61,6 +42,13 @@ module FMOD
|
|
61
42
|
distance, max_distance )
|
62
43
|
end
|
63
44
|
|
45
|
+
##
|
46
|
+
# @!attribute max_distance
|
47
|
+
# The distance from the center-point that the reverb will not have any
|
48
|
+
# effect.
|
49
|
+
# * *Default:* 0.0
|
50
|
+
# @return [Float]
|
51
|
+
|
64
52
|
def max_distance
|
65
53
|
buffer = "\0" * SIZEOF_FLOAT
|
66
54
|
FMOD.invoke(:Reverb3D_Get3DAttributes, self, nil, nil, buffer)
|
@@ -72,6 +60,13 @@ module FMOD
|
|
72
60
|
min_distance, distance )
|
73
61
|
end
|
74
62
|
|
63
|
+
##
|
64
|
+
# @!attribute position
|
65
|
+
# A {Vector} containing the 3D position of the center of the reverb in 3D
|
66
|
+
# space.
|
67
|
+
# * *Default:* {Vector.zero}
|
68
|
+
# @return [Vector]
|
69
|
+
|
75
70
|
def position
|
76
71
|
vector = Vector.zero
|
77
72
|
FMOD.invoke(:Reverb3D_Get3DAttributes, self, vector, nil, nil)
|
@@ -84,6 +79,10 @@ module FMOD
|
|
84
79
|
min_distance, max_distance )
|
85
80
|
end
|
86
81
|
|
82
|
+
##
|
83
|
+
# @!attribute properties
|
84
|
+
# @return [Reverb] the reverb parameters for the current reverb object.
|
85
|
+
|
87
86
|
def properties
|
88
87
|
FMOD.invoke(:Reverb3D_GetProperties, self, reverb = Reverb.new)
|
89
88
|
reverb
|
data/lib/fmod/sound.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
|
2
2
|
module FMOD
|
3
|
+
|
4
|
+
##
|
5
|
+
# Represents the actual data source of audio, usually an audio file or stream.
|
3
6
|
class Sound < Handle
|
4
7
|
|
5
8
|
##
|
@@ -764,7 +767,8 @@ module FMOD
|
|
764
767
|
parent.play_sound(self, group, false)
|
765
768
|
end
|
766
769
|
|
767
|
-
|
770
|
+
##
|
771
|
+
# Emulates an Array-type container of a {Tag}'s objects within a {Sound}.
|
768
772
|
class TagCollection
|
769
773
|
|
770
774
|
include Enumerable
|
@@ -781,6 +785,9 @@ module FMOD
|
|
781
785
|
self
|
782
786
|
end
|
783
787
|
|
788
|
+
##
|
789
|
+
# @!attribute [r] count
|
790
|
+
# @return [Integer] the number of tags in the collection.
|
784
791
|
def count
|
785
792
|
buffer = "\0" * Fiddle::SIZEOF_INT
|
786
793
|
FMOD.invoke(:Sound_GetNumTags, @sound, buffer, nil)
|
@@ -789,12 +796,23 @@ module FMOD
|
|
789
796
|
|
790
797
|
alias_method :size, :count
|
791
798
|
|
799
|
+
##
|
800
|
+
# @!attribute [r] count
|
801
|
+
# @return [Integer] the number of updated tags in the collection since
|
802
|
+
# last time this value was checked.
|
792
803
|
def updated_count
|
793
804
|
buffer = "\0" * Fiddle::SIZEOF_INT
|
794
805
|
FMOD.invoke(:Sound_GetNumTags, @sound, nil, buffer)
|
795
806
|
buffer.unpack1('l')
|
796
807
|
end
|
797
808
|
|
809
|
+
##
|
810
|
+
# Retrieves a descriptive tag stored by the sound, to describe things like
|
811
|
+
# the song name, author etc.
|
812
|
+
#
|
813
|
+
# @param index [Integer] Index into the collection to retrieve the tag.
|
814
|
+
#
|
815
|
+
# @return [Tag, nil] the desired {Tag} or +nil+ if index is out of range.
|
798
816
|
def [](index)
|
799
817
|
tag = FMOD::Core::Tag.new
|
800
818
|
if index.is_a?(Integer)
|
@@ -805,6 +823,8 @@ module FMOD
|
|
805
823
|
end
|
806
824
|
tag
|
807
825
|
end
|
826
|
+
|
827
|
+
alias_method :tag, :[]
|
808
828
|
end
|
809
829
|
end
|
810
830
|
end
|
data/lib/fmod/sound_group.rb
CHANGED
@@ -1,52 +1,128 @@
|
|
1
1
|
|
2
2
|
module FMOD
|
3
|
+
|
4
|
+
##
|
5
|
+
# Represents a logical grouping of {Sound} objects that can be manipulated as
|
6
|
+
# one.
|
3
7
|
class SoundGroup < Handle
|
4
8
|
|
5
9
|
include Fiddle
|
6
10
|
include Enumerable
|
7
11
|
|
12
|
+
##
|
13
|
+
# @!attribute max_audible
|
14
|
+
# Limits the number of concurrent playbacks of sounds in a sound group to
|
15
|
+
# the specified value.
|
16
|
+
#
|
17
|
+
# After this, if the sounds in the sound group are playing this many times,
|
18
|
+
# any attempts to play more of the sounds in the sound group will by default
|
19
|
+
# fail an exception.
|
20
|
+
#
|
21
|
+
# Use {#behavior} to change the way the sound playback behaves when too many
|
22
|
+
# sounds are playing. Muting, failing and stealing behaviors can be
|
23
|
+
# specified.
|
24
|
+
#
|
25
|
+
# @return [Integer] the number of playbacks to be audible at once. -1 (the
|
26
|
+
# default) denotes unlimited.
|
8
27
|
integer_reader(:max_audible, :SoundGroup_GetMaxAudible)
|
9
|
-
integer_writer(:max_audible=, :SoundGroup_SetMaxAudible)
|
28
|
+
integer_writer(:max_audible=, :SoundGroup_SetMaxAudible, min: -1)
|
10
29
|
|
30
|
+
##
|
31
|
+
# @!attribute behavior
|
32
|
+
# Determines the way the sound playback behaves when too many sounds are
|
33
|
+
# playing in a sound group. Muting, failing and stealing behaviors can be
|
34
|
+
# specified.
|
35
|
+
#
|
36
|
+
# @return [Integer] the current behavior.
|
37
|
+
# @see SoundGroupBehavior
|
11
38
|
integer_reader(:behavior, :SoundGroup_GetMaxAudibleBehavior)
|
12
39
|
integer_writer(:behavior=, :SoundGroup_SetMaxAudibleBehavior)
|
13
40
|
|
41
|
+
##
|
42
|
+
# @!attribute volume
|
43
|
+
# The volume for a sound group, affecting all channels playing the sounds in
|
44
|
+
# this sound group.
|
45
|
+
#
|
46
|
+
# 0.0 is silent, 1.0 is full volume, though negative values and
|
47
|
+
# amplification are supported.
|
48
|
+
#
|
49
|
+
# @return [Float] the sound group volume.
|
14
50
|
float_reader(:volume, :SoundGroup_GetVolume)
|
15
51
|
float_writer(:volume=, :SoundGroup_SetVolume)
|
16
52
|
|
53
|
+
##
|
54
|
+
# @!attribute fade_speed
|
55
|
+
# @return [Float] the time in seconds to fade with when {#behavior} is set
|
56
|
+
# to {SoundGroupBehavior::MUTE}. By default there is no fade.
|
17
57
|
float_reader(:fade_speed, :SoundGroup_GetMuteFadeSpeed)
|
18
58
|
float_writer(:fade_speed=, :SoundGroup_SetMuteFadeSpeed)
|
19
59
|
|
20
|
-
|
60
|
+
##
|
61
|
+
# @!attribute [r] playing_count
|
62
|
+
# @return [Integer] e number of currently playing channels for the group.
|
21
63
|
integer_reader(:playing_count, :SoundGroup_GetNumPlaying)
|
22
64
|
|
65
|
+
##
|
66
|
+
# @!attribute [r] count
|
67
|
+
# @return [Integer] the current number of sounds in this sound group.
|
68
|
+
integer_reader(:count, :SoundGroup_GetNumSounds)
|
69
|
+
|
23
70
|
alias_method :size, :count
|
24
71
|
|
72
|
+
##
|
73
|
+
# @!attribute [r] name
|
74
|
+
# @return [String] the name of the sound group.
|
25
75
|
def name
|
26
76
|
buffer = "\0" * 512
|
27
77
|
FMOD.invoke(:SoundGroup_GetName, self, buffer, 512)
|
28
78
|
buffer.delete("\0")
|
29
79
|
end
|
30
80
|
|
81
|
+
##
|
82
|
+
# Enumerates the sounds contained within the sound group.
|
83
|
+
#
|
84
|
+
# @overload each
|
85
|
+
# When called with block, yields each {Sound within the object before
|
86
|
+
# returning self.
|
87
|
+
# @yield [sound] Yields a sound to the block.
|
88
|
+
# @yieldparam sound [Sound] The current enumerated polygon.
|
89
|
+
# @return [self]
|
90
|
+
# @overload each
|
91
|
+
# When no block specified, returns an Enumerator for the {SoundGroup}.
|
92
|
+
# @return [Enumerator]
|
31
93
|
def each
|
32
94
|
return to_enum(:each) unless block_given?
|
33
95
|
(0...count).each { |i| yield self[i] }
|
34
96
|
self
|
35
97
|
end
|
36
98
|
|
99
|
+
##
|
100
|
+
# Retrieves a sound from within a sound group.
|
101
|
+
#
|
102
|
+
# @param index [Integer] Index of the sound that is to be retrieved.
|
103
|
+
#
|
104
|
+
# @return [Sound, nil] the desired Sound object, or +nil+ if index was out
|
105
|
+
# of range.
|
37
106
|
def [](index)
|
38
|
-
FMOD.valid_range?(0, 0, count - 1)
|
107
|
+
return nil unless FMOD.valid_range?(0, 0, count - 1, false)
|
39
108
|
FMOD.invoke(:SoundGroup_GetSound, self, index, sound = int_ptr)
|
40
109
|
Sound.new(sound)
|
41
110
|
end
|
42
111
|
|
43
112
|
alias_method :sound, :[]
|
44
113
|
|
114
|
+
##
|
115
|
+
# @!attribute [r] parent
|
116
|
+
# @return [System] the parent {System} object that was used to create this
|
117
|
+
# object.
|
45
118
|
def parent
|
46
119
|
FMOD.invoke(:SoundGroup_GetSystemObject, self, system = int_ptr)
|
47
120
|
System.new(system)
|
48
121
|
end
|
49
122
|
|
123
|
+
##
|
124
|
+
# Stops all sounds within this sound group.
|
125
|
+
# @return [void]
|
50
126
|
def stop
|
51
127
|
FMOD.invoke(:SoundGroup_Stop, self)
|
52
128
|
end
|