我有一个2秒16位单通道8khz的wav文件,我需要改变它的音量。
这应该很简单,因为改变音量和改变信号的振幅是一样的,我只需要把它衰减,也就是说把它乘以0到1之间的数字。但它不起作用:新的声音很低,但充满了噪音。我做错什么了?
这是我的代码:
import wave, numpy, struct
# Open
w = wave.open("input.wav","rb")
p = w.getparams()
f = p[3] # number of frames
s = w.readframes(f)
w.close()
# Edit
s = numpy.fromstring(s, numpy.int16) * 5 / 10 # half amplitude
s = struct.pack('h'*len(s), *s)
# Save
w = wave.open("output.wav","wb")
w.setparams(p)
w.writeframes(s)
w.close()
谢谢你们!
我写了一篇library to simplify this type of thing
你可以这样做:
正如您在问题的评论中看到的,有几种解决方案,有些更有效。
Jan Dvorak立即发现了这个问题(“*5部分正在剪裁和溢出”),直接的解决方案是:
在这种情况下,这个解决方案对我来说是完美的,只是足够好。
谢谢大家!
相关问题 更多 >
编程相关推荐