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}.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 = "/input_files/**/*.{wav}" output_dir = "/fingerprinting_dataset" FileUtils.mkdir_p(output_dir) unless File.exists? output_dir Dir.glob(glob_pattern).delete_if{|i| i =~ /.*MR\..*/}.shuffle[0..100].each do |i| create_permutations(i,output_dir) end