fmod 0.9.0 → 0.9.1

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.
@@ -1,54 +1,118 @@
1
1
 
2
2
  module FMOD
3
+
4
+ # Represents a logical grouping of {Channel} and/or {ChannelGroup} objects
5
+ # that can be manipulated as one.
3
6
  class ChannelGroup < ChannelControl
4
7
 
5
8
  include Fiddle
6
9
  include Enumerable
7
10
 
11
+ # @!attribute [r] subgroup_count
12
+ # @return [Integer] the number of sub groups under this channel group.
8
13
  integer_reader(:subgroup_count, :ChannelGroup_GetNumGroups)
14
+
15
+ # @!attribute [r] channel_count
16
+ # @return [Integer] the number of assigned channels to this channel group.
9
17
  integer_reader(:channel_count, :ChannelGroup_GetNumChannels)
10
18
 
19
+ ##
20
+ # @return [String] the name of the channel group set when the group was
21
+ # created.
11
22
  def name
12
23
  buffer = "\0" * 512
13
24
  FMOD.invoke(:ChannelGroup_GetName, self, buffer, 512)
14
25
  buffer.delete("\0")
15
26
  end
16
27
 
28
+ ##
29
+ # Retrieves the sub-group at the specified index.
30
+ #
31
+ # @param index [Integer] Index to specify which sub channel group to get.
32
+ # @return [ChannelGroup, nil] the group or +nil+ if no group was found at
33
+ # the specified index.
17
34
  def subgroup(index)
18
- FMOD.valid_range?(index, 0, subgroup_count - 1)
35
+ return nil unless FMOD.valid_range?(index, 0, subgroup_count - 1, false)
19
36
  FMOD.invoke(:ChannelGroup_GetGroup, self, index, group = int_ptr)
20
37
  ChannelGroup.new(group)
21
38
  end
22
39
 
40
+ ##
41
+ # @!attribute [r] parent_group
42
+ # @return [ChannelGroup, nil] the channel group parent.
23
43
  def parent_group
24
44
  FMOD.invoke(:ChannelGroup_GetParentGroup, self, group = int_ptr)
25
45
  group.null? ? nil : ChannelGroup.new(group)
26
46
  end
27
47
 
48
+ ##
49
+ # Retrieves the {Channel} within this group at the specified index.
50
+ #
51
+ # @param index [Integer] Index within the group of the channel.
52
+ #
53
+ # @return [Channel, nil] the specified {Channel}, or +nil+ if no channel
54
+ # exists at the specified index.
28
55
  def [](index)
29
- FMOD.valid_range?(index, 0, channel_count - 1)
56
+ return nil unless FMOD.valid_range?(index, 0, channel_count - 1, false)
30
57
  FMOD.invoke(:ChannelGroup_GetChannel, self, index, channel = int_ptr)
31
58
  Channel.new(channel)
32
59
  end
33
60
 
61
+ ##
62
+ # Enumerates the channels contained within the {ChannelGroup}.
63
+ #
64
+ # @overload each
65
+ # When called with block, yields each {Channel} within the object before
66
+ # returning self.
67
+ # @yield [channel] Yields a channel to the block.
68
+ # @yieldparam channel [Channel] The current enumerated channel.
69
+ # @return [self]
70
+ # @overload each
71
+ # When no block specified, returns an Enumerator for the {ChannelGroup}.
72
+ # @return [Enumerator]
34
73
  def each
35
74
  return to_enum(:each) unless block_given?
36
75
  (0...channel_count).each { |i| yield self[i] }
37
76
  self
38
77
  end
39
78
 
79
+ ##
80
+ # Adds a {Channel} or a {ChannelGroup} as a child of this group.
81
+ #
82
+ # @param channel_control [Channel, ChannelGroup] The channel or group to
83
+ # add as a child.
84
+ #
85
+ # @return [self, DspConnection] either self if a {Channel} was added, or a
86
+ # {DspConnection} if a group was added.
40
87
  def <<(channel_control)
41
88
  return add_channel(channel_control) if channel_control.is_a?(Channel)
42
89
  return add_group(channel_control) if channel_control.is_a?(ChannelGroup)
43
90
  raise TypeError, "#{channel_control} is not a #{ChannelControl}."
44
91
  end
45
92
 
93
+ ##
94
+ # Adds a channel as a child of the this group. This detaches the channel
95
+ # from any group it may already be attached to.
96
+ #
97
+ # @param channel [Channel] Channel to add as a child.
98
+ #
99
+ # @return [self]
46
100
  def add_channel(channel)
47
101
  FMOD.type?(channel, Channel)
48
102
  channel.group = self
49
- channel
103
+ self
50
104
  end
51
105
 
106
+ ##
107
+ # Adds a channel group as a child of the current channel group.
108
+ #
109
+ # @param group [ChannelGroup] Channel group to add as a child.
110
+ # @param propagate_clock [Boolean] When a child group is added to a parent
111
+ # group, the clock values from the parent will be propagated down into
112
+ # the child.
113
+ #
114
+ # @return [DspConnection] a DSP connection, which is the connection between
115
+ # the parent and the child group's DSP units.
52
116
  def add_group(group, propagate_clock = true)
53
117
  FMOD.type?(group, ChannelGroup)
54
118
  FMOD.invoke(:ChannelGroup_AddGroup, self, group,
@@ -1,35 +1,44 @@
1
1
 
2
- require_relative './core/structure'
3
- require_relative './core/structures'
4
- require_relative './core/bool_description'
5
- require_relative './core/channel_mask'
6
- require_relative './core/data_description'
7
- require_relative './core/driver'
8
- require_relative './core/dsp_description'
9
- require_relative './core/dsp_index'
10
- require_relative './core/dsp_type'
11
- require_relative './core/extensions'
12
- require_relative './core/file_system'
13
- require_relative './core/filter_type'
14
- require_relative './core/float_description'
15
- require_relative './core/guid'
16
- require_relative './core/init_flags'
17
- require_relative './core/integer_description'
18
- require_relative './core/mode'
19
- require_relative './core/output_type'
20
- require_relative './core/parameter_info'
21
- require_relative './core/parameter_type'
22
- require_relative './core/result'
23
- require_relative './core/reverb'
24
- require_relative './core/sound_ex_info'
25
- require_relative './core/sound_format'
26
- require_relative './core/sound_group_behavior'
27
- require_relative './core/sound_type'
28
- require_relative './core/speaker_index'
29
- require_relative './core/speaker_mode'
30
- require_relative './core/spectrum_data'
31
- require_relative './core/tag'
32
- require_relative './core/tag_data_type'
33
- require_relative './core/time_unit'
34
- require_relative './core/vector'
35
- require_relative './core/window_type'
2
+ module FMOD
3
+
4
+ ##
5
+ # Namespace for classes and structures used primarily within the API, to
6
+ # create a logical separation of the native FMOD classes from enumerations,
7
+ # structures, and internally used data types.
8
+ module Core
9
+ require_relative './core/structure'
10
+ require_relative './core/structures'
11
+ require_relative './core/bool_description'
12
+ require_relative './core/channel_mask'
13
+ require_relative './core/data_description'
14
+ require_relative './core/driver'
15
+ require_relative './core/dsp_description'
16
+ require_relative './core/dsp_index'
17
+ require_relative './core/dsp_type'
18
+ require_relative './core/extensions'
19
+ require_relative './core/file_system'
20
+ require_relative './core/filter_type'
21
+ require_relative './core/float_description'
22
+ require_relative './core/guid'
23
+ require_relative './core/init_flags'
24
+ require_relative './core/integer_description'
25
+ require_relative './core/mode'
26
+ require_relative './core/output_type'
27
+ require_relative './core/parameter_info'
28
+ require_relative './core/parameter_type'
29
+ require_relative './core/result'
30
+ require_relative './core/reverb'
31
+ require_relative './core/sound_ex_info'
32
+ require_relative './core/sound_format'
33
+ require_relative './core/sound_group_behavior'
34
+ require_relative './core/sound_type'
35
+ require_relative './core/speaker_index'
36
+ require_relative './core/speaker_mode'
37
+ require_relative './core/spectrum_data'
38
+ require_relative './core/tag'
39
+ require_relative './core/tag_data_type'
40
+ require_relative './core/time_unit'
41
+ require_relative './core/vector'
42
+ require_relative './core/window_type'
43
+ end
44
+ end
@@ -1,35 +1,173 @@
1
1
  module FMOD
2
2
  module Core
3
+
4
+ ##
5
+ # Sound description bit-fields, bitwise OR them together for loading and
6
+ # describing sounds.
3
7
  module Mode
8
+
9
+ ##
10
+ # Default for all modes listed below. {LOOP_OFF}, {TWO_D},
11
+ # {WORLD_RELATIVE_3D}, {INVERSE_ROLLOFF_3D}
4
12
  DEFAULT = 0x00000000
13
+
14
+ ##
15
+ # For non looping sounds. (DEFAULT). Overrides {LOOP_NORMAL} /
16
+ # {LOOP_BIDI}.
5
17
  LOOP_OFF = 0x00000001
18
+
19
+ ##
20
+ # For forward looping sounds.
6
21
  LOOP_NORMAL= 0x00000002
22
+
23
+ ##
24
+ # For bidirectional looping sounds. (only works on software mixed static
25
+ # sounds).
7
26
  LOOP_BIDI = 0x00000004
27
+
28
+ ##
29
+ # Ignores any 3D processing. ({DEFAULT}).
8
30
  TWO_D = 0x00000008
31
+
32
+ ##
33
+ # Makes the sound positionable in 3D. Overrides {TWO_D}.
9
34
  THREE_D = 0x00000010
35
+
36
+ ##
37
+ # Decompress at runtime, streaming from the source provided (ie from
38
+ # disk). Overrides {CREATE_SAMPLE} and {CREATE_COMPRESSED_SAMPLE}. Note a
39
+ # stream can only be played once at a time due to a stream only having 1
40
+ # stream buffer and file handle. Open multiple streams to have them play
41
+ # concurrently.
10
42
  CREATE_STREAM = 0x00000080
43
+
44
+ ##
45
+ # Decompress at load time, decompressing or decoding whole file into
46
+ # memory as the target sample format (ie PCM). Fastest for playback and
47
+ # most flexible.
11
48
  CREATE_SAMPLE = 0x00000100
49
+
50
+ ##
51
+ # Load MP2/MP3/FADPCM/IMAADPCM/Vorbis/AT9 or XMA into memory and leave it
52
+ # compressed. Vorbis/AT9/FADPCM encoding only supported in the .FSB
53
+ # container format. During playback the FMOD software mixer will decode it
54
+ # in realtime as a 'compressed sample'. Overrides {CREATE_SAMPLE}. If the
55
+ # sound data is not one of the supported formats, it will behave as if it
56
+ # was created with {CREATE_SAMPLE} and decode the sound into PCM.
12
57
  CREATE_COMPRESSED_SAMPLE = 0x00000200
58
+
59
+ ##
60
+ # Opens a user created static sample or stream.
13
61
  OPEN_USER = 0x00000400
62
+
63
+ ##
64
+ # "source" will be interpreted as a pointer to memory instead of filename
65
+ # for creating sounds. If used with {CREATE_SAMPLE} or
66
+ # {CREATE_COMPRESSED_SAMPLE}, FMOD duplicates the memory into its own
67
+ # buffers. Your own buffer can be freed after open. If used with
68
+ # {CREATE_STREAM}, FMOD will stream out of the buffer whose pointer you
69
+ # passed in. In this case, your own buffer should not be freed until you
70
+ # have finished with and released the stream.
14
71
  OPEN_MEMORY = 0x00000800
72
+
73
+ ##
74
+ # "source" will be interpreted as a pointer to memory instead of filename
75
+ # for creating sounds. This differs to {OPEN_MEMORY} in that it uses the
76
+ # memory as is, without duplicating the memory into its own buffers.
77
+ # Cannot be freed after open, only after Sound::release. Will not work if
78
+ # the data is compressed and {CREATE_COMPRESSED_SAMPLE} is not used.
15
79
  OPEN_MEMORY_POINT = 0x10000000
80
+
81
+ ##
82
+ # Will ignore file format and treat as raw PCM.
16
83
  OPEN_RAW = 0x00001000
84
+
85
+ ##
86
+ # Just open the file, dont pre-buffer or read. Good for fast opens for
87
+ # info, or when Sound.read_data is to be used.
17
88
  OPEN_ONLY = 0x00002000
89
+
90
+ ##
91
+ # For System.create_sound - for accurate Sound.length/Channel.position on
92
+ # VBR MP3, and MOD/S3M/XM/IT/MIDI files. Scans file first, so takes longer
93
+ # to open. {OPEN_ONLY} does not affect this.
18
94
  ACCURATE_TIME = 0x00004000
95
+
96
+ ##
97
+ # For corrupted / bad MP3 files. This will search all the way through the
98
+ # file until it hits a valid MPEG header. Normally only searches for 4k.
19
99
  MPEG_SEARCH = 0x00008000
100
+
101
+ ##
102
+ # For opening sounds and getting streamed sub-sounds (seeking)
103
+ # asynchronously. Use Sound.open_state to poll the state of the sound as
104
+ # it opens or retrieves the sub-sound in the background.
20
105
  NON_BLOCKING = 0x00010000
106
+
107
+ ##
108
+ # Unique sound, can only be played one at a time
21
109
  UNIQUE = 0x00020000
110
+
111
+ ##
112
+ # Make the sound's position, velocity and orientation relative to the
113
+ # listener.
22
114
  HEAD_RELATIVE_3D = 0x00040000
115
+
116
+ ##
117
+ # Make the sound's position, velocity and orientation absolute (relative
118
+ # to the world). ({DEFAULT})
23
119
  WORLD_RELATIVE_3D = 0x00080000
120
+
121
+ ##
122
+ # This sound will follow the inverse rolloff model where min distance =
123
+ # full volume, max distance = where sound stops attenuating, and rolloff
124
+ # is fixed according to the global rolloff factor. ({DEFAULT})
24
125
  INVERSE_ROLLOFF_3D = 0x00100000
126
+
127
+ ##
128
+ # This sound will follow a linear rolloff model where min distance is full
129
+ # volume, max distance is silence.
25
130
  LINEAR_ROLLOFF_3D = 0x00200000
131
+
132
+ ##
133
+ # This sound will follow a linear-square rolloff model where min distance
134
+ # is full volume, max distance is silence.
26
135
  LINEAR_SQUARE_ROLLOFF_3D = 0x00400000
136
+
137
+ ##
138
+ # This sound will follow the inverse rolloff model at distances close to
139
+ # min distance and a linear-square rolloff close to max distance.
27
140
  INVERSE_TAPERED_ROLLOFF_3D = 0x00800000
141
+
142
+ ##
143
+ # is sound will follow a rolloff model defined by Sound.custom_rolloff /
144
+ # Channel.custom_rolloff.
28
145
  CUSTOM_ROLLOFF_3D = 0x04000000
146
+
147
+ ##
148
+ # Is not affect by geometry occlusion. If not specified in Sound:.mode, or
149
+ # Channel.mode, the flag is cleared and it is affected by geometry again.
29
150
  IGNORE_GEOMETRY_3D = 0x40000000
151
+
152
+ ##
153
+ # Skips id3v2/asf/etc tag checks when opening a sound, to reduce seek/read
154
+ # overhead when opening files (helps with CD performance).
30
155
  IGNORE_TAGS = 0x02000000
156
+
157
+ ##
158
+ # Removes some features from samples to give a lower memory overhead, like
159
+ # Sound.name.
31
160
  LOW_MEM = 0x08000000
161
+
162
+ ##
163
+ # Load sound into the secondary RAM of supported platform. On PS3, sounds
164
+ # will be loaded into RSX/VRAM.
32
165
  LOAD_SECONDARY_RAM = 0x20000000
166
+
167
+ ##
168
+ # For sounds that start virtual (due to being quiet or low importance),
169
+ # instead of swapping back to audible, and playing at the correct offset
170
+ # according to time, this flag makes the sound play from the start.
33
171
  VIRTUAL_PLAY_FROM_START = 0x80000000
34
172
  end
35
173
  end
@@ -1,87 +1,371 @@
1
1
  module FMOD
2
2
  module Core
3
+
4
+ ##
5
+ # Result codes returned from every function call to FMOD.
3
6
  module Result
7
+ ##
8
+ # No errors.
4
9
  OK = 0
10
+
11
+ ##
12
+ # Tried to call a function on a data type that does not allow this type of
13
+ # functionality (ie calling {Sound.lock} on a streaming sound).
5
14
  BAD_COMMAND = 1
15
+
16
+ ##
17
+ # Error trying to allocate a channel.
6
18
  CHANNEL_ALLOC = 2
19
+
20
+ ##
21
+ # The specified channel has been reused to play another sound.
7
22
  CHANNEL_STOLEN = 3
23
+
24
+ ##
25
+ # DMA Failure. See debug output for more information.
8
26
  DMA = 4
27
+
28
+ ##
29
+ # DSP connection error. Connection possibly caused a cyclic dependency or
30
+ # connected dsps with incompatible buffer counts.
9
31
  DSP_CONNECTION = 5
32
+
33
+ ##
34
+ # DSP return code from a DSP process query callback. Tells mixer not to
35
+ # call the process callback and therefore not consume CPU. Use this to
36
+ # optimize the DSP graph.
10
37
  DSP_DONT_PROCESS = 6
38
+
39
+ ##
40
+ # DSP Format error. A DSP unit may have attempted to connect to this
41
+ # network with the wrong format, or a matrix may have been set with the
42
+ # wrong size if the target unit has a specified channel map.
11
43
  DSP_FORMAT = 7
44
+
45
+ ##
46
+ # DSP is already in the mixer's DSP network. It must be removed before
47
+ # being reinserted or released.
12
48
  DSP_IN_USE = 8
49
+
50
+ ##
51
+ # DSP connection error. Couldn't find the DSP unit specified.
13
52
  DSP_NOT_FOUND = 9
53
+
54
+ ##
55
+ # DSP operation error. Cannot perform operation on this DSP as it is
56
+ # reserved by the system.
14
57
  DSP_RESERVED = 10
58
+
59
+ ##
60
+ # DSP return code from a DSP process query callback. Tells mixer silence
61
+ # would be produced from read, so go idle and not consume CPU. Use this to
62
+ # optimize the DSP graph.
15
63
  DSP_SILENCE = 11
64
+
65
+ ##
66
+ # DSP operation cannot be performed on a DSP of this type.
16
67
  DSP_TYPE = 12
68
+
69
+ ##
70
+ # Error loading file.
17
71
  FILE_BAD = 13
72
+
73
+ ##
74
+ # Couldn't perform seek operation. This is a limitation of the medium (ie
75
+ # net-streams) or the file format.
18
76
  FILE_COULD__SEEK = 14
77
+
78
+ ##
79
+ # Media was ejected while reading.
19
80
  FILE_DISK_EJECTED = 15
81
+
82
+ ##
83
+ # End of file unexpectedly reached while trying to read essential data
84
+ # (truncated?).
20
85
  FILE_EOF = 16
86
+
87
+ ##
88
+ # End of current chunk reached while trying to read data.
21
89
  FILE_END_OF_DATA = 17
90
+
91
+ ##
92
+ # File not found.
22
93
  FILE_NOT_FOUND = 18
94
+
95
+ ##
96
+ # Unsupported file or audio format.
23
97
  FORMAT = 19
98
+
99
+ ##
100
+ # There is a version mismatch between the FMOD header and either the FMOD
101
+ # Studio library or the FMOD Low Level library.
24
102
  HEADER_MISMATCH = 20
103
+
104
+ ##
105
+ # A HTTP error occurred. This is a catch-all for HTTP errors not listed
106
+ # elsewhere.
25
107
  HTTP = 21
108
+
109
+ ##
110
+ # The specified resource requires authentication or is forbidden.
26
111
  HTTP_ACCESS = 22
112
+
113
+ ##
114
+ # Proxy authentication is required to access the specified resource.
27
115
  HTTP_PROXY_AUTH = 23
116
+
117
+ ##
118
+ # A HTTP server error occurred.
28
119
  HTTP_SERVER_ERROR = 24
120
+
121
+ ##
122
+ # The HTTP request timed out.
29
123
  HTTP_TIMEOUT = 25
124
+
125
+ ##
126
+ # FMOD was not initialized correctly to support this function.
30
127
  INITIALIZATION = 26
128
+
129
+ ##
130
+ # Cannot call this command after FMOD::System.create.
31
131
  INITIALIZED = 27
132
+
133
+ ##
134
+ # An error occurred that wasn't supposed to. Contact support.
32
135
  INTERNAL = 28
136
+
137
+ ##
138
+ # Value passed in was a NaN, Inf or de-normalized float.
33
139
  INVALID_FLOAT = 29
140
+
141
+ ##
142
+ # An invalid object handle was used.
34
143
  INVALID_HANDLE = 30
144
+
145
+ ##
146
+ # An invalid parameter was passed to a function.
35
147
  INVALID_PARAM = 31
148
+
149
+ ##
150
+ # An invalid seek position was passed to a function.
36
151
  INVALID_POSITION = 32
152
+
153
+ ##
154
+ # An invalid speaker was passed to this function based on the current
155
+ # speaker mode.
37
156
  INVALID_SPEAKER = 33
157
+
158
+ ##
159
+ # The syncpoint did not come from this sound handle.
38
160
  INVALID_SYNC_POINT = 34
161
+
162
+ ##
163
+ # Tried to call a function on a thread that is not supported.
39
164
  INVALID_THREAD = 35
165
+
166
+ ##
167
+ # The vectors passed in are not unit length, or perpendicular.
40
168
  INVALID_VECTOR = 36
169
+
170
+ ##
171
+ # Reached maximum audible playback count for this sound's sound group.
41
172
  MAX_AUDIBLE = 37
173
+
174
+ ##
175
+ # Not enough memory or resources.
42
176
  MEMORY = 38
177
+
178
+ ##
179
+ # Can't use "open memory point" on non PCM source data, or non
180
+ # mp3/xma/adpcm data if "create compressed sample" was used.
43
181
  MEMORY_CANT_POINT = 39
182
+
183
+ ##
184
+ # Tried to call a command on a 2d sound when the command was meant for 3D
185
+ # sound.
44
186
  NEEDS_3D = 40
187
+
188
+ ##
189
+ # Tried to use a feature that requires hardware support.
45
190
  NEEDS_HARDWARE = 41
191
+
192
+ ##
193
+ # Couldn't connect to the specified host.
46
194
  NET_CONNECT = 42
195
+
196
+ ##
197
+ # A socket error occurred. This is a catch-all for socket-related errors
198
+ # not listed elsewhere.
47
199
  NET_SOCKET_ERROR = 43
200
+
201
+ ##
202
+ # The specified URL couldn't be resolved.
48
203
  NET_URL = 44
204
+
205
+ ##
206
+ # Operation on a non-blocking socket could not complete immediately.
49
207
  NET_WOULD_BLOCK = 45
208
+
209
+ ##
210
+ # Operation could not be performed because specified sound/DSP connection
211
+ # is not ready.
50
212
  NOT_READY = 46
213
+
214
+ ##
215
+ # Error initializing output device, but more specifically, the output
216
+ # device is already in use and cannot be reused.
51
217
  OUTPUT_ALLOCATED = 47
218
+
219
+ ##
220
+ # Error creating hardware sound buffer.
52
221
  OUTPUT_CREATE_BUFFER = 48
222
+
223
+ ##
224
+ # A call to a standard soundcard driver failed, which could possibly mean
225
+ # a bug in the driver or resources were missing or exhausted.
53
226
  OUTPUT_DRIVER_CALL = 49
227
+
228
+ ##
229
+ # Sound card does not support the specified format.
54
230
  OUTPUT_FORMAT = 50
231
+
232
+ ##
233
+ # Error initializing output device.
55
234
  OUTPUT_INIT = 51
235
+
236
+ ##
237
+ # The output device has no drivers installed. If pre-init, NO_SOUND is
238
+ # selected as the output mode. If post-init, the function just fails.
56
239
  OUTPUT_NO_DRIVERS = 52
240
+
241
+ ##
242
+ # An unspecified error has been returned from a plugin.
57
243
  PLUGIN = 53
244
+
245
+ ##
246
+ # A requested output, DSP unit type or codec was not available.
58
247
  PLUGIN_MISSING = 54
248
+
249
+ ##
250
+ # A resource that the plugin requires cannot be found. (ie the DLS file
251
+ # for MIDI playback)
59
252
  PLUGIN_RESOURCE = 55
253
+
254
+ ##
255
+ # A plugin was built with an unsupported SDK version.
60
256
  PLUGIN_VERSION = 56
257
+
258
+ ##
259
+ # An error occurred trying to initialize the recording device.
61
260
  RECORD = 57
261
+
262
+ ##
263
+ # Reverb properties cannot be set on this channel because a parent channel
264
+ # group owns the reverb connection.
62
265
  REVERB_CHANNEL_GROUP = 58
266
+
267
+ ##
268
+ # Specified instance in Reverb couldn't be set. Most likely because it is
269
+ # an invalid instance number or the reverb doesn't exist.
63
270
  REVERB_INSTANCE = 59
271
+
272
+ ##
273
+ # The error occurred because the sound referenced contains sub-sounds when
274
+ # it shouldn't have, or it doesn't contain sub-sounds when it should have.
275
+ # The operation may also not be able to be performed on a parent sound.
64
276
  SUBSOUNDS = 60
277
+
278
+ ##
279
+ # This subsound is already being used by another sound, you cannot have
280
+ # more than one parent to a sound. Null out the other parent's entry
281
+ # first.
65
282
  SUBSOUND_ALLOCATED = 61
283
+
284
+ ##
285
+ # Shared subsounds cannot be replaced or moved from their parent stream,
286
+ # such as when the parent stream is an FSB file.
66
287
  SUBSOUND_CANT_MOVE = 62
288
+
289
+ ##
290
+ # The specified tag could not be found or there are no tags.
67
291
  TAG_NOT_FOUND = 63
292
+
293
+ ##
294
+ # The sound created exceeds the allowable input channel count.
68
295
  TOO_MANY_CHANNELS = 64
296
+
297
+ ##
298
+ # The retrieved string is too long to fit in the supplied buffer and has
299
+ # been truncated.
69
300
  TRUNCATED = 65
301
+
302
+ ##
303
+ # Something in FMOD hasn't been implemented when it should be! Contact
304
+ # support!
70
305
  UNIMPLEMENTED = 66
306
+
307
+ ##
308
+ # This command failed because System.create or System.output was not
309
+ # called.
71
310
  UNINITIALIZED = 67
311
+
312
+ ##
313
+ # A command issued was not supported by this object. Possibly a plugin
314
+ # without certain callbacks specified.
72
315
  UNSUPPORTED = 68
316
+
317
+ ##
318
+ # The version number of this file format is not supported.
73
319
  VERSION = 69
320
+
321
+ ##
322
+ # The specified bank has already been loaded.
74
323
  EVENT_ALREADY_LOADED = 70
324
+
325
+ ##
326
+ # The live update connection failed due to the game already being
327
+ # connected.
75
328
  EVENT_LIVE_UPDATE_BUSY = 71
329
+
330
+ ##
331
+ # The live update connection failed due to the game data being out of sync
332
+ # with the tool.
76
333
  EVENT_LIVE_UPDATE_MISMATCH = 72
334
+
335
+ ##
336
+ # The live update connection timed out.
77
337
  EVENT_LIVE_UPDATE_TIMEOUT = 73
338
+
339
+ ##
340
+ # The requested event, bus or vca could not be found.
78
341
  EVENT_NOT_FOUND = 74
342
+
343
+ ##
344
+ # The Studio::System object is not yet initialized.
79
345
  STUDIO_UNINITIALIZED = 75
346
+
347
+ ##
348
+ # The specified resource is not loaded, so it can't be unloaded.
80
349
  STUDIO_NOT_LOADED = 76
350
+
351
+ ##
352
+ # An invalid string was passed to this function.
81
353
  INVALID_STRING = 77
354
+
355
+ ##
356
+ # The specified resource is already locked.
82
357
  ALREADY_LOCKED = 78
358
+
359
+ ##
360
+ # The specified resource is not locked, so it can't be unlocked.
83
361
  NOT_LOCKED = 79
362
+
363
+ ##
364
+ # The specified recording driver has been disconnected.
84
365
  RECORD_DISCONNECTED = 80
366
+
367
+ ##
368
+ # The length provided exceeds the allowable limit.
85
369
  TOO_MANY_SAMPLES = 81
86
370
  end
87
371
  end