Class: Hallon::Fifo
- Inherits:
-
Object
- Object
- Hallon::Fifo
- Defined in:
- lib/hallon-fifo/fifo.rb,
lib/hallon-fifo/version.rb
Constant Summary collapse
- VERSION =
"0.0.3"
Instance Attribute Summary collapse
-
#format ⇒ Object
Returns the value of attribute format.
-
#output ⇒ Object
Returns the value of attribute output.
Instance Method Summary collapse
- #drops ⇒ Object
-
#initialize ⇒ Fifo
constructor
A new instance of Fifo.
- #pause ⇒ Object
- #play ⇒ Object
- #reset ⇒ Object
- #stop ⇒ Object
-
#stream ⇒ Object
runs indefinitely.
Constructor Details
#initialize ⇒ Fifo
Returns a new instance of Fifo.
8 9 10 11 12 13 14 15 16 |
# File 'lib/hallon-fifo/fifo.rb', line 8 def initialize @buffer = Array.new @playing, @stopped = false @buffer_size = 22050 # overridden by format= @output ||= "hallon-fifo.pcm" File.delete(@output) if File.exists?(@output) File.mkfifo(@output) # Will error if it's overwriting another file end |
Instance Attribute Details
#format ⇒ Object
Returns the value of attribute format.
6 7 8 |
# File 'lib/hallon-fifo/fifo.rb', line 6 def format @format end |
#output ⇒ Object
Returns the value of attribute output.
6 7 8 |
# File 'lib/hallon-fifo/fifo.rb', line 6 def output @output end |
Instance Method Details
#drops ⇒ Object
31 32 33 34 35 |
# File 'lib/hallon-fifo/fifo.rb', line 31 def drops # This SHOULD return the number of times the queue "stuttered" # However, it ain't easy to do this with only knowledge of the fifo pipe. 0 end |
#pause ⇒ Object
37 38 39 |
# File 'lib/hallon-fifo/fifo.rb', line 37 def pause @playing = false end |
#play ⇒ Object
41 42 43 44 |
# File 'lib/hallon-fifo/fifo.rb', line 41 def play @playing = true @stopped = false end |
#reset ⇒ Object
53 54 55 |
# File 'lib/hallon-fifo/fifo.rb', line 53 def reset self.output = @output end |
#stop ⇒ Object
46 47 48 49 50 51 |
# File 'lib/hallon-fifo/fifo.rb', line 46 def stop @stopped = true @stream_thread.exit if @stream_thread @buffer.clear end |
#stream ⇒ Object
runs indefinitely
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/hallon-fifo/fifo.rb', line 57 def stream # runs indefinitely @stream_thread = Thread.new do queue = File.new(@output, "wb") loop do start = Time.now.to_f complete = start + 0.5 # Get the next block from Spotify. audio_data = yield(@buffer_size) if audio_data.nil? # Audio format has changed, reset buffer. @buffer.clear else @buffer += audio_data begin queue.syswrite packed_samples(@buffer) rescue Errno::EPIPE self.reset end @buffer.clear end finish = Time.now.to_f sleep complete - finish if finish < complete end end end |