fmod 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|