It will search recursively for all readable files, starting from execution from the folder passed as argument or, if miss, from current folder. Tested on a linux box with mplayer.
Usage:
$ ./shuffle
# play recursively all files from current folder
$ ./shuffle /path/to/files
# play recursively all files from specified folderThat's the source code.
#!/usr/bin/ruby
player = "/usr/local/bin/mplayer"
formats = ["mp3", "ogg", "flv"]
folder = ARGV[0] || ""
class ShufflePlayer
@files
@frx
@player
def initialize(player, formats, folder)
@player = player
gen_regex(formats)
load_files(folder)
end
def play
flag = 1
while flag && @files.length > 0
flag = system("#{@player} -quiet #{@files.delete(@files[rand(Time.now) % @files.length])}")
end
end
private
def load_files(folder)
@files = Dir[folder+'**/*.*'].reject!{|f| f if @frx.match(f).nil? || !File.readable?(f) }
@files.collect!{|f| f.gsub(/['"\-\s\[\]\(\)]/){ |m| "\\"+m }} unless @files.nil?
end
def gen_regex(formats)
@frx = /(#{formats.join('|')})$/
end
end
ShufflePlayer.new(player,formats,folder).playSecurity disclaimer: this code is strong insecure, i've posted for study purpouses, I'm not responsable if someone use it to attack your system.
