所有我正在迭代文件列表。出于某种原因,它的拍摄速度高达约30%,然后减速到令人愤怒的爬行。
我已经查看了它开始变慢时应该存在的文件,并且它们的大小确实增长了一些,但它们并没有线性增长。代码如下:
for i in wavs:
gc.collect()
print_progress_bar(wavs.index(i)/len(wavs))
shapes.append(getshape(i.src_path))
我正在读map()
是一种加速循环的方法,但我觉得循环开销不是正在增长的。 gc.collect()
在这里帮助我吗?
以下是被调用的函数:
def print_progress_bar(percent):
done_len = int(percent * progress_bar_length)
bar = "["
bar += "=" * done_len
bar += ">"
bar += " " * (progress_bar_length - done_len)
bar += "] "
bar += str(round(percent*100, 2))
bar += "%"
print("\r", end='')
print(bar+(" " * 5), end='')
sys.stdout.flush()
def getshape(path):
if getsize(path) == 0:
return (0,)
try:
this_wav = wave.open(path, 'r')
except:
temp_path = "C:\\soundfiles\\tempwav.wav"
command = ["sox", path , "-r", "8000" , "-c" , "1", "-e", "unsigned", temp_path]
convert = subprocess.Popen(command)
convert.wait()
this_wav = wave.open(temp_path, 'r')
finally:
num_frames = this_wav.getnframes()
frames = this_wav.readframes(num_frames)
this_wav.close()
this_wav_array = list(map(lambda x: x, frames))
return numpy.fft.fft(this_wav_array).shape or (0,)
我尝试过分析,但后来的部分掩盖了此处显示的内容。这将填充shapes
列表以供稍后进行比较。根据我手动检查的情况,需要异常的wav文件分布均匀。
这不是剧本的“肉”,但它变得很烦人。有什么想法吗?