refactor fileprocessor
This commit is contained in:
		
							parent
							
								
									43261dec16
								
							
						
					
					
						commit
						f65e13f9c2
					
				|  | @ -0,0 +1,98 @@ | ||||||
|  | import glob | ||||||
|  | import os | ||||||
|  | import numpy as np | ||||||
|  | from scipy.io import wavfile | ||||||
|  | 
 | ||||||
|  | class ProcessorFunctions: | ||||||
|  | 
 | ||||||
|  |     @staticmethod | ||||||
|  |     def match_vtck(clean_path,noisy_path,sr): | ||||||
|  | 
 | ||||||
|  |         matching_wavfiles = list() | ||||||
|  |         clean_filenames = [file.split('/')[-1] for file in glob.glob(os.path.join(clean_path,"*.wav"))] | ||||||
|  |         noisy_filenames = [file.split('/')[-1] for file in glob.glob(os.path.join(noisy_path,"*.wav"))] | ||||||
|  |         common_filenames = np.intersect1d(noisy_filenames,clean_filenames) | ||||||
|  | 
 | ||||||
|  |         for file_name in common_filenames: | ||||||
|  | 
 | ||||||
|  |              sr_clean, clean_file = wavfile.read(os.path.join(clean_path,file_name)) | ||||||
|  |              sr_noisy, noisy_file = wavfile.read(os.path.join(noisy_path,file_name)) | ||||||
|  |              if ((clean_file.shape[-1]==noisy_file.shape[-1]) and  | ||||||
|  |                     (sr_clean==sr) and  | ||||||
|  |                         (sr_noisy==sr)): | ||||||
|  |                 matching_wavfiles.append( | ||||||
|  |                                     {"clean":os.path.join(clean_path,file_name),"noisy":os.path.join(noisy_path,file_name), | ||||||
|  |                                     "duration":clean_file.shape[-1]/sr} | ||||||
|  |                                     ) | ||||||
|  |         return matching_wavfiles | ||||||
|  | 
 | ||||||
|  |     @staticmethod | ||||||
|  |     def match_dns2020(clean_path,noisy_path,sr): | ||||||
|  |          | ||||||
|  |         matching_wavfiles = dict() | ||||||
|  |         clean_filenames = [file.split('/')[-1] for file in glob.glob(os.path.join(clean_path,"*.wav"))] | ||||||
|  |         for clean_file in clean_filenames: | ||||||
|  |             noisy_filenames = glob.glob(os.path.join(noisy_path,f"*_{clean_file}.wav")) | ||||||
|  |             for noisy_file in noisy_filenames: | ||||||
|  | 
 | ||||||
|  |                 sr_clean, clean_file = wavfile.read(os.path.join(clean_path,clean_file)) | ||||||
|  |                 sr_noisy, noisy_file = wavfile.read(noisy_file) | ||||||
|  |                 if ((clean_file.shape[-1]==noisy_file.shape[-1]) and  | ||||||
|  |                         (sr_clean==sr) and  | ||||||
|  |                             (sr_noisy==sr)): | ||||||
|  |                     matching_wavfiles.update( | ||||||
|  |                                         {"clean":os.path.join(clean_path,clean_file),"noisy":noisy_file, | ||||||
|  |                                         "duration":clean_file.shape[-1]/sr} | ||||||
|  |                                         ) | ||||||
|  | 
 | ||||||
|  |         return matching_wavfiles | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Fileprocessor: | ||||||
|  | 
 | ||||||
|  |     def __init__( | ||||||
|  |         self, | ||||||
|  |         clean_dir, | ||||||
|  |         noisy_dir, | ||||||
|  |         sr = 16000, | ||||||
|  |         matching_function = None | ||||||
|  |     ): | ||||||
|  |         self.clean_dir = clean_dir | ||||||
|  |         self.noisy_dir = noisy_dir | ||||||
|  |         self.sr = sr | ||||||
|  |         self.matching_function = matching_function | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def from_name(cls, | ||||||
|  |                 name:str, | ||||||
|  |                 clean_dir, | ||||||
|  |                 noisy_dir, | ||||||
|  |                 sr, | ||||||
|  |                 matching_function=None | ||||||
|  |         ): | ||||||
|  | 
 | ||||||
|  |         if name.lower() == "vctk": | ||||||
|  |             return cls(clean_dir,noisy_dir,sr, ProcessorFunctions.match_vtck) | ||||||
|  |         elif name.lower() == "dns-2020": | ||||||
|  |             return cls(clean_dir,noisy_dir,sr, ProcessorFunctions.match_dns2020) | ||||||
|  |         else: | ||||||
|  |             return cls(clean_dir,noisy_dir,sr, matching_function) | ||||||
|  | 
 | ||||||
|  |     def prepare_matching_dict(self): | ||||||
|  | 
 | ||||||
|  |         if self.matching_function is None: | ||||||
|  |             raise ValueError("Not a valid matching function") | ||||||
|  | 
 | ||||||
|  |         return self.matching_function(self.clean_dir,self.noisy_dir,self.sr) | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	 shahules786
						shahules786