更改蟒蛇WAV文件的音量(Change the volume of a wav file in py

2019-07-03 18:17发布

我有一个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()

感谢你们!

Answer 1:

我写了一个库来简化这种类型的东西

你能做到这一点,如下所示:

from pydub import AudioSegment

song = AudioSegment.from_wav("never_gonna_give_you_up.wav")

# reduce volume by 10 dB
song_10_db_quieter = song - 10

# but let's make him *very* quiet
song = song - 36

# save the output
song.export("quieter.wav", "wav")


Answer 2:

正如你在问题的意见看,有几种解决方案,一些更有效率。

立即由Jan德沃夏克(下称“* 5部分被限幅和溢出”)和直接的解决方案检测到的问题是:

s = numpy.fromstring(s, numpy.int16) / 10 * 5

在这种情况下,这种解决方案很适合我,只是不够好。

谢谢所有乡亲!



文章来源: Change the volume of a wav file in python