class CW::Coreaudio

Public Class Methods

new() click to toggle source
# File lib/cw/coreaudio.rb, line 9
def initialize
  dev = CoreAudio.default_output_device
  @buf = dev.output_buffer(8192)
end

Public Instance Methods

generate_silence(number_of_samples) click to toggle source
# File lib/cw/coreaudio.rb, line 36
def generate_silence(number_of_samples)
  ary = []
  number_of_samples.round.times do |sample_number|
    ary << 0.0
  end
  @buf << ary
end
generate_tone(number_of_samples) click to toggle source
# File lib/cw/coreaudio.rb, line 22
def generate_tone(number_of_samples)
  @sample_rate = 44100
  @frequency = 1000
  @w = (@frequency * TWO_PI) / @sample_rate
  ary = []
  number_of_samples.round.times do |sample_number|
    amplitude = ramp_filter(number_of_samples, sample_number)
    sine_radians = @w * sample_number
    temp = (amplitude * Math.sin(sine_radians) * 0x7FFF).round
    ary << temp
  end
  @buf << ary
end
ramp_filter(size, count) click to toggle source
# File lib/cw/coreaudio.rb, line 14
def ramp_filter(size, count)
  @max_amplitude = 1
  ramp = 0.03
  ramp_point =  @max_amplitude / ramp
  ampl = (count < ramp_point) ? (ramp * count) : @max_amplitude
  (count > (size - ramp_point)) ? (ramp * (size - count)) : ampl
end
start() click to toggle source
# File lib/cw/coreaudio.rb, line 44
def start
  @buf.start
end
stop() click to toggle source
# File lib/cw/coreaudio.rb, line 48
def stop
  @buf.stop
end