module CultomePlayer::Player::Adapter::Mpg123

Public Instance Methods

fb_in_player(secs) click to toggle source

Fast backward the playback

@contract Adapter @param secs [Integer] Number of seconds to fast backward.

# File lib/cultome_player/player/adapter/mpg123.rb, line 55
def fb_in_player(secs)
  send_to_player "jump -#{secs}s"
end
ff_in_player(secs) click to toggle source

Fast forward the playback

@contract Adapter @param secs [Integer] Number of seconds to fast forward.

# File lib/cultome_player/player/adapter/mpg123.rb, line 47
def ff_in_player(secs)
  send_to_player "jump +#{secs}s"
end
pause_in_player() click to toggle source

Activate the pause in media player.

@contract Adapter

# File lib/cultome_player/player/adapter/mpg123.rb, line 20
def pause_in_player
  toggle_pause
end
play_in_player(song) click to toggle source

Start a playback in the media player.

@contract Adapter @param song [Song] The song to be played.

# File lib/cultome_player/player/adapter/mpg123.rb, line 8
def play_in_player(song)
  @current_song = song
  unless player_running?
    start_player
  end

  loadfile(song)
end
quit_in_player() click to toggle source

Turn off the media player

# File lib/cultome_player/player/adapter/mpg123.rb, line 60
def quit_in_player
  begin
    send_to_player "quit"
  rescue Exception => e
  end
end
repeat_in_player() click to toggle source

Play from the begining the current playback.

# File lib/cultome_player/player/adapter/mpg123.rb, line 68
def repeat_in_player
  send_to_player "jump 0"
end
resume_in_player() click to toggle source

Resume playback in media player. If is paused or stopped.

@contract Adapter

# File lib/cultome_player/player/adapter/mpg123.rb, line 27
def resume_in_player
  if paused?
    toggle_pause
  else
    play_in_player current_song
  end
end
stop_in_player() click to toggle source

Stop playback in media player.

@contract Adapter

# File lib/cultome_player/player/adapter/mpg123.rb, line 38
def stop_in_player
  @user_stopped = true
  send_to_player "stop"
end

Private Instance Methods

control_pipe() click to toggle source
# File lib/cultome_player/player/adapter/mpg123.rb, line 88
def control_pipe
  unless pipe_alive?
    @pipe = File.open(mplayer_pipe, 'a+')
  end
  @pipe
end
loadfile(song) click to toggle source
# File lib/cultome_player/player/adapter/mpg123.rb, line 78
def loadfile(song)
  send_to_player "load #{song.path}"
end
pipe_alive?() click to toggle source
# File lib/cultome_player/player/adapter/mpg123.rb, line 95
def pipe_alive?
  return !(@pipe.nil? || @pipe.closed?)
end
send_to_player(cmd) click to toggle source
# File lib/cultome_player/player/adapter/mpg123.rb, line 82
def send_to_player(cmd)
  raise 'invalid state:player is not running' unless player_running?
  control_pipe.puts cmd
  control_pipe.flush
end
start_player() click to toggle source
# File lib/cultome_player/player/adapter/mpg123.rb, line 99
def start_player
  # creamos el thread que lea la salida del mpg123
  Thread.new do
    start_cmd = "mpg123 --fifo #{mplayer_pipe} -R"
    IO.popen(start_cmd).each do |line|
      case line
            when /^@R MPG123/
                            @is_player_running = true
            when /^@P ([\d])$/
                    case $1.to_i
                           when 0 # stopped
                                   @playing = @paused = false
                           @stopped = true
              @user_stopped ?  emit_event(:playback_stopped, current_song) : emit_event(:playback_finish, current_song)
                           when 1 # paused
                                @stopped = @playing = false
                                @paused = true
              emit_event(:playback_paused, current_song)
                           when 2 # unpaused
                                                                    @playing = true
                           @paused = @stopped = false
              emit_event(:playback_resumed, current_song)
            end
        when /^@F ([\d]+) ([\d]+) ([\d.]+) ([\d.]+)$/
                @playback_time_position = $3.to_f
                @playback_time_length = @playback_time_position + $4.to_f
                                    end # case line
    end # IO
  end # Thread

  wait_player
end
toggle_pause() click to toggle source
# File lib/cultome_player/player/adapter/mpg123.rb, line 74
def toggle_pause
  send_to_player "pause"
end
wait_player() click to toggle source
# File lib/cultome_player/player/adapter/mpg123.rb, line 132
def wait_player
  count = 0
  while !player_running?
    sleep(0.1)
    count += 1
    return if count > 50 # 5 seg
  end
end