2013-03-22 64 views
8

我想在Python中以編程方式拆分wav文件。基於從計算器以及從Python波組件文件的提示,我從原始文件做音頻以下拆分python中的wav文件

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

我通過一些不同的起始點和終止點的迭代,並提取塊這種方式。奇怪的是,這種技術對於某些塊很好地工作,併爲其他塊產生垃圾白噪聲。此外,沒有明顯的開始和結束位置產生白噪聲的模式,只是它始終發生在輸入文件中。

任何人都曾經歷過這種行爲?或者知道我在做什麼錯了?歡迎以編程方式更好地分割音頻文件的建議。

在此先感謝。

+1

這可能與'start * frameRate'在調用'setpos'時是一個浮點數有關。也許在'readframes'之後,你應該使用'tell'來找到文件指針的當前位置,而不是... – unutbu 2013-03-22 22:37:25

+0

arrgh!愚蠢的我......謝謝。固定它:) – user13321 2013-03-22 23:10:29

+0

當我使用tell來代替setpos時,我可以得到這個錯誤:tell()需要1個位置參數,但是2個被給出 – 2017-01-14 11:01:14

回答

5

撥打setpos時,這可能與start*frameRate是浮動有關。也許在readframes之後,您應該使用tell來查找文件指針的當前位置。