音楽シャッフルスクリプト

サンコネクション MUSIC+を使いこなすため
音楽ファイルをランダムにシャッフルするrubyスクリプトを書いてみた。
誰かの役に立つかもしれないので、置いておきます。


適当です。免責とさせていただきます。
ご自分の責任で、ご自由にご使用ください。


require 'fileutils'

# ここに、音楽ファイルのあるディレクトリパスを
music_dir = 'C:/MUSIC'
# ここに、シャッフル後の音楽ファイルを置くディレクトリパスを
dest_dir = 'C:/TRANSPORT'

# 音楽ファイルのパスを全取得(このソースではwmaオンリー)
files = Array.new
Dir.glob(music_dir + "/**/*.wma").each do |fn|
  files << {:name => fn, :size => File.size(fn)}
end

# シャッフル
files.sort! { rand(0) <=> rand(0) }

# コピーするファイルを決める
size_sum = 0
copy_files = Array.new
files.each do |f|
  # だいたい512MBまで
  if size_sum > 512 * 1024 * 1024
    break
  end
  copy_files << f
  size_sum += f[:size]
end

print "#{copy_files.size}個のファイルをコピーします。\n"
$stdout.flush

# ファイルをコピーする
copy_files.each_with_index do |f, i|
  print "#{i}/#{copy_files.size} #{File.basename(f[:name])}"
  $stdout.flush
  
  FileUtils.copy_file(f[:name], dest_dir + ("/%03d " % i) + File.basename(f[:name]))
  
  print " done.\n"
end