Umwandeln von WAV-Dateien in 8KHz Files
Verfasst: Dienstag 30. Mai 2006, 18:52
Hallo,
manchmal braucht man das, z.B. für Internettelefonie. Das folgende Script wandelt einen Ordner mit 44k WAV-Dateien in 8k WAV-Dateien und speichert sie in einem neuen Ordner ab.
Muss noch optimiert werden. So sollte für eine Reduzierung des Aliasing bei 4Khz noch ein Low-Pass Filter vorgeschaltet werden.
Wird noch kommen. Das hier tuts aber auch schon ganz gut.
Gruss, Seven
Edit: Habe die optionalen Parameter weightA und weightB noch dazu genommen (1,1). Laut der Dokumentation Parameter für einen einfachen digitalen Filter (was für einer steht leider nicht dabei). Das Ergebnis ist aber schon deutlich besser, als ohne Filter (offenbar ein Low-Pass).
manchmal braucht man das, z.B. für Internettelefonie. Das folgende Script wandelt einen Ordner mit 44k WAV-Dateien in 8k WAV-Dateien und speichert sie in einem neuen Ordner ab.
Code: Alles auswählen
import audioop,struct,os
wavdir44 = 'Pfad Quell-Files 44k'
wavdir8 = 'Pfad Destination-Files 8k'
def DownSample(wave):
newrate = audioop.ratecv(wave[44:],2,1,44100,8000,None,1,1)[0] #Audiodaten beginnen ab Position 44. Bis 44 Header
newlength = len(newrate)
newheader = wave[:24] + struct.pack('l',8000)+ wave[28:40] + struct.pack('l',newlength) #Samplerate 24-28, size Audiodaten 40-44
result = newheader + newrate
return result
allewavs = os.listdir(wavdir44)
for name in allewavs:
if name[-4:] == '.WAV' or name[-4:] == '.wav':
sound1=open(wavdir44 + name, "rb").read()
sound2 = DownSample(sound1)
open(wavdir8 + name, "wb").write(sound2)
print wavdir8 + name #Kontrollausgabe
Wird noch kommen. Das hier tuts aber auch schon ganz gut.
Gruss, Seven
Edit: Habe die optionalen Parameter weightA und weightB noch dazu genommen (1,1). Laut der Dokumentation Parameter für einen einfachen digitalen Filter (was für einer steht leider nicht dabei). Das Ergebnis ist aber schon deutlich besser, als ohne Filter (offenbar ein Low-Pass).