Sha256: 66405a9a17c47b35e5dfa39a3a643d056a3a7d491965371ffd057586f12d14d4

Contents?: true

Size: 1.39 KB

Versions: 3

Compression:

Stored size: 1.39 KB

Contents

module SPCore
# Provides methods for generating a Signal that contains test waveforms or noise.
class SignalGenerator
  include Hashmake::HashMakeable
  
  # used to process hashed args in #initialize.
  ARG_SPECS = [
    Hashmake::ArgSpec.new(:key => :size, :reqd => true, :type => Fixnum, :validator => ->(a){ a > 0 }),
    Hashmake::ArgSpec.new(:key => :sample_rate, :reqd => true, :type => Float, :validator => ->(a){ a > 0.0 })
  ]
  
  attr_reader :sample_rate, :size
  
  # A new instance of SignalGenerator.
  # @param [Hash] args Required keys are :sample_rate and :size.
  def initialize args
    hash_make ARG_SPECS, args
  end
  
  # Generate a Signal object with noise data.
  def make_noise amplitude = 1.0
    output = Array.new(@size)
    output.each_index do |i|
      output[i] = rand * amplitude
    end
    
    return Signal.new(:sample_rate => @sample_rate, :data => output)
  end
  
  # Generate a Signal object with waveform data at the given frequencies.
  def make_signal freqs, extra_osc_args = {}
    args = { :sample_rate => @sample_rate }.merge! extra_osc_args
    oscs = []
    freqs.each do |freq|
      oscs.push Oscillator.new args.merge(:frequency => freq)
    end
    
    output = Array.new(size, 0.0)
    size.times do |n|
      oscs.each do |osc|
        output[n] += osc.sample
      end
    end
    
    return Signal.new(:sample_rate => @sample_rate, :data => output)
  end
end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
spcore-0.1.5 lib/spcore/util/signal_generator.rb
spcore-0.1.4 lib/spcore/util/signal_generator.rb
spcore-0.1.3 lib/spcore/util/signal_generator.rb