Class: RoadToRubykaigi::Audio::SquareOscillator

Inherits:
Object
  • Object
show all
Includes:
Phasor
Defined in:
lib/road_to_rubykaigi/audio/oscillator.rb

Constant Summary collapse

DUTY_CYCLE =
{
  d0: 0.125,
  d1: 0.25,
  d2: 0.5,
}

Instance Method Summary collapse

Methods included from Phasor

#gain, #sample_rate

Instance Method Details

#duty_cycle=(duty_cycle) ⇒ Object



91
92
93
# File 'lib/road_to_rubykaigi/audio/oscillator.rb', line 91

def duty_cycle=(duty_cycle)
  @duty_cycle = (DUTY_CYCLE.key?(duty_cycle) ? duty_cycle : :d0)
end

#generate(frequencies:) ⇒ Object



83
84
85
86
87
88
89
# File 'lib/road_to_rubykaigi/audio/oscillator.rb', line 83

def generate(frequencies:)
  samples = frequencies.map do |frequency|
    phase = tick(frequency: frequency)
    phase < duty_cycle ? 1.0 : -1.0
  end
  samples.sum / samples.size
end