module NyanCatFormat::Music
Public Instance Methods
dump_summary(*args)
click to toggle source
Calls superclass method
# File lib/nyan_cat_format/music.rb, line 38 def dump_summary(*args) kill_music super end
kernel()
click to toggle source
# File lib/nyan_cat_format/music.rb, line 16 def kernel @kernel ||= Kernel end
kernel=(kernel)
click to toggle source
# File lib/nyan_cat_format/music.rb, line 12 def kernel=(kernel) @kernel = kernel end
linux?()
click to toggle source
# File lib/nyan_cat_format/music.rb, line 8 def linux? platform.downcase.include?('linux') end
nyan_mp3()
click to toggle source
# File lib/nyan_cat_format/music.rb, line 28 def nyan_mp3 File.expand_path('../../../data/nyan-cat.mp3', __FILE__) end
osx?()
click to toggle source
# File lib/nyan_cat_format/music.rb, line 4 def osx? platform.downcase.include?("darwin") end
platform()
click to toggle source
# File lib/nyan_cat_format/music.rb, line 24 def platform @platform ||= RUBY_PLATFORM end
platform=(platform)
click to toggle source
# File lib/nyan_cat_format/music.rb, line 20 def platform=(platform) @platform = platform end
start(input)
click to toggle source
Calls superclass method
# File lib/nyan_cat_format/music.rb, line 32 def start input super @music_thread = Thread.new { start_music_or_kill(Thread.current) } wait_for_music_to_start(@music_thread) end
Private Instance Methods
kill_music()
click to toggle source
# File lib/nyan_cat_format/music.rb, line 45 def kill_music if @music_thread && @music_thread['music_pid'] @music_thread.kill Process.kill('KILL', @music_thread['music_pid']) end end
linux_player()
click to toggle source
# File lib/nyan_cat_format/music.rb, line 52 def linux_player %w{mpg321 mpg123}.find {|player| kernel.system("which #{ player } &>/dev/null && type #{ player } &>/dev/null") } end
music_command()
click to toggle source
# File lib/nyan_cat_format/music.rb, line 58 def music_command # this isn't really threadsafe but it'll work if we're careful return @music_command if @music_command if osx? @music_command = "afplay #{nyan_mp3}" elsif linux? && linux_player @music_command = "#{ linux_player } #{ nyan_mp3 } &>/dev/null" end end
start_music_or_kill(thread)
click to toggle source
# File lib/nyan_cat_format/music.rb, line 68 def start_music_or_kill(thread) thread.exit unless File.exists?(nyan_mp3) && music_command loop do thread['music_pid'] = kernel.spawn(music_command) thread["started_playing"] ||= true Process.wait(thread['music_pid']) end end
wait_for_music_to_start(music_thread)
click to toggle source
# File lib/nyan_cat_format/music.rb, line 77 def wait_for_music_to_start(music_thread) while !music_thread["started_playing"] && music_thread.status sleep 0.001 end end