There are may times in DSP algorithm design where you need to run your new and shiny algorithm against a bunch of test vectors. In audio processing, it is usually WAV files. The only problem is that if you are constantly adding/removing files from your test database, you have to keep changing the filenames and path in your m-file.
But using the code below, it is now possible to point your m-file to a directory and say "go". Files can be added/removed/renamed and each time you run this code it will scan the files that match the WAV extension and it will dump the outputs in a separate folder. In essence, you have a way to batch process any number of files in a specific directory.
The code below shows a simple lowpass filter is applied to the entire directory of WAV files in the folder: "test_input_database". This script can be tweaked to use any file type you want as long as you have the appropriate I/O parser.
Note: This code is not recursive. All files must exist in one input folder.
%In this example we are going to apply a low-pass filter to all WAV files, %but it could be a multitude of different "processing" methods. This is %only used to illustrate the batch processing example. Fs = 44100; %Hz Fc = 1000; %Hz [b,a] = butter(2, Fc/(Fs/2), 'low'); %These are the input and output directories relative to this M-file input_directory = 'test_input_database\'; output_direcory = 'test_output\'; %What extensions are you looking for? In our case, we want to batch %process audio files that are store in the uncompressed *.WAV format extension = '*.wav'; %Get the files files=dir([input_directory '*.wav']); N_files=numel(files); %Loop through one file at a time for i=1:N_files %This is a stereo file and for this example, %I only care about channel number 1 x = wavread([input_directory files(i).name ]); x = x(:,1); %Process the data by applying our filter y = filter(b,a,x); %Output the data as a unique filename based on input wavwrite(y, Fs, [output_directory 'processed' files(i).name]); disp(['Processed File: ' input_directory files(i).name 'as: ' ... output_directory 'processed' files(i).name]); end