fmod 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.travis.yml +5 -0
- data/.yardopts +2 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +21 -0
- data/README.md +96 -0
- data/Rakefile +1 -0
- data/bin/console +28 -0
- data/bin/setup +8 -0
- data/ext/fmod.dll +0 -0
- data/ext/fmod64.dll +0 -0
- data/ext/libfmod.dylib +0 -0
- data/ext/llbfmod.zip +0 -0
- data/extras/FMOD Studio Programmers API for Windows.chm +0 -0
- data/fmod.gemspec +58 -0
- data/lib/fmod.rb +564 -0
- data/lib/fmod/channel.rb +151 -0
- data/lib/fmod/channel_control.rb +821 -0
- data/lib/fmod/channel_group.rb +61 -0
- data/lib/fmod/core.rb +35 -0
- data/lib/fmod/core/bool_description.rb +18 -0
- data/lib/fmod/core/channel_mask.rb +24 -0
- data/lib/fmod/core/data_description.rb +14 -0
- data/lib/fmod/core/driver.rb +59 -0
- data/lib/fmod/core/dsp_description.rb +7 -0
- data/lib/fmod/core/dsp_index.rb +9 -0
- data/lib/fmod/core/dsp_type.rb +43 -0
- data/lib/fmod/core/extensions.rb +28 -0
- data/lib/fmod/core/file_system.rb +86 -0
- data/lib/fmod/core/filter_type.rb +19 -0
- data/lib/fmod/core/float_description.rb +16 -0
- data/lib/fmod/core/guid.rb +50 -0
- data/lib/fmod/core/init_flags.rb +19 -0
- data/lib/fmod/core/integer_description.rb +26 -0
- data/lib/fmod/core/mode.rb +36 -0
- data/lib/fmod/core/output_type.rb +30 -0
- data/lib/fmod/core/parameter_info.rb +41 -0
- data/lib/fmod/core/parameter_type.rb +10 -0
- data/lib/fmod/core/result.rb +88 -0
- data/lib/fmod/core/reverb.rb +217 -0
- data/lib/fmod/core/sound_ex_info.rb +7 -0
- data/lib/fmod/core/sound_format.rb +30 -0
- data/lib/fmod/core/sound_group_behavior.rb +9 -0
- data/lib/fmod/core/sound_type.rb +80 -0
- data/lib/fmod/core/speaker_index.rb +18 -0
- data/lib/fmod/core/speaker_mode.rb +16 -0
- data/lib/fmod/core/spectrum_data.rb +12 -0
- data/lib/fmod/core/structure.rb +23 -0
- data/lib/fmod/core/structures.rb +41 -0
- data/lib/fmod/core/tag.rb +51 -0
- data/lib/fmod/core/tag_data_type.rb +14 -0
- data/lib/fmod/core/time_unit.rb +40 -0
- data/lib/fmod/core/vector.rb +42 -0
- data/lib/fmod/core/window_type.rb +12 -0
- data/lib/fmod/dsp.rb +510 -0
- data/lib/fmod/dsp_connection.rb +113 -0
- data/lib/fmod/effects.rb +38 -0
- data/lib/fmod/effects/channel_mix.rb +101 -0
- data/lib/fmod/effects/chorus.rb +30 -0
- data/lib/fmod/effects/compressor.rb +52 -0
- data/lib/fmod/effects/convolution_reverb.rb +31 -0
- data/lib/fmod/effects/delay.rb +44 -0
- data/lib/fmod/effects/distortion.rb +16 -0
- data/lib/fmod/effects/dsps.rb +10 -0
- data/lib/fmod/effects/echo.rb +37 -0
- data/lib/fmod/effects/envelope_follower.rb +31 -0
- data/lib/fmod/effects/fader.rb +16 -0
- data/lib/fmod/effects/fft.rb +38 -0
- data/lib/fmod/effects/flange.rb +37 -0
- data/lib/fmod/effects/high_pass.rb +24 -0
- data/lib/fmod/effects/high_pass_simple.rb +25 -0
- data/lib/fmod/effects/it_echo.rb +56 -0
- data/lib/fmod/effects/it_lowpass.rb +36 -0
- data/lib/fmod/effects/ladspa_plugin.rb +14 -0
- data/lib/fmod/effects/limiter.rb +32 -0
- data/lib/fmod/effects/loudness_meter.rb +19 -0
- data/lib/fmod/effects/low_pass.rb +25 -0
- data/lib/fmod/effects/low_pass_simple.rb +26 -0
- data/lib/fmod/effects/mixer.rb +11 -0
- data/lib/fmod/effects/multiband_eq.rb +153 -0
- data/lib/fmod/effects/normalize.rb +47 -0
- data/lib/fmod/effects/object_pan.rb +62 -0
- data/lib/fmod/effects/oscillator.rb +52 -0
- data/lib/fmod/effects/pan.rb +166 -0
- data/lib/fmod/effects/param_eq.rb +36 -0
- data/lib/fmod/effects/pitch_shift.rb +47 -0
- data/lib/fmod/effects/return.rb +18 -0
- data/lib/fmod/effects/send.rb +21 -0
- data/lib/fmod/effects/sfx_reverb.rb +87 -0
- data/lib/fmod/effects/three_eq.rb +41 -0
- data/lib/fmod/effects/transceiver.rb +57 -0
- data/lib/fmod/effects/tremolo.rb +67 -0
- data/lib/fmod/effects/vst_plugin.rb +12 -0
- data/lib/fmod/effects/winamp_plugin.rb +12 -0
- data/lib/fmod/error.rb +108 -0
- data/lib/fmod/geometry.rb +380 -0
- data/lib/fmod/handle.rb +129 -0
- data/lib/fmod/reverb3D.rb +98 -0
- data/lib/fmod/sound.rb +810 -0
- data/lib/fmod/sound_group.rb +54 -0
- data/lib/fmod/system.rb +1242 -0
- data/lib/fmod/version.rb +3 -0
- metadata +220 -0
@@ -0,0 +1,113 @@
|
|
1
|
+
|
2
|
+
module FMOD
|
3
|
+
class DspConnection < Handle
|
4
|
+
|
5
|
+
##
|
6
|
+
# Default connection type. Audio is mixed from the input to the output DSP's
|
7
|
+
# audible buffer.
|
8
|
+
STANDARD = 0
|
9
|
+
##
|
10
|
+
# Sidechain connection type. Audio is mixed from the input to the output
|
11
|
+
# DSP's sidechain buffer.
|
12
|
+
SIDECHAIN = 1
|
13
|
+
##
|
14
|
+
# Send connection type. Audio is mixed from the input to the output DSP's
|
15
|
+
# audible buffer, but the input is *NOT* executed, only copied from. A
|
16
|
+
# standard connection or sidechain needs to make an input execute to
|
17
|
+
# generate.rb data.
|
18
|
+
SEND = 2
|
19
|
+
##
|
20
|
+
# Send sidechain connection type. Audio is mixed from the input to the
|
21
|
+
# output DSP's sidechain buffer, but the input is *NOT* executed, only
|
22
|
+
# copied from. A standard connection or sidechain needs to make an input
|
23
|
+
# execute to generate.rb data.
|
24
|
+
SEND_SIDECHAIN = 3
|
25
|
+
|
26
|
+
##
|
27
|
+
# @!attribute [r] type
|
28
|
+
# @return [Integer] the type of the connection between 2 DSP units.
|
29
|
+
#
|
30
|
+
# Will be one of the following:
|
31
|
+
# * {STANDARD}
|
32
|
+
# * {SIDECHAIN}
|
33
|
+
# * {SEND}
|
34
|
+
# * {SEND_SIDECHAIN}
|
35
|
+
integer_reader(:type, :DSPConnection_GetType)
|
36
|
+
|
37
|
+
##
|
38
|
+
# @!attribute mix
|
39
|
+
# The volume of the connection - the scale level of the input before being
|
40
|
+
# passed to the output.
|
41
|
+
# * *Minimum:* 0.0 (silent)
|
42
|
+
# * *Maximum:* 1.0 (full volume)
|
43
|
+
# * *Default:* 1.0
|
44
|
+
# @return [Float] the volume or mix level.
|
45
|
+
float_reader(:mix, :DSPConnection_GetMix)
|
46
|
+
float_writer(:mix=, :DSPConnection_SetMix, 0.0, 1.0)
|
47
|
+
|
48
|
+
##
|
49
|
+
# @!attribute [r] input
|
50
|
+
# @return [Dsp] the DSP unit that is the input of this connection.
|
51
|
+
def input
|
52
|
+
dsp = int_ptr
|
53
|
+
FMOD.invoke(:DSPConnection_GetInput, self, dsp)
|
54
|
+
Dsp.from_handle(dsp)
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# @!attribute [r] input
|
59
|
+
# @return [Dsp] the DSP unit that is the output of this connection.
|
60
|
+
def output
|
61
|
+
dsp = int_ptr
|
62
|
+
FMOD.invoke(:DSPConnection_GetOutput, self, dsp)
|
63
|
+
Dsp.from_handle(dsp)
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# @!attribute matrix
|
68
|
+
# A 2D pan matrix that maps input channels (columns) to output speakers
|
69
|
+
# (rows).
|
70
|
+
#
|
71
|
+
# Levels can be below 0 to invert a signal and above 1 to amplify the
|
72
|
+
# signal. Note that increasing the signal level too far may cause audible
|
73
|
+
# distortion.
|
74
|
+
#
|
75
|
+
# The matrix size will generally be the size of the number of channels in
|
76
|
+
# the current speaker mode. Use {System.software_format }to determine this.
|
77
|
+
#
|
78
|
+
# If a matrix already exists then the matrix passed in will applied over the
|
79
|
+
# top of it. The input matrix can be smaller than the existing matrix.
|
80
|
+
#
|
81
|
+
# A "unit" matrix allows a signal to pass through unchanged. For example for
|
82
|
+
# a 5.1 matrix a unit matrix would look like this:
|
83
|
+
# [[ 1, 0, 0, 0, 0, 0 ]
|
84
|
+
# [ 0, 1, 0, 0, 0, 0 ]
|
85
|
+
# [ 0, 0, 1, 0, 0, 0 ]
|
86
|
+
# [ 0, 0, 0, 1, 0, 0 ]
|
87
|
+
# [ 0, 0, 0, 0, 1, 0 ]
|
88
|
+
# [ 0, 0, 0, 0, 0, 1 ]]
|
89
|
+
#
|
90
|
+
# @return [Array<Array<Float>>] a 2-dimensional array of volume levels in
|
91
|
+
# row-major order. Each row represents an output speaker, each column
|
92
|
+
# represents an input channel.
|
93
|
+
def matrix
|
94
|
+
o, i = "\0" * SIZEOF_INT, "\0" * SIZEOF_INT
|
95
|
+
FMOD.invoke(:DSPConnection_GetMixMatrix, self, nil, o, i, 0)
|
96
|
+
o, i = o.unpack1('l'), i.unpack1('l')
|
97
|
+
return [] if o.zero? || i.zero?
|
98
|
+
buffer = "\0" * (SIZEOF_FLOAT * o * i)
|
99
|
+
FMOD.invoke(:DSPConnection_GetMixMatrix, self, buffer, nil, nil, 0)
|
100
|
+
buffer.unpack('f*').each_slice(i).to_a
|
101
|
+
end
|
102
|
+
|
103
|
+
def matrix=(matrix)
|
104
|
+
out_count, in_count = matrix.size, matrix.first.size
|
105
|
+
unless matrix.all? { |ary| ary.size == in_count }
|
106
|
+
raise Error, "Matrix contains unequal length input channels."
|
107
|
+
end
|
108
|
+
data = matrix.flatten.pack('f*')
|
109
|
+
FMOD.invoke(:DSPConnection_SetMixMatrix, self, data,
|
110
|
+
out_count, in_count, 0)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
data/lib/fmod/effects.rb
ADDED
@@ -0,0 +1,38 @@
|
|
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'
|
@@ -0,0 +1,101 @@
|
|
1
|
+
|
2
|
+
module FMOD
|
3
|
+
module Effects
|
4
|
+
|
5
|
+
##
|
6
|
+
# This unit provides per signal channel gain, and output channel mapping to
|
7
|
+
# allow 1 multichannel signal made up of many groups of signals to map to a
|
8
|
+
# single output signal.
|
9
|
+
#
|
10
|
+
# @attr output_grouping [Integer] Determines the output mapping.
|
11
|
+
#
|
12
|
+
# This value will set the output speaker format for the DSP, and also map
|
13
|
+
# the incoming channels to the outgoing channels in a round-robin fashion.
|
14
|
+
# Use this for example play a 32 channel input signal as if it were a
|
15
|
+
# repeating group of output signals.
|
16
|
+
#
|
17
|
+
# {ALL_MONO} = all incoming channels are mixed to a mono output.
|
18
|
+
#
|
19
|
+
# {ALL_STEREO} = all incoming channels are mixed to a stereo output, ie
|
20
|
+
# even incoming channels 0,2,4,6,etc are mixed to left, and odd incoming
|
21
|
+
# channels 1,3,5,7,etc are mixed to right.
|
22
|
+
#
|
23
|
+
# {ALL_5POINT1} = all incoming channels are mixed to a 5.1 output. If
|
24
|
+
# there are less than 6 coming in, it will just fill the first n channels
|
25
|
+
# in the 6 output channels. If there are more, then it will repeat the
|
26
|
+
# input pattern to the output like it did with the stereo case, ie 12
|
27
|
+
# incoming channels are mapped as 0-5 mixed to the 5.1 output and 6 to 11
|
28
|
+
# mapped to the 5.1 output.
|
29
|
+
#
|
30
|
+
# {ALL_LFE} = all incoming channels are mixed to a 5.1 output but via the
|
31
|
+
# LFE channel only.
|
32
|
+
# * *Default:* {DEFAULT}
|
33
|
+
# @see DEFAULT
|
34
|
+
# @see ALL_MONO
|
35
|
+
# @see ALL_STEREO
|
36
|
+
# @see ALL_QUAD
|
37
|
+
# @see ALL_5POINT1
|
38
|
+
# @see ALL_7POINT1
|
39
|
+
# @see ALL_LFE
|
40
|
+
class ChannelMix < Dsp
|
41
|
+
|
42
|
+
##
|
43
|
+
# Output channel count = input channel count.
|
44
|
+
# @see SpeakerIndex
|
45
|
+
DEFAULT = 0
|
46
|
+
|
47
|
+
##
|
48
|
+
# Output channel count = 1. Mapping: Mono, Mono, Mono, Mono, Mono,
|
49
|
+
# Mono, ... (each channel all the way up to {FMOD::MAX_CHANNEL_WIDTH}
|
50
|
+
# channels are treated as if they were mono)
|
51
|
+
ALL_MONO = 1
|
52
|
+
|
53
|
+
##
|
54
|
+
# Output channel count = 2. Mapping: Left, Right, Left, Right, Left,
|
55
|
+
# Right, ... (each pair of channels is treated as stereo all the way up to
|
56
|
+
# {FMOD::MAX_CHANNEL_WIDTH} channels)
|
57
|
+
ALL_STEREO = 2
|
58
|
+
|
59
|
+
##
|
60
|
+
# Output channel count = 4. Mapping: Repeating pattern of Front Left,
|
61
|
+
# Front Right, Surround Left, Surround Right
|
62
|
+
ALL_QUAD = 3
|
63
|
+
|
64
|
+
##
|
65
|
+
# Output channel count = 6. Mapping: Repeating pattern of Front Left,
|
66
|
+
# Front Right, Center, LFE, Surround Left, Surround Right.
|
67
|
+
ALL_5POINT1 = 4
|
68
|
+
|
69
|
+
##
|
70
|
+
# Output channel count = 8. Mapping: Repeating pattern of Front Left,
|
71
|
+
# Front Right, Center, LFE, Surround Left, Surround Right, Back Left, Back
|
72
|
+
# Right.
|
73
|
+
ALL_7POINT1 = 5
|
74
|
+
|
75
|
+
##
|
76
|
+
# Output channel count = 6. Mapping: Repeating pattern of LFE in a 5.1
|
77
|
+
# output signal.
|
78
|
+
ALL_LFE = 6
|
79
|
+
|
80
|
+
integer_param(0, :output_grouping, min: 0, max: 6)
|
81
|
+
|
82
|
+
##
|
83
|
+
# Retrieves the gain for the specified channel.
|
84
|
+
# @param channel [Integer] The channel index, clamped between 0 and 31.
|
85
|
+
# @return [Float] The gain.
|
86
|
+
def [](channel)
|
87
|
+
get_float(channel.clamp(0, 31) + 1)
|
88
|
+
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# Sets the gain, in dB for the specified channel.
|
92
|
+
# @param channel [Integer] The channel index, clamped between 0 and 31.
|
93
|
+
# @param gain [Float] The gain, in dB, clamped between -80.0 and 10.0.
|
94
|
+
# @return [Float] The gain.
|
95
|
+
def []=(channel, gain)
|
96
|
+
set_float(channel.clamp(0, 31) + 1, gain.clamp(-80.0, 10.0))
|
97
|
+
gain
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
module FMOD
|
3
|
+
module Effects
|
4
|
+
|
5
|
+
##
|
6
|
+
# This unit produces a chorus effect on the sound.
|
7
|
+
#
|
8
|
+
# Chorus is an effect where the sound is more "spacious" due to 1 to 3
|
9
|
+
# versions of the sound being played along side the original signal but with
|
10
|
+
# the pitch of each copy modulating on a sine wave.
|
11
|
+
#
|
12
|
+
# @attr mix [Float] Volume of original signal to pass to output.
|
13
|
+
# * *Minimum:* 0.0
|
14
|
+
# * *Maximum:* 100.0
|
15
|
+
# * *Default:* 50.0
|
16
|
+
# @attr rate [Float] Chorus modulation rate in Hz.
|
17
|
+
# * *Minimum:* 0.0
|
18
|
+
# * *Maximum:* 20.0
|
19
|
+
# * *Default:* 0.8
|
20
|
+
# @attr depth [Float] Chorus modulation depth.
|
21
|
+
# * *Minimum:* 0.0
|
22
|
+
# * *Maximum:* 100.0
|
23
|
+
# * *Default:* 3.0
|
24
|
+
class Chorus < Dsp
|
25
|
+
float_param(0, :mix, min: 0.0, max: 100.0)
|
26
|
+
float_param(1, :rate, min: 0.0, max: 20.0)
|
27
|
+
float_param(2, :depth, min: 0.0, max: 100.0)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module FMOD
|
2
|
+
module Effects
|
3
|
+
|
4
|
+
##
|
5
|
+
# This unit implements dynamic compression (linked/unlinked multichannel, wide-band).
|
6
|
+
#
|
7
|
+
# @attr threshold [Float] Threshold level (dB).
|
8
|
+
# * *Minimum:* -80.0
|
9
|
+
# * *Maximum:* 0.0
|
10
|
+
# * *Default:* 0.0
|
11
|
+
# @attr ratio [Float] Compression Ratio (dB/dB).
|
12
|
+
# * *Minimum:* 1.0
|
13
|
+
# * *Maximum:* 50.0
|
14
|
+
# * *Default:* 2.5
|
15
|
+
# @attr attack [Float] Attack time (milliseconds).
|
16
|
+
# * *Minimum:* 0.1
|
17
|
+
# * *Maximum:* 1000.0
|
18
|
+
# * *Default:* 20.0
|
19
|
+
# @attr release_time [Float] Release time (milliseconds).
|
20
|
+
# * *Minimum:* 10.0
|
21
|
+
# * *Maximum:* 5000.0
|
22
|
+
# * *Default:* 100.0
|
23
|
+
# @attr make_up_gain [Float] Make-up gain (dB) applied after limiting.
|
24
|
+
# * *Minimum:* 0.0
|
25
|
+
# * *Maximum:* 30.0
|
26
|
+
# * *Default:* 0.0
|
27
|
+
# @attr use_sidechain [Boolean] Whether to analyse the sidechain signal
|
28
|
+
# instead of the input signal.
|
29
|
+
# * *Default:* +false+
|
30
|
+
# @attr linked [Boolean]
|
31
|
+
# * *true:* Linked
|
32
|
+
# * *false:* Independent (compressor per channel)
|
33
|
+
# * *Default:* +false+
|
34
|
+
class Compressor < Dsp
|
35
|
+
float_param(0, :threshold, min: -60.0, mix: 0.0)
|
36
|
+
float_param(1, :ratio, min: 1.0, max: 50.0)
|
37
|
+
float_param(2, :attack, min: 0.1, max: 500.0)
|
38
|
+
float_param(3, :release_time, min: 10.0, max: 5000.0)
|
39
|
+
float_param(4, :make_up_gain, min: -30.0, max: 30.0)
|
40
|
+
bool_param(6, :linked)
|
41
|
+
|
42
|
+
def sidechain
|
43
|
+
get_data(5).to_s(SIZEOF_INT).unpack1('l') != 0
|
44
|
+
end
|
45
|
+
|
46
|
+
def sidechain=(bool)
|
47
|
+
value = [bool.to_i].pack('l')
|
48
|
+
set_data(5, value)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module FMOD
|
2
|
+
module Effects
|
3
|
+
|
4
|
+
##
|
5
|
+
# This unit implements convolution reverb.
|
6
|
+
#
|
7
|
+
# @attr_writer ir [Pointer|String] Array of signed 16-bit (short) PCM data
|
8
|
+
# to be used as reverb IR. First member of the array should be a 16-bit
|
9
|
+
# value (short) which specifies the number of channels. Array looks like
|
10
|
+
# [index 0 = channel_count][index 1+ = raw 16-bit PCM data].
|
11
|
+
#
|
12
|
+
# Data is copied internally so source can be freed.
|
13
|
+
# @attr wet [Float] Volume of echo signal to pass to output in dB.
|
14
|
+
# * *Minimum:* -80.0
|
15
|
+
# * *Maximum:* 10.0
|
16
|
+
# * *Default:* 0.0
|
17
|
+
# @attr dry [Float] Original sound volume in dB.
|
18
|
+
# * *Minimum:* -80.0
|
19
|
+
# * *Maximum:* 10.0
|
20
|
+
# * *Default:* 0.0
|
21
|
+
# @attr linked [Boolean] Indicates if channels are mixed together before
|
22
|
+
# processing through the reverb.
|
23
|
+
# * *Default:* +true+
|
24
|
+
class ConvolutionReverb < Dsp
|
25
|
+
data_param(0, :ir, write_only: true)
|
26
|
+
float_param(1, :wet, min: -80.0, max: 10.0)
|
27
|
+
float_param(2, :dry, min: -80.0, max: 10.0)
|
28
|
+
bool_param(3, :linked)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
module FMOD
|
3
|
+
module Effects
|
4
|
+
|
5
|
+
##
|
6
|
+
# This unit produces different delays on individual channels of the sound.
|
7
|
+
#
|
8
|
+
# @note Every time MaxDelay is changed, the plugin re-allocates the delay
|
9
|
+
# buffer. This means the delay will disappear at that time while it
|
10
|
+
# refills its new buffer.
|
11
|
+
#
|
12
|
+
# A larger {#max_delay} results in larger amounts of memory allocated.
|
13
|
+
#
|
14
|
+
# Channel delays above {#max_delay} will be clipped to MaxDelay and the
|
15
|
+
# delay buffer will not be re-sized.
|
16
|
+
#
|
17
|
+
# @attr max_delay [Float] Maximum delay in ms.
|
18
|
+
# * *Minimum:* 0.0
|
19
|
+
# * *Maximum:* 10000.0
|
20
|
+
# * *Default:* 10.0
|
21
|
+
class Delay < Dsp
|
22
|
+
|
23
|
+
##
|
24
|
+
# Retrieves the delay, in ms, for the specified channel.
|
25
|
+
# @param channel [Integer] The channel index to retrieve (0 to 15).
|
26
|
+
# @return [Float]
|
27
|
+
def [](channel)
|
28
|
+
get_float(channel.clamp(0, 15))
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Sets the delay, in ms, for the specified channel.
|
33
|
+
# @param channel [Integer] The channel index to set (0 to 15).
|
34
|
+
# @param delay [Float] The delay value, clamped between 0.0 and 10000.0.
|
35
|
+
# @return [Float] The delay.
|
36
|
+
def []=(channel, delay)
|
37
|
+
set_float(channel.clamp(0, 15), delay.clamp(0.0, 10000.0))
|
38
|
+
delay
|
39
|
+
end
|
40
|
+
|
41
|
+
integer_param(16, :max_delay, min: 0.0, max: 10000.0)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
module FMOD
|
3
|
+
module Effects
|
4
|
+
|
5
|
+
##
|
6
|
+
# This unit distorts the sound.
|
7
|
+
#
|
8
|
+
# @attr distortion [Float] Distortion value.
|
9
|
+
# * *Minimum:* 0.0
|
10
|
+
# * *Maximum:* 1.0
|
11
|
+
# * *Default:* 0.5
|
12
|
+
class Distortion < Dsp
|
13
|
+
float_param(0, :distortion, min: 0.0, max: 1.0)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module FMOD
|
3
|
+
module Effects
|
4
|
+
|
5
|
+
##
|
6
|
+
# This unit produces an echo on the sound and fades out at the desired rate.
|
7
|
+
#
|
8
|
+
# @note Every time the delay is changed, the plugin re-allocates the echo
|
9
|
+
# buffer. This means the echo will disappear at that time while it refills
|
10
|
+
# its new buffer.
|
11
|
+
#
|
12
|
+
# Larger echo delays result in larger amounts of memory allocated.
|
13
|
+
#
|
14
|
+
# @attr delay [Float] Echo delay in ms.
|
15
|
+
# * *Minimum:* 10.0
|
16
|
+
# * *Maximum:* 5000.0
|
17
|
+
# * *Default:* 500.0
|
18
|
+
# @attr feedback [Float] Echo decay per delay.
|
19
|
+
# * *Minimum:* 0.0 (total decay)
|
20
|
+
# * *Maximum:* 100.0 (no decay)
|
21
|
+
# * *Default:* 50.0
|
22
|
+
# @attr dry_level [Float] Original sound volume in dB.
|
23
|
+
# * *Minimum:* -80.0
|
24
|
+
# * *Maximum:* 10.0
|
25
|
+
# * *Default:* 0.0
|
26
|
+
# @attr wet_level [Float] Volume of echo signal to pass to output in dB.
|
27
|
+
# * *Minimum:* -80.0
|
28
|
+
# * *Maximum:* 10.0
|
29
|
+
# * *Default:* 0.0
|
30
|
+
class Echo < Dsp
|
31
|
+
float_param(0, :delay, min: 10.0, max: 5000.0)
|
32
|
+
float_param(1, :feedback, min: 0.0, max: 100.0)
|
33
|
+
float_param(2, :dry_level, min: -80.0, max: 10.0)
|
34
|
+
float_param(3, :wet_level, min: -80.0, max: 10.0)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|