require 'fileutils' def create_permutations(input_file,output_dir) input_file_basename = File.basename(input_file,".wav") output_file = File.join(output_dir,File.basename(input_file_basename,".wav")) FileUtils.cp(input_file,output_file + ".original.wav") #create pitch shifted files #system("sox '#{input_file}' '#{output_file}.50_cents_up.wav' pitch 50") system("sox '#{input_file}' '#{output_file}.one_semitone_up.wav' pitch 100") system("sox '#{input_file}' '#{output_file}.one_semitone_down.wav' pitch -100") system("sox '#{input_file}' '#{output_file}.two_semitones_up.wav' pitch 200") system("sox '#{input_file}' '#{output_file}.two_semitones_down.wav' pitch -200") #create faster and slower files system("sox '#{input_file}' '#{output_file}.10_percent_faster.wav' speed 1.10") system("sox '#{input_file}' '#{output_file}.10_percent_slower.wav' speed 0.90") system("sox '#{input_file}' '#{output_file}.20_percent_slower.wav' speed 0.80") system("sox '#{input_file}' '#{output_file}.20_percent_faster.wav' speed 1.20") #a reversed file system("sox '#{input_file}' '#{output_file}.reversed.wav' reverse") #crop a number of seconds from the beginning (10...65).step(5).each do |i| system("sox '#{input_file}' '#{output_file}.#{i}_sec_less.wav' trim #{i}") end #create white noise white_noise_file = "/tmp/#{input_file_basename}.white_noise.wav" system("sox '#{input_file}' '#{white_noise_file}' synth whitenoise" ) #mix white noise with file (0.05...0.35).step(0.05).each do |i| system("sox -m '#{input_file}' -v #{i} '#{white_noise_file}' '#{output_file}_#{i}_white_noise.wav'") end end glob_pattern = "/media/data/backups/igep/files/joren/datasets/dekkmma/MR.*.{wav}" output_dir = "." FileUtils.mkdir_p(output_dir) unless File.exists? output_dir input_files = Dir.glob(glob_pattern) input_files = input_files.sort_by{rand}[0..1] input_files = input_files.delete_if{|f| File.size(f) < 20 * 1024 * 1024 } #20 MB puts "Will process #{input_files.size} files" input_files.each do |i| create_permutations(i,output_dir) puts "done with #{i}" end