class SynthBlocks::Drum::KickDrum

A simple kick drum generator

Public Class Methods

new(sfreq, preset = {}) click to toggle source

Structure

Pitch Env > Sine wave OSC >

parameter:

  • pitch_attack, pitch_decay - Pitch envelope params in s

  • amp_attack, amp_decay - Amp envelope params in s

  • base_frequency - base frequency in Hz

  • pitch_mod - frequency modulation amount in Hz

Calls superclass method SynthBlocks::Core::Sound::new
# File lib/synth_blocks/drum/kick_drum.rb, line 20
def initialize(sfreq, preset = {})
  super(sfreq, mode: :polyphonic)
  @preset = {
    pitch_attack: 0.001,
    pitch_decay: 0.02,
    amp_attack: 0.001,
    amp_decay: 0.15,
    base_frequency: 55,
    pitch_mod: 200
  }.merge(preset)
  @oscillator = SynthBlocks::Core::Oscillator.new(@sampling_frequency)
  @pitch_env = SynthBlocks::Mod::Envelope.new(@preset[:pitch_attack], @preset[:pitch_decay])
  @amp_env = SynthBlocks::Mod::Envelope.new(@preset[:amp_attack], @preset[:amp_decay])
end

Public Instance Methods

run(offset) click to toggle source

Run generator

# File lib/synth_blocks/drum/kick_drum.rb, line 40
def run(offset)
  t = time(offset)
  events = active_events(t)
  if events.empty?
    0.0
  else
    event = events[events.keys.last]
    local_started = t - event[:started]
    osc_out = @oscillator.run(@preset[:base_frequency].to_f + @pitch_env.run(local_started) * @preset[:pitch_mod].to_f, waveform: :sine)
    osc_out = osc_out * 1.0 * @amp_env.run(local_started)
  end
end