Class: StereoSample

Inherits:
Object
  • Object
show all
Defined in:
lib/misc/stereo_sample.rb

Constant Summary collapse

MAX_POLIPHONY =
16
@@all_instances =
[]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(window, sound_l, sound_r = sound_l) ⇒ StereoSample

Returns a new instance of StereoSample.



29
30
31
32
33
34
35
36
37
38
39
# 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

Class Method Details

.cleanupObject



9
10
11
12
13
14
15
16
17
# 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

.register_instances(instances) ⇒ Object



5
6
7
# File 'lib/misc/stereo_sample.rb', line 5

def self.register_instances(instances)
  @@all_instances << instances
end

.stop_allObject



19
20
21
22
23
24
25
26
27
# 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

Instance Method Details

#pause(id = :default) ⇒ Object



67
68
69
70
# File 'lib/misc/stereo_sample.rb', line 67

def pause(id = :default)
  @instances["#{id}_l"].pause
  @instances["#{id}_r"].pause
end

#paused?(id = :default) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
44
# 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) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
# 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) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
# File 'lib/misc/stereo_sample.rb', line 46

def playing?(id = :default)
  i = @instances["#{id}_l"]
  i && i.playing?
end

#resume(id = :default) ⇒ Object



72
73
74
75
# File 'lib/misc/stereo_sample.rb', line 72

def resume(id = :default)
  @instances["#{id}_l"].resume
  @instances["#{id}_r"].resume
end

#stopObject



77
78
79
80
# File 'lib/misc/stereo_sample.rb', line 77

def stop
  @instances.delete("#{id}_l").stop
  @instances.delete("#{id}_r").stop
end

#stopped?(id = :default) ⇒ Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/misc/stereo_sample.rb', line 51

def stopped?(id = :default)
  @instances["#{id}_l"].nil?
end

#volume_and_pan(id, volume, pan) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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