作为一个简单的实验,我想计算音频文件的斯特夫特:
sample_rate, samples = wav.read(file)
f, t, Zxx = stft(samples, sample_rate)
_, reconstructed = istft(Zxx, sample_rate)
padded_samples = np.zeros_like(reconstructed)
padded_samples[:len(samples)] = samples
print (np.sum(padded_samples - reconstructed))输出:-1.37309940428。很小,不是吗?考虑到samples是形状的(9218368,)。
test_file = os.path.join(temp_folder, 'reconstructed.wav')
wav.write(test_file, sample_rate, reconstructed)重建的文件听起来很糟糕。在噪音之下,原作几乎听不见。我是否犯了错误,还是根本不可能从STFT中恢复一个音频文件?
对于如何将音频文件转换为某种可处理的数据,然后从音频文件中重构音频文件,您有什么其他建议吗?什么其他类型的数据结构可以用来处理音频文件?
谢谢。
编辑:
正如沃伦所建议的:
print (samples.shape)
print (samples.dtype)
print (reconstructed.dtype)输出:
(9218368,)
int16
float64根据writing,int和float输入在编写wav文件时有不同的含义。我试着重构为np.int16:
rounded_reconstructed = np.rint(reconstructed).astype(np.int16)
test_file = os.path.join(temp_folder, 'reconstructed.wav')
wav.write(test_file, sample_rate, rounded_reconstructed)结果与原来的结果几乎没有区别。谢谢你的帮助。
发布于 2017-12-27 10:23:48
正如沃伦所建议的
print (samples.shape)
print (samples.dtype)
print (reconstructed.dtype)输出:
(9218368,)
int16
float64根据枕骨医生的说法,int和float在写wav文件时有不同的含义。我试着把reconstructed转换成np.int16
rounded_reconstructed = np.rint(reconstructed).astype(np.int16)
test_file = os.path.join(temp_folder, 'reconstructed.wav')
wav.write(test_file, sample_rate, rounded_reconstructed)结果与原来的结果几乎没有区别。谢谢你的帮助。
https://stackoverflow.com/questions/47983897
复制相似问题