2013-03-22 16 views
8

Sto provando a dividere un file wav a livello di codice in Python. Sulla base di suggerimenti da StackOverflow, nonché la documentazione dal modulo onda Python che sto facendo le seguentisplitting file wav 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() 

ho scorrere un certo numero di diversi valori di inizio e fine, ed estratto di pezzi di audio dal file originale in in questo modo La cosa strana è che la tecnica funziona perfettamente bene per alcuni blocchi, e produce rumore bianco spazzatura per gli altri. Inoltre non esiste un modello ovvio di quali posizioni iniziali e finali producano rumore bianco, solo che ciò avviene in modo coerente per un file di input.

Qualcuno ha già provato questo tipo di comportamento? O sai cosa sto sbagliando? Sono graditi suggerimenti su modi migliori per suddividere un file audio a livello di programmazione.

Grazie in anticipo.

+1

Questo potrebbe avere a che fare con 'start * frameRate' come float quando si chiama' setpos'. Forse dopo 'readframes' dovresti usare' tell' per trovare la posizione corrente del puntatore del file invece ... – unutbu

+0

arrgh! stupido da parte mia ... grazie che lo ha risolto :) – user13321

+0

quando uso tell al posto di setpos, posso ottenere l'errore: tell() accetta 1 argomento posizionale ma 2 sono stati dati –

risposta

5

Questo potrebbe dover fare con start*frameRate essere un float quando si chiama setpos. Forse dopo readframes si dovrebbe usare tell per trovare invece la posizione corrente del puntatore del file.