class Diapason::Sound::WaveSampler

Attributes

sample_rate[RW]

Public Class Methods

new(sample_rate = 44100) click to toggle source
# File lib/diapason/sound/wave_sampler.rb, line 4
def initialize(sample_rate = 44100)
  @sample_rate = sample_rate.to_f
end

Public Instance Methods

cycles_per_frame(frequency) click to toggle source
# File lib/diapason/sound/wave_sampler.rb, line 31
def cycles_per_frame(frequency)
  frequency / sample_rate
end
each_sample(wave) { |call| ... } click to toggle source
# File lib/diapason/sound/wave_sampler.rb, line 8
def each_sample(wave)
  return enum_for(:each_sample, wave) unless block_given?

  x = 0
  loop do
    yield wave.call(x)
    x += cycle * cycles_per_frame(wave.frequency)
  end
end
samples_for_duration(wave, duration) { |sample| ... } click to toggle source
# File lib/diapason/sound/wave_sampler.rb, line 18
def samples_for_duration(wave, duration)
  return enum_for(:samples_for_duration, wave, duration) unless block_given?

  total_samples = (duration * sample_rate).round

  i = 0
  each_sample(wave) do |sample|
    break if i == total_samples
    i += 1
    yield sample
  end
end