Module: Wavify::DSP::Effects

Defined in:
lib/wavify/dsp/effects.rb,
lib/wavify/dsp/effects/eq.rb,
lib/wavify/dsp/effects/delay.rb,
lib/wavify/dsp/effects/chorus.rb,
lib/wavify/dsp/effects/phaser.rb,
lib/wavify/dsp/effects/reverb.rb,
lib/wavify/dsp/effects/flanger.rb,
lib/wavify/dsp/effects/limiter.rb,
lib/wavify/dsp/effects/tremolo.rb,
lib/wavify/dsp/effects/vibrato.rb,
lib/wavify/dsp/effects/auto_pan.rb,
lib/wavify/dsp/effects/expander.rb,
lib/wavify/dsp/effects/bitcrusher.rb,
lib/wavify/dsp/effects/compressor.rb,
lib/wavify/dsp/effects/distortion.rb,
lib/wavify/dsp/effects/noise_gate.rb,
lib/wavify/dsp/effects/effect_base.rb,
lib/wavify/dsp/effects/effect_chain.rb,
lib/wavify/dsp/effects/soft_limiter.rb,
lib/wavify/dsp/effects/podcast_chain.rb,
lib/wavify/dsp/effects/stereo_widener.rb,
lib/wavify/dsp/effects/mastering_chain.rb,
lib/wavify/dsp/effects/envelope_controlled_effect.rb,
sig/effects.rbs

Overview

Built-in audio effects namespace.

Defined Under Namespace

Classes: AutoPan, Bitcrusher, Chorus, Compressor, Delay, Distortion, EQ, EffectBase, EffectChain, Expander, Flanger, Limiter, MasteringChain, NoiseGate, Phaser, PodcastChain, Reverb, SoftLimiter, StereoWidener, Tremolo, Vibrato

Constant Summary collapse

BUILTIN_EFFECTS =
{
  delay: Delay,
  reverb: Reverb,
  chorus: Chorus,
  distortion: Distortion,
  compressor: Compressor,
  limiter: Limiter,
  soft_limiter: SoftLimiter,
  noise_gate: NoiseGate,
  tremolo: Tremolo,
  vibrato: Vibrato,
  flanger: Flanger,
  phaser: Phaser,
  bitcrusher: Bitcrusher,
  expander: Expander,
  auto_pan: AutoPan,
  stereo_widener: StereoWidener,
  eq: EQ,
  mastering_chain: MasteringChain,
  podcast_chain: PodcastChain
}.freeze

Class Method Summary collapse

Class Method Details

.build(name, **params) ⇒ Object

Builds a registered effect instance.

Parameters:

  • name (Symbol, String)
  • params (Object)

Returns:

  • (Object)

Raises:



84
85
86
87
88
89
90
91
92
93
# File 'lib/wavify/dsp/effects.rb', line 84

def build(name, **params)
  key = normalize_effect_name!(name)
  factory = registry_mutex.synchronize { registry[key] }
  raise InvalidParameterError, "unsupported effect: #{key}" unless factory

  effect = factory.is_a?(Class) ? factory.new(**params) : factory.call(**params)
  return effect if effect.respond_to?(:process) || effect.respond_to?(:call) || effect.respond_to?(:apply)

  raise InvalidParameterError, "registered effect #{key} must build a processor"
end

.register(name, factory = nil, &block) ⇒ Class, #call

Registers an effect class or factory under a DSL-friendly name.

Parameters:

  • name (Symbol, String)
  • factory (Class, #call) (defaults to: nil)

Returns:

  • (Class, #call)

Raises:



58
59
60
61
62
63
64
# File 'lib/wavify/dsp/effects.rb', line 58

def register(name, factory = nil, &block)
  key = normalize_effect_name!(name)
  value = factory || block
  raise InvalidParameterError, "effect factory must be a Class or callable object" unless effect_factory?(value)

  registry_mutex.synchronize { registry[key] = value }
end

.registered_effectsHash<Symbol, Object>

Returns:

  • (Hash<Symbol, Object>)


96
97
98
# File 'lib/wavify/dsp/effects.rb', line 96

def registered_effects
  registry_mutex.synchronize { registry.dup.freeze }
end

.unregister(name) ⇒ Object

Removes a custom effect or restores a built-in implementation.

Parameters:

  • name (String, Symbol)

Returns:

  • (Object)


67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/wavify/dsp/effects.rb', line 67

def unregister(name)
  key = normalize_effect_name!(name)
  registry_mutex.synchronize do
    previous = registry[key]
    if BUILTIN_EFFECTS.key?(key)
      registry[key] = BUILTIN_EFFECTS.fetch(key)
    else
      registry.delete(key)
    end
    previous
  end
end