Mam 2-sekundowy 16-bitowy, jednokanałowy plik wav 8khz i muszę zmienić jego głośność.Zmiana głośności pliku wav w pythoniu
Powinno być całkiem proste, ponieważ zmiana głośności jest taka sama, jak zmiana amplitudy sygnału, a ja po prostu muszę ją tłumić, to znaczy mnożyć ją dla liczby między 0 a 1. Ale nie robi tego ". t praca: nowy dźwięk jest niższy, ale BARDZO pełen hałasu. Co ja robię źle?
Oto mój kod:
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()
Dziękuję chłopaki!
Dlaczego używasz '* 5/10' zamiast'/2'? –
Gdybym musiał zgadnąć, powiedziałbym, że część '* 5' jest wycinana i przepełniana. –
Czy czytasz plik w poprawnej endianness? [Pliki WAV są mało-endianowe.] (Http://web.archive.org/web/19991115123323/http://www.borg.com/~jglatt/tech/wave.htm) Użycie innego endianu zmniejszy o połowę próbka i dodaj DUŻO hałasu. –