Class: MPG123Player

Inherits:
Object
  • Object
show all
Includes:
Observable
Defined in:
lib/mpg123player.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ MPG123Player

Returns a new instance of MPG123Player.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/mpg123player.rb', line 16

def initialize params = {}
  params.each { |key, value| send "#{key}=", value }
  unless defined? HTTPClient
    puts "Mpg123 requires HTTPClient to work"
    exit false
  end

  @volume = 100
  @muted = false
  @logger.info version
  @inqueue = []
  begin
    @pin, @pout, @perr = Open3.popen3 "mpg123 --keep-open --remote"
    Thread.new do mpg123read end
    Thread.new do mpg123send end
    changed
    notify_observers :state => :inited
  rescue => err
    @error = err
    changed
    notify_observers :state => :error, :error => err
  end
end

Instance Attribute Details

#errorObject (readonly)

Returns the value of attribute error.



9
10
11
# File 'lib/mpg123player.rb', line 9

def error
  @error
end

#loggerObject

Returns the value of attribute logger.



10
11
12
# File 'lib/mpg123player.rb', line 10

def logger
  @logger
end

#pausedObject (readonly)

Returns the value of attribute paused.



9
10
11
# File 'lib/mpg123player.rb', line 9

def paused
  @paused
end

Instance Method Details

#closeObject



108
109
110
111
112
113
114
115
116
117
118
# File 'lib/mpg123player.rb', line 108

def close()
  @perr.close
  @pout.close
  @pin.close
  changed
  notify_observers :state => :closed
rescue => err
  @error = err
  changed
  notify_observers :state => :error, :error => err
end

#mpg123puts(out) ⇒ Object



120
121
122
123
# File 'lib/mpg123player.rb', line 120

def mpg123puts(out)
  @inqueue << out
  @logger.debug {">> #{out}"} #
end

#muteObject



94
95
96
97
98
99
100
101
102
# File 'lib/mpg123player.rb', line 94

def mute
  @muted = !@muted
  mpg123puts "V 0" if @muted
  mpg123puts "V #{@volume}" unless @muted
rescue => err
  @error = err
  changed
  notify_observers :state => :error, :error => err
end

#muted?Boolean

Returns:

  • (Boolean)


104
105
106
# File 'lib/mpg123player.rb', line 104

def muted?
  @muted
end

#pauseObject



62
63
64
65
66
67
68
69
# File 'lib/mpg123player.rb', line 62

def pause()
  @paused = !@paused
  mpg123puts "pause"
rescue => err
  @error = err
  changed
  notify_observers :state => :error, :error => err
end

#play(track) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/mpg123player.rb', line 40

def play(track)
  @last_track = track
  unless track.nil? || track.is_a?(Hash) && track[:error]
    # mpg123puts "load #{track["mpg123url"]}"
    strhead   = HTTPClient.new.head(track['mpg123url'])
    streamuri = strhead.header['Location'][0]
    streamuri.sub! 'https', 'http'
    mpg123puts "load #{streamuri}"
    @pstate = 2
  end
  changed
  notify_observers :state => :load, :track => track
rescue => err
  @error = err
  changed
  notify_observers :state => :error, :error => err
end

#playing?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/mpg123player.rb', line 58

def playing?
  @pstate == 2 && !@paused
end

#stopObject



71
72
73
74
75
76
77
# File 'lib/mpg123player.rb', line 71

def stop()
  mpg123puts "stop"
rescue => err
  @error = err
  changed
  notify_observers :state => :error, :error => err
end

#versionObject



12
13
14
# File 'lib/mpg123player.rb', line 12

def version
  return "Audio backend: #{`mpg123 --version`.strip}"
end

#volumeObject



90
91
92
# File 'lib/mpg123player.rb', line 90

def volume()
  @volume
end

#volume=(val) ⇒ Object



79
80
81
82
83
84
85
86
87
88
# File 'lib/mpg123player.rb', line 79

def volume= (val)
  @volume += val
  @volume = [@volume, 100].min
  @volume = [@volume, 0].max
  mpg123puts "V #{@volume}"
rescue => err
  @error = err
  changed
  notify_observers :state => :error, :error => err
end