2013-03-22 12 views
8

Ich versuche, eine WAV-Datei in Python programmgesteuert zu teilen. Basierend auf Hinweise von Stackoverflow sowie die Dokumentation aus dem Modul Python Welle Ich mache folgendespalten WAV-Datei in Python

import wave 

origAudio = wave.open('inputFile.wav','r') 
frameRate = origAudio.getframerate() 
nChannels = origAudio.getnchannels() 
sampWidth = origAudio.getsampwidth() 

start = float(someStartVal) 
end = float(someEndVal) 

origAudio.setpos(start*frameRate) 
chunkData = origAudio.readframes(int((end-start)*frameRate)) 

chunkAudio = wave.open('outputFile.wav','w') 
chunkAudio.setnchannels(nChannels) 
chunkAudio.setsampwidth(sampWidth) 
chunkAudio.setframerate(frameRate) 
chunkAudio.writeframes(chunkData) 
chunkAudio.close() 

ich durch eine Reihe von verschiedenen Anfangs- und Endwerte laufen, und Extrakt Stücke von Audio von der Originaldatei diese Art und Weise. Was komisch ist, ist, dass die Technik für einige Brocken perfekt funktioniert und für andere ein weißes Rauschen erzeugt. Es gibt auch kein offensichtliches Muster, bei dem Anfangs- und Endpositionen weißes Rauschen erzeugen, sondern nur, dass es konsistent für eine Eingabedatei auftritt.

Wer hat diese Art von Verhalten schon einmal erlebt? Oder weißt du, was ich falsch mache? Vorschläge für bessere Möglichkeiten, eine Audiodatei programmgesteuert aufzuteilen, sind willkommen.

Vielen Dank im Voraus.

+1

Dies kann mit 'start * frameRate' zu ​​tun haben, die ein Float beim Aufruf von' setpos' ist. Vielleicht sollten Sie nach 'readframes'' tell' verwenden, um stattdessen den aktuellen Speicherort des Dateizeigers zu finden ... – unutbu

+0

arrgh! dumm von mir ... danke. das reparierte es :) – user13321

+0

Wenn ich anstelle von setpos sage, kann ich den Fehler erhalten: tell() braucht 1 Positionsargument, aber 2 wurden gegeben –

Antwort

5

Dies kann damit zu tun haben, start*frameRate ist ein Float beim Aufruf setpos. Vielleicht sollten Sie nach readframestell verwenden, um stattdessen den aktuellen Speicherort des Dateizeigers zu finden.