class StereoSample

Constants

MAX_POLIPHONY

Public Class Methods

cleanup() click to toggle source
# File lib/misc/stereo_sample.rb, line 9
def self.cleanup
  @@all_instances.each do |instances|
    instances.each do |key, instance|
      unless instance.playing? || instance.paused?
        instances.delete(key)
      end
    end
  end
end
new(window, sound_l, sound_r = sound_l) click to toggle source
# File lib/misc/stereo_sample.rb, line 29
def initialize(window, sound_l, sound_r = sound_l)
  @sound_l = Gosu::Sample.new(window, sound_l)
  # Use same sample in mono -> stereo
  if sound_l == sound_r
    @sound_r = @sound_l
  else
    @sound_r = Gosu::Sample.new(window, sound_r)
  end
  @instances = {}
  self.class.register_instances(@instances)
end
register_instances(instances) click to toggle source
# File lib/misc/stereo_sample.rb, line 5
def self.register_instances(instances)
  @@all_instances << instances
end
stop_all() click to toggle source
# File lib/misc/stereo_sample.rb, line 19
def self.stop_all
  @@all_instances.each do |instances|
    instances.each do |key, instance|
      if instance.playing?
        instance.stop
      end
    end
  end
end

Public Instance Methods

pause(id = :default) click to toggle source
# File lib/misc/stereo_sample.rb, line 67
def pause(id = :default)
  @instances["#{id}_l"].pause
  @instances["#{id}_r"].pause
end
paused?(id = :default) click to toggle source
# File lib/misc/stereo_sample.rb, line 41
def paused?(id = :default)
  i = @instances["#{id}_l"]
  i && i.paused?
end
play(id = :default, pan = 0, volume = 1, speed = 1, looping = false) click to toggle source
# File lib/misc/stereo_sample.rb, line 55
def play(id = :default, pan = 0,
         volume = 1, speed = 1, looping = false)
  if @instances.size > MAX_POLIPHONY
    return
  end
  @instances["#{id}_l"] = @sound_l.play_pan(
    -0.2, 0, speed, looping)
  @instances["#{id}_r"] = @sound_r.play_pan(
    0.2, 0, speed, looping)
  volume_and_pan(id, volume, pan)
end
playing?(id = :default) click to toggle source
# File lib/misc/stereo_sample.rb, line 46
def playing?(id = :default)
  i = @instances["#{id}_l"]
  i && i.playing?
end
resume(id = :default) click to toggle source
# File lib/misc/stereo_sample.rb, line 72
def resume(id = :default)
  @instances["#{id}_l"].resume
  @instances["#{id}_r"].resume
end
stop() click to toggle source
# File lib/misc/stereo_sample.rb, line 77
def stop
  @instances.delete("#{id}_l").stop
  @instances.delete("#{id}_r").stop
end
stopped?(id = :default) click to toggle source
# File lib/misc/stereo_sample.rb, line 51
def stopped?(id = :default)
  @instances["#{id}_l"].nil?
end
volume_and_pan(id, volume, pan) click to toggle source
# File lib/misc/stereo_sample.rb, line 82
def volume_and_pan(id, volume, pan)
  return unless @instances["#{id}_l"]
  if pan > 0
    pan_l = 1 - pan * 2
    pan_r = 1
  else
    pan_l = 1
    pan_r = 1 + pan * 2
  end
  pan_l *= volume
  pan_r *= volume
  @instances["#{id}_l"].volume = [pan_l, 0.05].max
  @instances["#{id}_r"].volume = [pan_r, 0.05].max
end