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