class Gentone::Generator

Public Instance Methods

generate(duration, freq = 600.0) click to toggle source
# File lib/gentone/generate.rb, line 6
def generate(duration, freq = 600.0)
  sec_duration = duration / 1_000.0
  frequency = freq * 1.0

  dev = CoreAudio.default_output_device
  buf = dev.output_buffer(1024)

  phase = Math::PI * 2.0 * frequency / dev.nominal_rate
  th = Thread.start do
    i = 0
    wav = NArray.sint(1024)
    loop do
      1024.times {|j| wav[j] = (0.4 * Math.sin(phase*(i+j)) * 0x7FFF).round }
      i += 1024
      buf << wav
    end
  end

  buf.start
  sleep sec_duration
  buf.stop

  th.kill.join
end