class Clicker::KeyboardSoundModel

Constants

ACTIVATE
DEACTIVATE

Public Class Methods

new() click to toggle source
# File lib/clicker/sound.rb, line 11
def initialize
  init(INIT_AUDIO)

  begin
    SDL::Mixer
  rescue NameError
    raise "SDL::Mixer class not found. Make sure the rubysdl gem is built with sdl mixer."
  end

  # バッファー長 128 くらいでも動作するが、pulseaudio のCPU負荷が高
  # くなるのであまり調子にのらないほうがいい。
  Mixer.open(44100, Mixer::DEFAULT_FORMAT, 2, 1024)

  @sounds = [nil, nil]
  @sounds[ACTIVATE] = Mixer::Wave.load(File.dirname(__FILE__) + '/ibm_on.wav')
  @sounds[DEACTIVATE] = Mixer::Wave.load(File.dirname(__FILE__) + '/ibm_off.wav')
  @counts = [0, 0]
  Mixer.allocate_channels(12)
end

Public Instance Methods

activate_key(code) click to toggle source
# File lib/clicker/sound.rb, line 31
def activate_key(code)
  @counts[ACTIVATE] += 1
end
deactivate_key(code) click to toggle source
# File lib/clicker/sound.rb, line 35
def deactivate_key(code)
  @counts[DEACTIVATE] += 1
end
repeat_key(code) click to toggle source
# File lib/clicker/sound.rb, line 39
def repeat_key(code)
end
update() click to toggle source
# File lib/clicker/sound.rb, line 42
def update
  # p Mixer.playing_channels
  [ACTIVATE, DEACTIVATE].each do |kind|
    @counts[kind].times do 
      begin
        Mixer.play_channel(-1, @sounds[kind], 0)
      rescue SDL::Error
      end
      sleep(0.0027)
    end
  end
  @counts[0] = @counts[1] = 0
end