class AudioAnalysis: def compute_track(self, file_name): self.at = AudioTrack() (head, file_n) = os.path.split(file_name) if not self.at.open(file_name): return False self.file_name = file_name self.meta_data = RetirveMetadata() self.meta_data.scan_file(self.file_name) self.duration = StructDuration() self.duration.set_samples(self.at.Y.shape[0], self.at.Fs) self.virt_compute() return True def getDuration(self): return self.duration def getMetaData(self): return self.meta_data def getAudioTrack(self): return self.at def getFileName(self): return self.file_name def virt_compute(self): raise
def scan_dir(self, dir_name): if not os.path.isdir(dir_name): return 0 dir_list = sorted(os.listdir(dir_name)) self.dir_name = dir_name self.dr14 = 0 duration = StructDuration() at = AudioTrack() for file_name in dir_list: full_file = os.path.join(dir_name, file_name) #print_msg( full_file ) if at.open(full_file): self.__compute_and_append(at, file_name) self.meta_data.scan_dir(dir_name) if len(self.res_list) > 0: self.dr14 = int(round(self.dr14 / len(self.res_list))) return len(self.res_list) else: return 0
def run(self): at = AudioTrack() duration = StructDuration() #print("start .... ") while True: #Aquire the next free job self.lock_j.acquire() if self.jobs_free[0] >= len(self.jobs): self.lock_j.release() return curr_job = self.jobs_free[0] file_name = self.jobs[curr_job] self.jobs_free[0] = self.jobs_free[0] + 1 self.lock_j.release() full_file = os.path.join( self.dir_name , file_name ) if at.open( full_file ): ( dr14, dB_peak, dB_rms ) = compute_dr14( at.Y , at.Fs , duration ) self.lock_res_list.acquire() print( file_name + ": \t DR " + str( int(dr14) ) ) self.res_list[curr_job] = { 'file_name': file_name , 'dr14': dr14 , 'dB_peak': dB_peak , 'dB_rms': dB_rms , 'duration':duration.to_str() } self.lock_res_list.release() else: print( "- fail - " + full_file )
def compute_track(self, file_name): self.at = AudioTrack() (head, file_n) = os.path.split(file_name) if not self.at.open(file_name): return False self.file_name = file_name self.meta_data = RetirveMetadata() self.meta_data.scan_file(self.file_name) self.duration = StructDuration() self.duration.set_samples(self.at.Y.shape[0], self.at.Fs) self.virt_compute() return True
def scan_file(self, file_name): at = AudioTrack() duration = StructDuration() if at.open(file_name): self.__compute_and_append(at, file_name) return 1 else: return 0
def __compute_and_append(self, at, file_name): duration = StructDuration() #( dr14, dB_peak, dB_rms ) = self.compute_dr.compute( at.Y , at.Fs ) (dr14, dB_peak, dB_rms) = compute_dr14(at.Y, at.Fs, duration) sha1 = sha1_track_v1(at.Y, at.get_file_ext_code()) self.dr14 = self.dr14 + dr14 res = {'file_name': file_name, 'dr14': dr14, 'dB_peak': dB_peak, 'dB_rms': dB_rms, 'duration': duration.to_str(), 'sha1': sha1} self.res_list.append(res) print_msg(file_name + ": \t DR " + str(int(dr14)))
def __compute_and_append( self , at , file_name ): duration = StructDuration() #( dr14, dB_peak, dB_rms ) = self.compute_dr.compute( at.Y , at.Fs ) ( dr14, dB_peak, dB_rms ) = compute_dr14( at.Y , at.Fs , duration ) sha1 = sha1_track_v1( at.Y , at.get_file_ext_code() ) self.dr14 = self.dr14 + dr14 res = { 'file_name': file_name , 'dr14': dr14 , 'dB_peak': dB_peak , 'dB_rms': dB_rms , 'duration': duration.to_str() , 'sha1': sha1 } self.res_list.append(res) print_msg( file_name + ": \t DR " + str( int(dr14) ) )
def __compute_and_append( self , at , file_name ): duration = StructDuration() #( dr14, dB_peak, dB_rms ) = self.compute_dr.compute( at.Y , at.Fs ) ( dr14, dB_peak, dB_rms ) = compute_dr14( at.Y , at.Fs , duration ) self.dr14 = self.dr14 + dr14 res = { 'file_name': file_name , 'dr14': dr14 , 'dB_peak': dB_peak , 'dB_rms': dB_rms , 'duration':duration.to_str() } self.res_list.append(res) print( file_name + ": \t DR " + str( int(dr14) ) )
def run_mp( self , dir_name , lock_j , lock_res_list , job_free , res_array_sh ): at = AudioTrack() duration = StructDuration() #print_msg("start .... ") while True: #Aquire the next free job lock_j.acquire() if job_free.value >= len(res_array_sh): lock_j.release() return curr_job = job_free.value file_name = res_array_sh[curr_job].file_name job_free.value = job_free.value + 1 lock_j.release() full_file = os.path.join( dir_name , file_name ) #print ( full_file ) if at.open( full_file ): ( dr14, dB_peak, dB_rms ) = compute_dr14( at.Y , at.Fs , duration ) lock_res_list.acquire() print_msg( file_name + ": \t DR " + str( int(dr14) ) ) #res_list[curr_job] = { 'file_name': file_name , 'dr14': dr14 , 'dB_peak': dB_peak , 'dB_rms': dB_rms , 'duration':duration.to_str() } res_array_sh[curr_job].dr14 = dr14 res_array_sh[curr_job].dB_peak = dB_peak res_array_sh[curr_job].dB_rms = dB_rms res_array_sh[curr_job].duration = duration.to_float() lock_res_list.release() else: print_msg( "- fail - " + full_file )
def run_mp( self , job_queue_sh , res_queue_sh ): at = AudioTrack() duration = StructDuration() #print_msg("start .... ") while True: if job_queue_sh.empty() : return job = job_queue_sh.get() full_file = os.path.join( job.dir_name , job.file_name ) #print ( full_file ) if at.open( full_file ): ( dr14, dB_peak, dB_rms ) = compute_dr14( at.Y , at.Fs , duration ) sha1 = sha1_track_v1( at.Y , at.get_file_ext_code() ) print_msg( job.file_name + ": \t DR " + str( int(dr14) ) ) flush_msg() job.dr14 = dr14 job.dB_peak = dB_peak job.dB_rms = dB_rms job.duration = duration.to_float() job.sha1 = sha1 else: job.fail = True print_msg( "- fail - " + full_file ) res_queue_sh.put( job ) job_queue_sh.task_done()
class AudioAnalysis : def compute_track( self , file_name ) : self.at = AudioTrack() ( head, file_n ) = os.path.split( file_name ) if not self.at.open( file_name ): return False self.file_name = file_name self.meta_data = RetirveMetadata() self.meta_data.scan_file( self.file_name ) self.duration = StructDuration() self.duration.set_samples( self.at.Y.shape[0] , self.at.Fs ) self.virt_compute() return True def getDuration(self): return self.duration def getMetaData(self): return self.meta_data def getAudioTrack(self): return self.at def getFileName(self): return self.file_name def virt_compute(self): raise
def run_mp(self, job_queue_sh, res_queue_sh): at = AudioTrack() duration = StructDuration() #print_msg("start .... ") while True: if job_queue_sh.empty(): return job = job_queue_sh.get() full_file = os.path.join(job.dir_name, job.file_name) #print ( full_file ) if at.open(full_file): (dr14, dB_peak, dB_rms) = compute_dr14(at.Y, at.Fs, duration) sha1 = sha1_track_v1(at.Y, at.get_file_ext_code()) print_msg(job.file_name + ": \t DR " + str(int(dr14))) flush_msg() job.dr14 = dr14 job.dB_peak = dB_peak job.dB_rms = dB_rms job.duration = duration.to_float() job.sha1 = sha1 else: job.fail = True print_msg("- fail - " + full_file) res_queue_sh.put(job) job_queue_sh.task_done()
def compute_track( self , file_name ) : self.at = AudioTrack() ( head, file_n ) = os.path.split( file_name ) if not self.at.open( file_name ): return False self.file_name = file_name self.meta_data = RetirveMetadata() self.meta_data.scan_file( self.file_name ) self.duration = StructDuration() self.duration.set_samples( self.at.Y.shape[0] , self.at.Fs ) self.virt_compute() return True
def scan_mp( self , dir_name="" , thread_cnt=2 , files_list=[] ): if sys.version_info[0] == 2 : dir_name = dir_name.decode('utf-8') self.dr14 = 0 job_queue_sh = mp.JoinableQueue( 2000 ) res_queue_sh = mp.Queue( 2000 ) if files_list == [] : if not os.path.isdir(dir_name) : return 0 dir_list = sorted( os.listdir( dir_name ) ) self.dir_name = dir_name files_list = None else: dir_list = sorted( files_list ) ad = AudioDecoder() for file_name in dir_list: ( fn , ext ) = os.path.splitext( file_name ) if ext in ad.formats: job = SharedDrResObj() job.file_name = file_name job.dir_name = dir_name job_queue_sh.put( job ) threads = [1 for i in range(thread_cnt)] job_free = mp.Value( 'i' , 0 ) for t in range( thread_cnt ): threads[t] = mp.Process( target=self.run_mp , args=( job_queue_sh , res_queue_sh ) ) for t in range( thread_cnt ): threads[t].start() job_queue_sh.join() succ = 0 self.res_list = [] #i = 0 dur = StructDuration() while not res_queue_sh.empty() : res = res_queue_sh.get() if res.fail : continue self.res_list.append( { 'file_name': res.file_name , 'dr14': res.dr14 , 'dB_peak': res.dB_peak , 'dB_rms': res.dB_rms , 'duration': dur.float_to_str( res.duration ) , 'sha1': res.sha1 } ) self.res_list = sorted( self.res_list , key=lambda res: res['file_name'] ) # i = i + 1 for d in self.res_list: if d['dr14'] > dr14.min_dr(): self.dr14 = self.dr14 + d['dr14'] succ = succ + 1 self.meta_data.scan_dir( dir_name , files_list ) if len( self.res_list ) > 0 and succ > 0 : self.dr14 = int( round( self.dr14 / succ ) ) return succ else: return 0
def scan_mp(self, dir_name="", thread_cnt=2, files_list=[]): if sys.version_info[0] == 2: dir_name = dir_name.decode('utf-8') self.dr14 = 0 job_queue_sh = mp.JoinableQueue(2000) res_queue_sh = mp.Queue(2000) if files_list == []: if not os.path.isdir(dir_name): return 0 dir_list = sorted(os.listdir(dir_name)) self.dir_name = dir_name files_list = None else: dir_list = sorted(files_list) ad = AudioDecoder() for file_name in dir_list: (fn, ext) = os.path.splitext(file_name) if ext in ad.formats: job = SharedDrResObj() job.file_name = file_name job.dir_name = dir_name job_queue_sh.put(job) threads = [1 for i in range(thread_cnt)] job_free = mp.Value('i', 0) for t in range(thread_cnt): threads[t] = mp.Process(target=self.run_mp, args=(job_queue_sh, res_queue_sh)) for t in range(thread_cnt): threads[t].start() job_queue_sh.join() succ = 0 self.res_list = [] #i = 0 dur = StructDuration() while not res_queue_sh.empty(): res = res_queue_sh.get() if res.fail: continue self.res_list.append({ 'file_name': res.file_name, 'dr14': res.dr14, 'dB_peak': res.dB_peak, 'dB_rms': res.dB_rms, 'duration': dur.float_to_str(res.duration), 'sha1': res.sha1 }) self.res_list = sorted(self.res_list, key=lambda res: res['file_name']) # i = i + 1 for d in self.res_list: if d['dr14'] > dr14.min_dr(): self.dr14 = self.dr14 + d['dr14'] succ = succ + 1 self.meta_data.scan_dir(dir_name, files_list) if len(self.res_list) > 0 and succ > 0: self.dr14 = int(round(self.dr14 / succ)) return succ else: return 0
def __init__(self): self.duration = StructDuration() ; self.Dr_lr = numpy.zeros(2)
def scan_mp( self , dir_name="" , thread_cnt=2 , files_list=[] ): if sys.version_info[0] == 2 : dir_name = dir_name.decode('utf-8') self.dr14 = 0 if files_list == [] : if not os.path.isdir(dir_name) : return 0 dir_list = sorted( os.listdir( dir_name ) ) self.dir_name = dir_name files_list = None else: dir_list = sorted( files_list ) ad = AudioDecoder() jobs = [] for file_name in dir_list: ( fn , ext ) = os.path.splitext( file_name ) if ext in ad.formats: jobs.append( file_name ) res_array=[SharedDrResObj() for i in range( len(jobs) )] for i in range( len(jobs) ) : res_array[i].file_name = jobs[i] res_array[i].dr14 = dr14.min_dr() lock_j = mp.Lock() lock_res_list = mp.Lock() threads = [1 for i in range(thread_cnt)] #job_free = [0] job_free = mp.Value( 'i' , 0 ) res_array_sh = mp.Array( SharedDrResObj , res_array ) for t in range( thread_cnt ): threads[t] = mp.Process( target=self.run_mp , args=( dir_name , lock_j , lock_res_list , job_free , res_array_sh ) ) for t in range( thread_cnt ): threads[t].start() for t in range( thread_cnt ): threads[t].join() succ = 0 #empty_res = { 'file_name': '' , 'dr14': dr14.min_dr() , 'dB_peak': -100 , 'dB_rms': -100 , 'duration':"0:0" } self.res_list = [] # [empty_res for i in range( len(jobs) )] #i = 0 dur = StructDuration() for res in res_array_sh: self.res_list.append( { 'file_name': res.file_name , 'dr14': res.dr14 , 'dB_peak': res.dB_peak , 'dB_rms': res.dB_rms , 'duration': dur.float_to_str( res.duration ) } ) # i = i + 1 for d in self.res_list: if d['dr14'] > dr14.min_dr(): self.dr14 = self.dr14 + d['dr14'] succ = succ + 1 self.meta_data.scan_dir( dir_name , files_list ) if len( self.res_list ) > 0 and succ > 0 : self.dr14 = int( round( self.dr14 / succ ) ) return succ else: return 0