首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:从STFT重构音频文件

Python:从STFT重构音频文件
EN

Stack Overflow用户
提问于 2017-12-26 21:30:54
回答 1查看 1.3K关注 0票数 0

作为一个简单的实验,我想计算音频文件的斯特夫特

代码语言:javascript
运行
复制
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,)

代码语言:javascript
运行
复制
test_file = os.path.join(temp_folder, 'reconstructed.wav')
wav.write(test_file, sample_rate, reconstructed)

重建的文件听起来很糟糕。在噪音之下,原作几乎听不见。我是否犯了错误,还是根本不可能从STFT中恢复一个音频文件?

对于如何将音频文件转换为某种可处理的数据,然后从音频文件中重构音频文件,您有什么其他建议吗?什么其他类型的数据结构可以用来处理音频文件?

谢谢。

编辑:

正如沃伦所建议的:

代码语言:javascript
运行
复制
print (samples.shape)
print (samples.dtype)
print (reconstructed.dtype)

输出:

代码语言:javascript
运行
复制
(9218368,)
int16
float64

根据writing,int和float输入在编写wav文件时有不同的含义。我试着重构为np.int16:

代码语言:javascript
运行
复制
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)

结果与原来的结果几乎没有区别。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-27 10:23:48

正如沃伦所建议的

代码语言:javascript
运行
复制
print (samples.shape)
print (samples.dtype)
print (reconstructed.dtype)

输出:

代码语言:javascript
运行
复制
(9218368,)
int16
float64

根据枕骨医生的说法,intfloat在写wav文件时有不同的含义。我试着把reconstructed转换成np.int16

代码语言:javascript
运行
复制
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)

结果与原来的结果几乎没有区别。谢谢你的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47983897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档