Alterar o volume de um arquivo wav em python

Eu tenho um arquivo wav 8khz de canal único de 2 segundos 16bit e preciso alterar seu volume.

Deve ser bastante simples, porque mudar o volume é o mesmo que mudar a amplitude do sinal, e eu só preciso atenuá-lo, ou seja, multiplicá-lo por um número entre 0 e 1. Mas não funciona: o novo som é menor, mas muito cheio de ruído. O que estou fazendo de errado?

Aqui está o meu código:

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()

Obrigado pessoal!

questionAnswers(2)

yourAnswerToTheQuestion