fmod 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
- data/CONTRIBUTING.md +92 -0
- data/HISTORY.txt +23 -0
- data/PULL_REQUEST_TEMPLATE.md +17 -0
- data/README.md +23 -22
- data/fmod.gemspec +2 -30
- data/lib/fmod.rb +4 -1
- data/lib/fmod/channel.rb +3 -0
- data/lib/fmod/channel_control.rb +511 -311
- data/lib/fmod/channel_group.rb +67 -3
- data/lib/fmod/core.rb +43 -34
- data/lib/fmod/core/mode.rb +138 -0
- data/lib/fmod/core/result.rb +284 -0
- data/lib/fmod/core/sound_format.rb +8 -0
- data/lib/fmod/core/sound_type.rb +1 -0
- data/lib/fmod/core/speaker_index.rb +39 -0
- data/lib/fmod/core/speaker_mode.rb +38 -0
- data/lib/fmod/core/structure.rb +28 -1
- data/lib/fmod/system.rb +2 -2
- data/lib/fmod/version.rb +1 -1
- metadata +13 -33
data/lib/fmod/channel_group.rb
CHANGED
@@ -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
|
-
|
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,
|
data/lib/fmod/core.rb
CHANGED
@@ -1,35 +1,44 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
require_relative './core/
|
10
|
-
require_relative './core/
|
11
|
-
require_relative './core/
|
12
|
-
require_relative './core/
|
13
|
-
require_relative './core/
|
14
|
-
require_relative './core/
|
15
|
-
require_relative './core/
|
16
|
-
require_relative './core/
|
17
|
-
require_relative './core/
|
18
|
-
require_relative './core/
|
19
|
-
require_relative './core/
|
20
|
-
require_relative './core/
|
21
|
-
require_relative './core/
|
22
|
-
require_relative './core/
|
23
|
-
require_relative './core/
|
24
|
-
require_relative './core/
|
25
|
-
require_relative './core/
|
26
|
-
require_relative './core/
|
27
|
-
require_relative './core/
|
28
|
-
require_relative './core/
|
29
|
-
require_relative './core/
|
30
|
-
require_relative './core/
|
31
|
-
require_relative './core/
|
32
|
-
require_relative './core/
|
33
|
-
require_relative './core/
|
34
|
-
require_relative './core/
|
35
|
-
require_relative './core/
|
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
|
data/lib/fmod/core/mode.rb
CHANGED
@@ -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
|
data/lib/fmod/core/result.rb
CHANGED
@@ -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
|