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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.txt +23 -1
  3. data/README.md +1 -3
  4. data/Rakefile +2 -1
  5. data/bin/console +1 -0
  6. data/fmod.gemspec +1 -2
  7. data/lib/fmod/channel_control.rb +47 -0
  8. data/lib/fmod/core.rb +1 -0
  9. data/lib/fmod/core/bool_description.rb +9 -4
  10. data/lib/fmod/core/channel_mask.rb +61 -0
  11. data/lib/fmod/core/data_description.rb +44 -0
  12. data/lib/fmod/core/dsp_description.rb +172 -1
  13. data/lib/fmod/core/dsp_index.rb +13 -0
  14. data/lib/fmod/core/dsp_type.rb +154 -0
  15. data/lib/fmod/core/extensions.rb +19 -0
  16. data/lib/fmod/core/file_system.rb +1 -0
  17. data/lib/fmod/core/filter_type.rb +62 -0
  18. data/lib/fmod/core/float_description.rb +38 -0
  19. data/lib/fmod/core/guid.rb +27 -0
  20. data/lib/fmod/core/init_flags.rb +66 -0
  21. data/lib/fmod/core/integer_description.rb +22 -2
  22. data/lib/fmod/core/output_type.rb +81 -2
  23. data/lib/fmod/core/parameter_info.rb +36 -0
  24. data/lib/fmod/core/parameter_type.rb +15 -0
  25. data/lib/fmod/core/reverb.rb +113 -2
  26. data/lib/fmod/core/reverb_index.rb +105 -0
  27. data/lib/fmod/core/sound_ex_info.rb +4 -0
  28. data/lib/fmod/core/sound_group_behavior.rb +14 -0
  29. data/lib/fmod/core/sound_type.rb +1 -0
  30. data/lib/fmod/core/spectrum_data.rb +35 -0
  31. data/lib/fmod/core/structures.rb +10 -4
  32. data/lib/fmod/core/tag.rb +72 -11
  33. data/lib/fmod/core/tag_data_type.rb +30 -0
  34. data/lib/fmod/core/tag_type.rb +55 -0
  35. data/lib/fmod/core/time_unit.rb +3 -0
  36. data/lib/fmod/core/vector.rb +40 -3
  37. data/lib/fmod/core/window_type.rb +46 -0
  38. data/lib/fmod/dsp.rb +427 -98
  39. data/lib/fmod/dsp_connection.rb +3 -0
  40. data/lib/fmod/effects.rb +51 -37
  41. data/lib/fmod/error.rb +3 -0
  42. data/lib/fmod/geometry.rb +7 -0
  43. data/lib/fmod/handle.rb +82 -0
  44. data/lib/fmod/reverb3D.rb +25 -26
  45. data/lib/fmod/sound.rb +21 -1
  46. data/lib/fmod/sound_group.rb +79 -3
  47. data/lib/fmod/system.rb +301 -154
  48. data/lib/fmod/version.rb +4 -1
  49. metadata +6 -3
@@ -1,5 +1,8 @@
1
1
 
2
2
  module FMOD
3
+
4
+ ##
5
+ # Represents a connection between two DSP units
3
6
  class DspConnection < Handle
4
7
 
5
8
  ##
@@ -1,38 +1,52 @@
1
1
 
2
- require_relative 'effects/channel_mix.rb'
3
- require_relative 'effects/chorus.rb'
4
- require_relative 'effects/compressor.rb'
5
- require_relative 'effects/convolution_reverb.rb'
6
- require_relative 'effects/delay.rb'
7
- require_relative 'effects/distortion.rb'
8
- require_relative 'effects/dsps.rb'
9
- require_relative 'effects/echo.rb'
10
- require_relative 'effects/envelope_follower.rb'
11
- require_relative 'effects/fader.rb'
12
- require_relative 'effects/fft.rb'
13
- require_relative 'effects/flange.rb'
14
- require_relative 'effects/high_pass.rb'
15
- require_relative 'effects/high_pass_simple.rb'
16
- require_relative 'effects/it_echo.rb'
17
- require_relative 'effects/it_lowpass.rb'
18
- require_relative 'effects/ladspa_plugin.rb'
19
- require_relative 'effects/limiter.rb'
20
- require_relative 'effects/loudness_meter.rb'
21
- require_relative 'effects/low_pass.rb'
22
- require_relative 'effects/low_pass_simple.rb'
23
- require_relative 'effects/mixer.rb'
24
- require_relative 'effects/multiband_eq.rb'
25
- require_relative 'effects/normalize.rb'
26
- require_relative 'effects/object_pan.rb'
27
- require_relative 'effects/oscillator.rb'
28
- require_relative 'effects/pan.rb'
29
- require_relative 'effects/param_eq.rb'
30
- require_relative 'effects/pitch_shift.rb'
31
- require_relative 'effects/return.rb'
32
- require_relative 'effects/send.rb'
33
- require_relative 'effects/sfx_reverb.rb'
34
- require_relative 'effects/three_eq.rb'
35
- require_relative 'effects/transceiver.rb'
36
- require_relative 'effects/tremolo.rb'
37
- require_relative 'effects/vst_plugin.rb'
38
- require_relative 'effects/winamp_plugin.rb'
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
@@ -1,4 +1,7 @@
1
1
  module FMOD
2
+
3
+ ##
4
+ # Exception class for FMOD errors.
2
5
  class Error < StandardError
3
6
 
4
7
  include FMOD::Core
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
- integer_reader(:count, :SoundGroup_GetNumSounds)
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