class Sound::Data

Attributes

duration[R]
format[R]
pcm_data[R]

Public Class Methods

new(format = Format.new) click to toggle source
# File lib/sound/data.rb, line 6
def initialize(format = Format.new)
  @format = format
  @pcm_data = []
end

Public Instance Methods

generate_sine_wave(freq, duration, volume) click to toggle source
# File lib/sound/data.rb, line 10
def generate_sine_wave(freq, duration, volume)
  @pcm_data = []
  @duration = duration
  ramp = 200.0
  samples = (@format.sample_rate/2*duration/1000.0).floor

  samples.times do |sample|

    angle = (2.0*Math::PI*freq) * sample/samples * duration/1000
    factor = Math.sin(angle)
    x = 32768.0*factor*volume

    if sample < ramp
      x *= sample/ramp
    end
    if samples - sample < ramp
      x *= (samples - sample)/ramp
    end

    @pcm_data << x.floor
  end

  self
end
Also aliased as: sine_wave
sine_wave(freq, duration, volume)
Alias for: generate_sine_wave