def load_wav_file(fname, smprate=16000):
'''
load a WAV file, then return a numpy float32 vector.
Resample if needed.
The returned array will always have lenght of multiples of FFT_SIZE
to ease preprocessing, this is done via zero padding at the end.
'''
smprate_real, data = wavfile.read(fname)
if smprate_real == smprate:
data = data.astype(FLOATX)
elif (smprate_real % smprate) == 0:
# integer factor downsample
smpfactor = smprate_real // smprate
data = np.pad(
data, [(0, (-len(data)) % smpfactor)], mode='constant')
data = np.reshape(data, [len(data)//smpfactor, smpfactor])
data = np.mean(data.astype(FLOATX), axis=1)
else:
newlen = int(ceil(len(data) * (smprate / smprate_real)))
# FIXME this resample is very slow on prime length
data = scipy.signal.resample(data, newlen).astype(FLOATX)
return data
评论列表
文章目录