Make .wav signals same size?
    4 views (last 30 days)
  
       Show older comments
    
    Djordje Damnjanovic
 on 14 Feb 2020
  
    
    
    
    
    Commented: Djordje Damnjanovic
 on 19 Feb 2020
            Hello everyone!
I have this problem. I need to read for example 60 wav signals, find the shortest one and cut all of them to the size of shortest. 
Process of cut is like this: from the middle of the signal need to cut signal right and left equally to the size of shortest signal.
I upload picture as extra explanation. 

0 Comments
Accepted Answer
  Image Analyst
      
      
 on 14 Feb 2020
        See the FAQ: How_can_I_process_a_sequence_of_files?
The "dir()" version of the code is probably what you want.  So do the loop once to scan the files, calling audioread, then get the length, then scan again to do the cropping.  Make sure you save into a different folder so you don't permanently destroy your input sound files.  In short:
filePattern = fullfile(inputFolder, '*.wav');
files = dir(filePattern)
minLength = inf;
for k = 1 : length(files)
    thisFileName = fullfile(inputFolder, files(k).name);
    [y, fs] = audioread(thisFileName);
    if length(y) > minLength
        maxLength = length(y);
    end
end
% Now scan again, doing the cropping
for k = 1 : length(files)
    thisFileName = fullfile(inputFolder, files(k).name);
    [y, fs] = audioread(thisFileName);
    y = y(1:minLength);
    outputFileName = fullfile(outputFolder, files(k).name);
    audiowrite(...........
end
    etc.  Or something like that.  Of course you need to assign inputFolder and outputFolder to some actual folders on your drive.
2 Comments
More Answers (0)
See Also
Categories
				Find more on Audio I/O and Waveform Generation in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
