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