fmod 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.travis.yml +5 -0
  4. data/.yardopts +2 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +5 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +96 -0
  9. data/Rakefile +1 -0
  10. data/bin/console +28 -0
  11. data/bin/setup +8 -0
  12. data/ext/fmod.dll +0 -0
  13. data/ext/fmod64.dll +0 -0
  14. data/ext/libfmod.dylib +0 -0
  15. data/ext/llbfmod.zip +0 -0
  16. data/extras/FMOD Studio Programmers API for Windows.chm +0 -0
  17. data/fmod.gemspec +58 -0
  18. data/lib/fmod.rb +564 -0
  19. data/lib/fmod/channel.rb +151 -0
  20. data/lib/fmod/channel_control.rb +821 -0
  21. data/lib/fmod/channel_group.rb +61 -0
  22. data/lib/fmod/core.rb +35 -0
  23. data/lib/fmod/core/bool_description.rb +18 -0
  24. data/lib/fmod/core/channel_mask.rb +24 -0
  25. data/lib/fmod/core/data_description.rb +14 -0
  26. data/lib/fmod/core/driver.rb +59 -0
  27. data/lib/fmod/core/dsp_description.rb +7 -0
  28. data/lib/fmod/core/dsp_index.rb +9 -0
  29. data/lib/fmod/core/dsp_type.rb +43 -0
  30. data/lib/fmod/core/extensions.rb +28 -0
  31. data/lib/fmod/core/file_system.rb +86 -0
  32. data/lib/fmod/core/filter_type.rb +19 -0
  33. data/lib/fmod/core/float_description.rb +16 -0
  34. data/lib/fmod/core/guid.rb +50 -0
  35. data/lib/fmod/core/init_flags.rb +19 -0
  36. data/lib/fmod/core/integer_description.rb +26 -0
  37. data/lib/fmod/core/mode.rb +36 -0
  38. data/lib/fmod/core/output_type.rb +30 -0
  39. data/lib/fmod/core/parameter_info.rb +41 -0
  40. data/lib/fmod/core/parameter_type.rb +10 -0
  41. data/lib/fmod/core/result.rb +88 -0
  42. data/lib/fmod/core/reverb.rb +217 -0
  43. data/lib/fmod/core/sound_ex_info.rb +7 -0
  44. data/lib/fmod/core/sound_format.rb +30 -0
  45. data/lib/fmod/core/sound_group_behavior.rb +9 -0
  46. data/lib/fmod/core/sound_type.rb +80 -0
  47. data/lib/fmod/core/speaker_index.rb +18 -0
  48. data/lib/fmod/core/speaker_mode.rb +16 -0
  49. data/lib/fmod/core/spectrum_data.rb +12 -0
  50. data/lib/fmod/core/structure.rb +23 -0
  51. data/lib/fmod/core/structures.rb +41 -0
  52. data/lib/fmod/core/tag.rb +51 -0
  53. data/lib/fmod/core/tag_data_type.rb +14 -0
  54. data/lib/fmod/core/time_unit.rb +40 -0
  55. data/lib/fmod/core/vector.rb +42 -0
  56. data/lib/fmod/core/window_type.rb +12 -0
  57. data/lib/fmod/dsp.rb +510 -0
  58. data/lib/fmod/dsp_connection.rb +113 -0
  59. data/lib/fmod/effects.rb +38 -0
  60. data/lib/fmod/effects/channel_mix.rb +101 -0
  61. data/lib/fmod/effects/chorus.rb +30 -0
  62. data/lib/fmod/effects/compressor.rb +52 -0
  63. data/lib/fmod/effects/convolution_reverb.rb +31 -0
  64. data/lib/fmod/effects/delay.rb +44 -0
  65. data/lib/fmod/effects/distortion.rb +16 -0
  66. data/lib/fmod/effects/dsps.rb +10 -0
  67. data/lib/fmod/effects/echo.rb +37 -0
  68. data/lib/fmod/effects/envelope_follower.rb +31 -0
  69. data/lib/fmod/effects/fader.rb +16 -0
  70. data/lib/fmod/effects/fft.rb +38 -0
  71. data/lib/fmod/effects/flange.rb +37 -0
  72. data/lib/fmod/effects/high_pass.rb +24 -0
  73. data/lib/fmod/effects/high_pass_simple.rb +25 -0
  74. data/lib/fmod/effects/it_echo.rb +56 -0
  75. data/lib/fmod/effects/it_lowpass.rb +36 -0
  76. data/lib/fmod/effects/ladspa_plugin.rb +14 -0
  77. data/lib/fmod/effects/limiter.rb +32 -0
  78. data/lib/fmod/effects/loudness_meter.rb +19 -0
  79. data/lib/fmod/effects/low_pass.rb +25 -0
  80. data/lib/fmod/effects/low_pass_simple.rb +26 -0
  81. data/lib/fmod/effects/mixer.rb +11 -0
  82. data/lib/fmod/effects/multiband_eq.rb +153 -0
  83. data/lib/fmod/effects/normalize.rb +47 -0
  84. data/lib/fmod/effects/object_pan.rb +62 -0
  85. data/lib/fmod/effects/oscillator.rb +52 -0
  86. data/lib/fmod/effects/pan.rb +166 -0
  87. data/lib/fmod/effects/param_eq.rb +36 -0
  88. data/lib/fmod/effects/pitch_shift.rb +47 -0
  89. data/lib/fmod/effects/return.rb +18 -0
  90. data/lib/fmod/effects/send.rb +21 -0
  91. data/lib/fmod/effects/sfx_reverb.rb +87 -0
  92. data/lib/fmod/effects/three_eq.rb +41 -0
  93. data/lib/fmod/effects/transceiver.rb +57 -0
  94. data/lib/fmod/effects/tremolo.rb +67 -0
  95. data/lib/fmod/effects/vst_plugin.rb +12 -0
  96. data/lib/fmod/effects/winamp_plugin.rb +12 -0
  97. data/lib/fmod/error.rb +108 -0
  98. data/lib/fmod/geometry.rb +380 -0
  99. data/lib/fmod/handle.rb +129 -0
  100. data/lib/fmod/reverb3D.rb +98 -0
  101. data/lib/fmod/sound.rb +810 -0
  102. data/lib/fmod/sound_group.rb +54 -0
  103. data/lib/fmod/system.rb +1242 -0
  104. data/lib/fmod/version.rb +3 -0
  105. metadata +220 -0
@@ -0,0 +1,31 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # @deprecated Deprecated and will be removed in a future release.
7
+ #
8
+ # This unit tracks the envelope of the input/side-chain signal.
9
+ #
10
+ # @attr attack [Float] Attack time (milliseconds).
11
+ # * *Minimum:* 0.1
12
+ # * *Maximum:* 1000.0
13
+ # * *Default:* 20.0
14
+ # @attr release [Float] Release time (milliseconds).
15
+ # * *Minimum:* 10.0
16
+ # * *Maximum:* 5000.0
17
+ # * *Default:* 100.0
18
+ # @attr_reader envelope [Float] Current value of the envelope.
19
+ # * *Minimum:* 0.0
20
+ # * *Maximum:* 1.0
21
+ # @attr side_chain [Fiddle::Pointer|String] Whether to analyse the
22
+ # side-chain signal instead of the input signal.
23
+ # @note This unit does not affect the incoming signal.
24
+ class EnvelopeFollower < Dsp
25
+ float_param(0, :attack, min: 0.1, max: 1000.0)
26
+ float_param(1, :release, min: 10.0, max: 5000.0)
27
+ float_param(2, :envelope, readonly: true)
28
+ data_param(3, :side_chain)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # This unit pans and scales the volume of a unit.
7
+ #
8
+ # @attr gain [Float] Signal gain in dB.
9
+ # * *Minimum:* -80.0
10
+ # * *Maximum:* 10.0
11
+ # * *Default:* 0.0
12
+ class Fader < Dsp
13
+ float_param(0, :gain, min: -80.0, max: 10.0)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,38 @@
1
+ module FMOD
2
+ module Effects
3
+
4
+ ##
5
+ # This unit simply analyzes the signal and provides spectrum information.
6
+ #
7
+ # Set the attributes for the spectrum analysis with {#window_size} and
8
+ # {#window_type}, and retrieve the results with {#spectrum} and
9
+ # {#dominant_frequency}.
10
+ #
11
+ # @attr window_size [Integer] The size of the FFT window. Must be a power of
12
+ # 2.
13
+ # * *Minimum:* 128
14
+ # * *Maximum:* 16384
15
+ # * *Default:* 2048
16
+ # * *Valid:* 128, 256, 512, 1024, 2048, 4096, 8192, 16384
17
+ # @attr window_type [Integer] The shape of the FFT window.
18
+ # * *Minimum:* 0
19
+ # * *Maximum:* 5
20
+ # * *Default:* {WindowType::HAMMING}
21
+ # @see WindowType
22
+ # @attr_reader spectrum [Pointer] Retrieves a pointer to the current
23
+ # spectrum values between 0 and 1 for each "FFT bin".
24
+ # @attr_reader dominant_frequency [Float] The dominant frequencies for each
25
+ # channel.
26
+ #
27
+ # @see SpectrumData
28
+ class FFT < Dsp
29
+ integer_param(0, :window_size, min: 128, max: 16384)
30
+ integer_param(1, :window_type, min: 0, max: 5)
31
+ data_param(2, :spectrum, readonly: true)
32
+ float_param(3, :dominant_frequency, readonly: true)
33
+
34
+ # TODO Get SpectrumData structs
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,37 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # This unit produces a flange effect on the sound.
7
+ #
8
+ # Flange is an effect where the signal is played twice at the same time, and
9
+ # one copy slides back and forth creating a whooshing or flanging effect.
10
+ #
11
+ # As there are 2 copies of the same signal, by default each signal is given
12
+ # 50% mix, so that the total is not louder than the original unaffected
13
+ # signal.
14
+ #
15
+ # Flange depth is a percentage of a 10ms shift from the original signal.
16
+ # Anything above 10ms is not considered flange because to the ear it begins
17
+ # to "echo" so 10ms is the highest value possible.
18
+ #
19
+ # @attr mix [Float] Percentage of wet signal in mix.
20
+ # * *Minimum:* 0.0
21
+ # * *Maximum:* 100.0
22
+ # * *Default:* 50.0
23
+ # @attr depth [Float] Flange depth (percentage of 40ms delay).
24
+ # * *Minimum:* 0.01
25
+ # * *Maximum:* 1.0
26
+ # * *Default:* 1.0
27
+ # @attr rate [Float] Flange speed in Hz.
28
+ # * *Minimum:* 0.0
29
+ # * *Maximum:* 20.0
30
+ # * *Default:* 0.1
31
+ class Flange < Dsp
32
+ float_param(0, :mix, min: 0.0, max: 100.0)
33
+ float_param(1, :depth, min: 0.01, max: 1.0)
34
+ float_param(2, :rate, min: 0.0, max: 20.0)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,24 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # @deprecated Will be removed in a future FMOD version. See {MultibandEq}
7
+ # for alternatives.
8
+ #
9
+ # This unit filters sound using a resonant high-pass filter algorithm.
10
+ #
11
+ # @attr cutoff [Float] High-pass cutoff frequency in Hz.
12
+ # * *Minimum:* 1.0
13
+ # * *Maximum:* 22000.0
14
+ # * *Default:* 5000.0
15
+ # @attr resonance [Float] High-pass resonance Q value.
16
+ # * *Minimum:* 1.0
17
+ # * *Maximum:* 10.0
18
+ # * *Default:* 1.0
19
+ class HighPass < Dsp
20
+ float_param(0, :cutoff, min: 1.0, max: 22000.0)
21
+ float_param(1, :resonance, min: 1.0, max: 10.0)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # @deprecated Will be removed in a future FMOD version. See {MultibandEq}
7
+ # for alternatives.
8
+ #
9
+ # This unit filters sound using a simple high-pass with no resonance, but
10
+ # has flexible cutoff and is fast.
11
+ #
12
+ # This is a very simple single-order high pass filter.
13
+ #
14
+ # The emphasis is on speed rather than accuracy, so this should not be used
15
+ # for task requiring critical filtering.
16
+ #
17
+ # @attr cutoff [Float] High-pass cutoff frequency in Hz.
18
+ # * *Minimum:* 10.0
19
+ # * *Maximum:* 22000.0
20
+ # * *Default:* 1000.0
21
+ class HighPassSimple < Dsp
22
+ float_param(0, :cutoff, min: 10.0, max: 22000.0)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,56 @@
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
+ # as is used in Impulse Tracker.
8
+ #
9
+ # This is effectively a software based echo filter that emulates the DirectX
10
+ # DMO echo effect. Impulse tracker files can support this, and FMOD will
11
+ # produce the effect on ANY platform, not just those that support DirectX
12
+ # effects!
13
+ #
14
+ # @note Every time the delay is changed, the plugin re-allocates the echo
15
+ # buffer. This means the echo will disappear at that time while it refills
16
+ # its new buffer.
17
+ #
18
+ # Larger echo delays result in larger amounts of memory allocated.
19
+ #
20
+ # As this is a stereo filter made mainly for IT playback, it is targeted
21
+ # for stereo signals. With mono signals only the {#left_delay} is used.
22
+ #
23
+ # For multichannel signals (>2) there will be no echo on those channels.
24
+ # @attr wet_dry_mix [Float] Ratio of wet (processed) signal to dry
25
+ # (unprocessed) signal.
26
+ # * *Minimum:* 0.0 (all dry)
27
+ # * *Maximum:* 100.0 (all wet)
28
+ # * *Default:* 50.0
29
+ # @attr feedback [Float] Percentage of output fed back into input.
30
+ # * *Minimum:* 0.0
31
+ # * *Maximum:* 100.0
32
+ # * *Default:* 50.0
33
+ # @attr left_delay [Float] Delay for left channel, in milliseconds.
34
+ # * *Minimum:* 1.0
35
+ # * *Maximum:* 2000.0
36
+ # * *Default:* 500.0
37
+ # @attr right_delay [Float] Delay for right channel, in milliseconds.
38
+ # * *Minimum:* 1.0
39
+ # * *Maximum:* 2000.0
40
+ # * *Default:* 500.0
41
+ # @attr pan_delay [Float] Value that specifies whether to swap left and
42
+ # right delays with each successive echo. Ranges from 0.0 (equivalent to
43
+ # +false+) to 1.0 (equivalent to +true+), meaning no swap.
44
+ # @note Currently not supported within the FMOD API.
45
+ # * *Minimum:* 0.0
46
+ # * *Maximum:* 1.0
47
+ # * *Default:* 0.0
48
+ class ITEcho < Dsp
49
+ float_param(0, :wet_dry_mix, min: 0.0, max: 100.0)
50
+ float_param(1, :feedback, min: 0.0, max: 100.0)
51
+ float_param(2, :left_delay, min: 1.0, max: 2000.0)
52
+ float_param(3, :right_delay, min: 1.0, max: 2000.0)
53
+ float_param(4, :pan_delay , min: 0.0, max: 1.0)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,36 @@
1
+
2
+
3
+ module FMOD
4
+ module Effects
5
+
6
+ ##
7
+ # This unit filters sound using a resonant low-pass filter algorithm that is
8
+ # used in Impulse Tracker, but with limited cutoff range (0 to 8060hz).
9
+ #
10
+ # This is different to the default {LowPass} filter in that it uses a
11
+ # different quality algorithm and is the filter used to produce the correct
12
+ # sounding playback in .IT files.
13
+ #
14
+ # FMOD Studio's .IT playback uses this filter.
15
+ #
16
+ # @note This filter actually has a limited cutoff frequency below the
17
+ # specified maximum, due to its limited design, so for a more open range
18
+ # filter use {LowPass} or if you don't mind not having resonance,
19
+ # {LowPassSimple}.
20
+ #
21
+ # The effective maximum cutoff is about 8060hz.
22
+ #
23
+ # @attr cutoff [Float] Low-pass cutoff frequency in Hz.
24
+ # * *Minimum:* 1.0
25
+ # * *Maximum:* 22000.0
26
+ # * *Default:* 5000.0
27
+ # @attr resonance [Float] Low-pass resonance Q value.
28
+ # * *Minimum:* 0.0
29
+ # * *Maximum:* 127.0
30
+ # * *Default:* 1.0
31
+ class ITLowPass < Dsp
32
+ float_param(0, :cutoff, min: 1.0, max: 22000.0)
33
+ float_param(1, :resonance, min: 0.0, max: 127.0)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,14 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # @deprecated Unsupported / Deprecated.
7
+ class LadspaPlugin < Dsp
8
+
9
+ def initialize
10
+ raise NotImplementedError, "LADSPA Plugins are no longer supported."
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,32 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # This unit limits the sound to a certain level.
7
+ #
8
+ # @attr release_time [Float] Time to ramp the silence to full in ms.
9
+ # * *Minimum:* 1.0
10
+ # * *Maximum:* 1000.0
11
+ # * *Default:* 10.0
12
+ # @attr ceiling [Float] Maximum level of the output signal in dB.
13
+ # * *Minimum:* -12.0
14
+ # * *Maximum:* 0.0
15
+ # * *Default:* 0.0
16
+ # @attr max_gain [Float] Maximum amplification allowed in dB. Higher values
17
+ # allow more boost.
18
+ # * *Minimum:* 0.0 (no amplification)
19
+ # * *Maximum:* 12.0
20
+ # * *Default:* 0.0
21
+ # @attr mode [Float] Channel processing mode. 0 or 1.
22
+ # * *Minimum:* 0.0 (independent, limiter per channel)
23
+ # * *Maximum:* 1.0 (linked)
24
+ # * *Default:* 0.0
25
+ class Limiter < Dsp
26
+ float_param(0, :release_time, min: 1.0, max: 1000.0)
27
+ float_param(1, :ceiling, min: -12.0, max: 0.0)
28
+ float_param(2, :max_gain, min: 0.0, max: 12.0)
29
+ float_param(3, :mode, min: 0.0, max: 1.0)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ module FMOD
2
+ module Effects
3
+
4
+ ##
5
+ # This unit analyzes the loudness and true peak of the signal.
6
+ # @note This DSP is not intended for public use.
7
+ # @attr state [Integer] Integration state
8
+ # * *Minimum:* -3
9
+ # * *Maximum:* 1
10
+ # @attr weights [Pointer] Channel weightings for loudness.
11
+ # @attr loudness [Pointer] Loudness info and maximum true peak level.
12
+ # @api private
13
+ class LoudnessMeter < Dsp
14
+ integer_param(0, :state, min: -3, max: 1)
15
+ data_param(1, :weights)
16
+ data_param(2, :loudness)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # @deprecated Will be removed in a future FMOD version. See {MultibandEq}
7
+ # for alternatives.
8
+ #
9
+ # This unit filters sound using a high quality, resonant low-pass filter
10
+ # algorithm but consumes more CPU time.
11
+ #
12
+ # @attr cutoff [Float] Low-pass cutoff frequency in Hz.
13
+ # * *Minimum:* 10.0
14
+ # * *Maximum:* 22000.0
15
+ # * *Default:* 5000.0
16
+ # @attr resonance [Float] Low-pass resonance Q value.
17
+ # * *Minimum:* 1.0
18
+ # * *Maximum:* 10.0
19
+ # * *Default:* 1.0
20
+ class LowPass < Dsp
21
+ float_param(0, :cutoff, min: 10.0, max: 22000.0)
22
+ float_param(1, :resonance, min: 1.0, max: 10.0)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # @deprecated Will be removed in a future FMOD version. See {MultibandEq}
7
+ # for alternatives.
8
+ #
9
+ # This unit filters sound using a simple low-pass with no resonance, but has
10
+ # flexible cutoff and is fast.
11
+ #
12
+ # This is a very simple low pass filter, based on two single-pole RC
13
+ # time-constant modules.
14
+ #
15
+ # The emphasis is on speed rather than accuracy, so this should not be used
16
+ # for task requiring critical filtering.
17
+ #
18
+ # @attr cutoff [Float] Low-pass cutoff frequency in Hz.
19
+ # * *Minimum:* 10.0
20
+ # * *Maximum:* 22000.0
21
+ # * *Default:* 1000.0
22
+ class LowPassSimple < Dsp
23
+ float_param(0, :cutoff, min: 10.0, max: 22000.0)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+
2
+ module FMOD
3
+ module Effects
4
+
5
+ ##
6
+ # This unit does nothing but take inputs and mix them together then feed the
7
+ # result to the sound-card unit.
8
+ class Mixer < Dsp
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,153 @@
1
+ module FMOD
2
+ module Effects
3
+
4
+ ##
5
+ # This unit is a flexible five band parametric equalizer.
6
+ #
7
+ # See detailed description of each parameter to determine its effect with
8
+ # each type of filter.
9
+ class MultibandEq < Dsp
10
+
11
+ ##
12
+ # Valid bands used for the equalizer.
13
+ BANDS = [:a, :b, :c, :d, :e].freeze
14
+
15
+ ##
16
+ # Retrieves the filter used for the specified band. The filter determines
17
+ # the behavior of the other parameters.
18
+ #
19
+ # @param band [Symbol] The band.
20
+ # @return [Integer] The current filter.
21
+ # @see BANDS
22
+ # @see FilterType
23
+ def get_filter(band)
24
+ index = BANDS.index(band) * 4
25
+ get_integer(index)
26
+ end
27
+
28
+ ##
29
+ # Retrieves the frequency for the specified band. This value has different
30
+ # effects determined by the current filter.
31
+ #
32
+ # * *Low-pass/High-pass/Low-shelf/High-shelf:* Significant frequency in
33
+ # Hz, cutoff
34
+ # * *Notch/Peaking/Band-pass:* Center
35
+ # * *All-pass:* Phase transition point
36
+ # @param band [Symbol] The band.
37
+ # @return [Float]
38
+ # @see BANDS
39
+ # @see FilterType
40
+ def get_frequency(band)
41
+ index = (BANDS.index(band) * 4) + 1
42
+ get_float(index)
43
+ end
44
+
45
+ ##
46
+ # Retrieves the quality factor for the specified band. This value has
47
+ # different effects determined by the current filter.
48
+ #
49
+ # * *Low-pass/High-pass:* Quality factor, resonance
50
+ # * *Notch/Peaking/Band-pass:* Bandwidth
51
+ # * *All-pass:* Phase transition sharpness
52
+ # * *Low-shelf/High-shelf:* Unused
53
+ # @param band [Symbol] The band.
54
+ # @return [Float]
55
+ # @see BANDS
56
+ # @see FilterType
57
+ def get_quality(band)
58
+ index = (BANDS.index(band) * 4) + 2
59
+ get_float(index)
60
+ end
61
+
62
+ ##
63
+ # Retrieves the gain for the specified band.
64
+ #
65
+ # @note Peaking/Low-shelf/High-shelf only.
66
+ # @param band [Symbol] The band.
67
+ # @return [Float]
68
+ # @see BANDS
69
+ # @see FilterType
70
+ def get_gain(band)
71
+ index = (BANDS.index(band) * 4) + 3
72
+ get_float(index)
73
+ end
74
+
75
+ ##
76
+ # Sets the filter used for the specified band.
77
+ #
78
+ # The filter determines the behavior of the other parameters.
79
+ # @param band [Symbol] The band.
80
+ # @param filter [Integer] The filter to set, a {FilterType} value.
81
+ # @return [self]
82
+ # @see BANDS
83
+ # @see FilterType
84
+ def set_filter(band, filter)
85
+ index = BANDS.index(band) * 4
86
+ set_integer(index, filter.clamp(0, 12))
87
+ self
88
+ end
89
+
90
+ ##
91
+ # Sets the frequency for the specified band. This value has different
92
+ # effects determined by the current filter.
93
+ #
94
+ # * *Low-pass/High-pass/Low-shelf/High-shelf:* Significant frequency in
95
+ # Hz, cutoff
96
+ # * *Notch/Peaking/Band-pass:* Center
97
+ # * *All-pass:* Phase transition point
98
+ # @param band [Symbol] The band.
99
+ # @param frequency [Float] The frequency to set.
100
+ # * *Minimum:* 20.0
101
+ # * *Maximum:* 22000.0
102
+ # * *Default:* 8000.0
103
+ # @return [self]
104
+ # @see BANDS
105
+ # @see FilterType
106
+ def set_frequency(band, frequency)
107
+ index = (BANDS.index(band) * 4) + 1
108
+ set_float(index, frequency.clamp(20.0, 22000.0))
109
+ self
110
+ end
111
+
112
+ ##
113
+ # Set the quality factor for the specified band. This value has different
114
+ # effects determined by the current filter.
115
+ #
116
+ # * *Low-pass/High-pass:* Quality factor, resonance
117
+ # * *Notch/Peaking/Band-pass:* Bandwidth
118
+ # * *All-pass:* Phase transition sharpness
119
+ # * *Low-shelf/High-shelf:* Unused
120
+ # @param band [Symbol] The band.
121
+ # @param quality [Float] The quality factor.
122
+ # * *Minimum:* 0.1
123
+ # * *Maximum:* 10.0
124
+ # * *Default:* 0.707
125
+ # @return [self]
126
+ # @see BANDS
127
+ # @see FilterType
128
+ def set_quality(band, quality)
129
+ index = (BANDS.index(band) * 4) + 2
130
+ set_float(index, quality.clamp(0.1, 10.0))
131
+ self
132
+ end
133
+
134
+ ##
135
+ # Sets the gain for the specified band.
136
+ #
137
+ # @note Peaking/Low-shelf/High-shelf only.
138
+ # @param band [Symbol] The band.
139
+ # @param gain [Float] The boost or attenuation in dB.
140
+ # * *Minimum:* -30.0
141
+ # * *Maximum:* 30.0
142
+ # * *Default:* 0.0
143
+ # @return [self]
144
+ # @see BANDS
145
+ # @see FilterType
146
+ def set_gain(band, gain)
147
+ index = (BANDS.index(band) * 4) + 3
148
+ set_float(index, gain.clamp(-30.0, 30.0))
149
+ self
150
+ end
151
+ end
152
+ end
153
+ end