Class: Player
- Inherits:
-
Object
- Object
- Player
- Defined in:
- lib/mplug163/player.rb
Instance Method Summary collapse
-
#initialize ⇒ Player
constructor
A new instance of Player.
- #next ⇒ Object
- #pause ⇒ Object
- #play(datatype, songs, idx, switch_flag = false) ⇒ Object
- #prev ⇒ Object
- #recall ⇒ Object
- #resume ⇒ Object
- #stop ⇒ Object
- #switch ⇒ Object
Constructor Details
#initialize ⇒ Player
Returns a new instance of Player.
4 5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/mplug163/player.rb', line 4 def initialize @ui = Ui.new @datatype = 'songs' @mpg123_thread = nil @mpg123_pid = nil @playing_flag = false @pause_flag = false @songs = [] @idx = 0 @wait = 0.5 @carousel = ->(left, right, x){x < left ? right : (x > right ? left : x)} end |
Instance Method Details
#next ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/mplug163/player.rb', line 82 def next stop sleep @wait @idx = @carousel[0, @songs.size - 1, @idx + 1] recall end |
#pause ⇒ Object
64 65 66 67 68 69 70 71 |
# File 'lib/mplug163/player.rb', line 64 def pause @pause_flag = true # send SIGSTOP to pipe Process.kill(:SIGSTOP, @mp3id) item = @songs[@idx] @ui.(item['song_name'], item['artist'], true) end |
#play(datatype, songs, idx, switch_flag = false) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/mplug163/player.rb', line 35 def play(datatype, songs, idx, switch_flag = false) @datatype = datatype if !switch_flag @pause_flag ? resume : pause if @playing_flag elsif switch_flag @songs = songs @idx = idx @playing_flag ? switch : recall end end |
#prev ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/mplug163/player.rb', line 90 def prev stop sleep @wait @idx = @carousel[0, @songs.size - 1, @idx - 1] recall end |
#recall ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/mplug163/player.rb', line 17 def recall @playing_flag = true @pause_flag = false item = @songs[@idx] @ui.(item['song_name'], item['artist']) @thread = Thread.new do @mp3id, stdin, stdout, stderr = Open4::popen4('mpg123', item['mp3_url']) Process::waitpid2 @mp3id if @playing_flag @idx = @carousel[0, @songs.size - 1, @idx + 1] recall end end end |
#resume ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/mplug163/player.rb', line 73 def resume @pause_flag = false # send SIGCONT to pipe Process.kill(:SIGCONT, @mp3id) item = @songs[@idx] @ui.(item['song_name'], item['artist']) end |
#stop ⇒ Object
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/mplug163/player.rb', line 53 def stop return unless @playing_flag return unless @thread return unless @mp3id @playing_flag = false # kill this process and thread Process.kill(:SIGKILL, @mp3id) Thread.kill @thread end |
#switch ⇒ Object
47 48 49 50 51 |
# File 'lib/mplug163/player.rb', line 47 def switch stop sleep @wait recall end |