2013-03-22 65 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来查找文件指针的当前位置。