- generate names: use sprintf and fullfile.
- read names: use dir and fullfile.
Reading files from a directory
    5 views (last 30 days)
  
       Show older comments
    
I have a code which cuts audio signal (.wav) into segments written in .txt files. My current code works only with one audio signal, and matching text file. But I need to adjust the code to work with more files. I have two directories; one for .wav files and one for text files which both include more than one file. I need to write the code which reads one by one audio and text file and cuts the audio segment. The code below works with one audio file and one text file.
%read audiofile
[data,Fs] = audioread('sz08010103404.wav'); 
%read text file with segments
list_zv = fopen('intervali_zvucni_sek.txt','r');
C_zv=cell(size(list_zv)) %put every interval int it's own cell
 %signal
N = length(data);
totaldur = N/Fs; % total duration
t = linspace(0,totaldur,N); % create a time vector
 for k=1:length(list_zv)
    content_zv = fgets(list_zv(k)) %gets every part of the list
    d_zv= strsplit(content_zv,',')% splits str at the delimiters specified by delimiter
Z=[] %for results
  for n=1:length(d_zv) 
          y=d_zv{n} 
          z= strsplit(y,' ') %split the content of current cell
          start=z{1} %get the first part of the cell 
          stop=z{2} %get the second part of the cell
          start1 = str2num(start) %turn into numeric 
          stop1 = str2num(stop)
          B(n,1:2) = [start1,stop1];%test matrix
 %             cut the signal 
                seg1 = data(t>start1 & t<stop1)
                sound(seg1)
               ZV{n}=seg1 %put the signal into the matrix
    end
end
I tried to open all the files from the directory by using dir function, what I managed to do, but I can't get the contents from text file to read it. Every text file looks like this; 0.205000 0.220000 ,0.23500 0.265000 ,...
Code:
 FileList = dir('ODOGS/segments'); %folder with text files for segments
 N = size(FileList,1);
 FileList_wav = dir('ODOGS/WAV'); %folder with audio files
 N_w = size(FileList_wav,1);
 for k = 1:N   
   filename = FileList(k).name % get the file name 
   for x = 1:N_w
       filename_w = FileList_wav(x).name
       disp(filename_w)
       if filename(k) == filename_w(x) %audio file and text file need to have the same name
           %do the rest of the code
       end
    end
end
0 Comments
Accepted Answer
  Stephen23
      
      
 on 27 May 2017
        How to read multiple files is explained extensively in the documentation, on this forum, and in the wiki:
etc
The first thing to decide is if you want to generate the file names, or if you want to read the names of existing files:
You can also find some examples with my FEX submission natsortfiles:
More Answers (0)
See Also
Categories
				Find more on Audio and Video Data 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!
