class Plllayer::SinglePlayers::Nop
This is the SinglePlayer
implentation used for testing. It doesn’t actually do anything, it just pretends to play a music file using sleeps.
Attributes
track_path[R]
Public Class Methods
new()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 8 def initialize @paused = false @muted = false @volume = 50 @speed = 1.0 @track_path = nil end
Public Instance Methods
mute()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 108 def mute @muted = true end
muted?()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 104 def muted? @muted end
pause()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 62 def pause if not @paused and playing? @paused = true else false end end
paused?()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 58 def paused? @paused end
play(track_path, &on_end)
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 20 def play(track_path, &on_end) _quit # Make sure the audio file exists. raise FileNotFoundError, "file '#{track_path}' doesn't exist" unless File.exists? track_path @paused = false @track_path = track_path # Assume the filename starts with the song length in milliseconds, so we # don't actually have to read the file. @total_time = File.basename(@track_path, ".*").to_i @time_left = @total_time @last_tick = Time.now @quit_hook_active = false @quit_hook = Thread.new do while @time_left > 0 unless @paused @time_left -= ((Time.now - @last_tick) * 1000 * @speed).to_i end @last_tick = Time.now sleep 0.01 end @quit_hook_active = true @paused = false @track_path = nil @started = nil on_end.call end true end
playing?()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 16 def playing? not @track_path.nil? end
position()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 127 def position playing? ? @total_time - @time_left : false end
resume()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 70 def resume if @paused @paused = false true else false end end
seek(where, type = :absolute)
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 79 def seek(where, type = :absolute) if playing? case type when :absolute @time_left = @total_time - where when :relative @time_left -= where when :percent @time_left = @total_time - (@total_time * where) / 100 end true else false end end
speed()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 95 def speed @speed end
speed=(new_speed)
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 99 def speed=(new_speed) @speed = new_speed.to_f true end
stop()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 54 def stop _quit end
track_length()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 131 def track_length playing? ? @total_time : false end
unmute()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 112 def unmute @muted = false true end
volume()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 117 def volume @volume end
volume=(new_volume)
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 121 def volume=(new_volume) @muted = false @volume = new_volume.to_f true end
Private Instance Methods
_quit()
click to toggle source
# File lib/plllayer/single_players/nop.rb, line 137 def _quit if playing? @quit_hook.kill unless @quit_hook_active @paused = false @track_path = nil true else false end end