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 __init__(self): self.res_list = [] self.dir_name = '' self.dr14 = 0 self.meta_data = RetirveMetadata() self.compute_dr = ComputeDR14() self.__write_to_local_db = False self.coll_dir = os.path.realpath(get_collection_dir())
def __init__( self ): self.res_list = [] self.dir_name = '' self.dr14 = 0 self.meta_data = RetirveMetadata() self.histogram = False self.compute_dr = ComputeDR14()
def __init__( self ): self.res_list = [] self.dir_name = '' self.dr14 = 0 self.meta_data = RetirveMetadata() self.compute_dr = ComputeDR14() self.__write_to_local_db = False self.coll_dir = os.path.realpath( get_collection_dir() )
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
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 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
class DynamicRangeMeter: def __init__( self ): self.res_list = [] self.dir_name = '' self.dr14 = 0 self.meta_data = RetirveMetadata() self.histogram = False self.compute_dr = ComputeDR14() def scan_file( self , file_name): at = AudioTrack() duration = StructDuration() if self.histogram : compute_fun = self.__compute_histogram else: compute_fun = self.__compute_and_append if at.open( file_name ): compute_fun( at , file_name ) return 1 else: return 0 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( 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 __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 __compute_histogram( self , at , file_name ): duration = StructDuration() self.meta_data.scan_file( file_name ) (foo,fn) = os.path.split( file_name ) title = self.meta_data.get_value( fn , "title" ) print( title ) compute_hist( at.Y , at.Fs , duration , title=title ) def scan_dir_mt( self , dir_name , thread_cnt ): if not os.path.isdir(dir_name) : return 0 dir_list = sorted( os.listdir( dir_name ) ) self.dir_name = dir_name self.dr14 = 0 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 ) 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) )] lock_j = threading.Lock() lock_res_list = threading.Lock() threads = [1 for i in range(thread_cnt)] job_free = [0] for t in range( thread_cnt ): threads[t] = ScanDirMt( dir_name, jobs , job_free , lock_j , self.res_list , lock_res_list ) for t in range( thread_cnt ): threads[t].start() for t in range( thread_cnt ): threads[t].join() succ = 0 for d in self.res_list: if d['dr14'] > dr14.min_dr(): self.dr14 = self.dr14 + d['dr14'] succ = succ + 1 #print( str(self.res_list ) ) self.meta_data.scan_dir( dir_name ) if len( self.res_list ) > 0 and succ > 0 : self.dr14 = int( round( self.dr14 / succ ) ) return succ else: return 0 def fwrite_dr( self , file_name , tm , ext_table=False , std_out=False , append=False , dr_database=True ): if ext_table : wr = WriteDrExtended() else : wr = WriteDr() wr.set_dr_database( dr_database ) self.table_txt = wr.write_dr( self , tm ) if std_out: print( self.table_txt ) return if append : file_mode = "a" else : file_mode = "w" try: out_file = codecs.open( file_name , file_mode , "utf-8-sig" ) except: print ( "File opening error [%s] :" % file_name , sys.exc_info()[0] ) return False out_file.write( self.table_txt ) out_file.close() return True
class DynamicRangeMeter: def __init__( self ): self.res_list = [] self.dir_name = '' self.dr14 = 0 self.meta_data = RetirveMetadata() self.compute_dr = ComputeDR14() 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 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 __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_msg( file_name + ": \t DR " + str( int(dr14) ) ) def fwrite_dr( self , file_name , tm , ext_table=False , std_out=False , append=False , dr_database=True ): if ext_table : wr = WriteDrExtended() else : wr = WriteDr() wr.set_dr_database( dr_database ) self.table_txt = wr.write_dr( self , tm ) if std_out: print_out( self.table_txt ) return if append : file_mode = "a" else : file_mode = "w" try: out_file = codecs.open( file_name , file_mode , "utf-8-sig" ) except: print_msg ( "File opening error [%s] :" % file_name , sys.exc_info()[0] ) return False out_file.write( self.table_txt ) out_file.close() 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 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 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 )
class DynamicRangeMeter: def __init__( self ): self.res_list = [] self.dir_name = '' self.dr14 = 0 self.meta_data = RetirveMetadata() self.compute_dr = ComputeDR14() self.__write_to_local_db = False self.coll_dir = os.path.realpath( get_collection_dir() ) def write_to_local_db( self , f=False ): self.__write_to_local_db = f 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 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 __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 write_to_local_database(self): wr = WriteDr() if self.__write_to_local_db and os.path.realpath( self.dir_name ).startswith( self.coll_dir ) : wr.write_to_local_dr_database( self ) def fwrite_dr( self , file_name , tm , ext_table=False , std_out=False , append=False , dr_database=True ): if ext_table : wr = WriteDrExtended() else : wr = WriteDr() wr.set_loudness_war_db_compatible( dr_database ) self.table_txt = wr.write_dr( self , tm ) if std_out: print_out( self.table_txt ) return if append : file_mode = "a" else : file_mode = "w" try: out_file = codecs.open( file_name , file_mode , "utf-8-sig" ) except: print_msg ( "File opening error [%s] :" % file_name , sys.exc_info()[0] ) return False out_file.write( self.table_txt ) out_file.close() 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 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 DynamicRangeMeter: def __init__(self): self.res_list = [] self.dir_name = '' self.dr14 = 0 self.meta_data = RetirveMetadata() self.compute_dr = ComputeDR14() self.__write_to_local_db = False self.coll_dir = os.path.realpath(get_collection_dir()) def write_to_local_db(self, f=False): self.__write_to_local_db = f 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 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 __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 write_to_local_database(self): wr = WriteDr() if self.__write_to_local_db and os.path.realpath( self.dir_name).startswith(self.coll_dir): wr.write_to_local_dr_database(self) def fwrite_dr(self, file_name, tm, ext_table=False, std_out=False, append=False, dr_database=True): if ext_table: wr = WriteDrExtended() else: wr = WriteDr() wr.set_loudness_war_db_compatible(dr_database) self.table_txt = wr.write_dr(self, tm) if std_out: print_out(self.table_txt) return if append: file_mode = "a" else: file_mode = "w" try: out_file = codecs.open(file_name, file_mode, "utf-8-sig") except: print_msg("File opening error [%s] :" % file_name, sys.exc_info()[0]) return False out_file.write(self.table_txt) out_file.close() 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 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()