在Python中分割wav文件

9 投票
1 回答
5731 浏览
提问于 2025-04-17 20:01

我正在尝试用Python程序来分割一个wav音频文件。根据StackOverflow上的一些提示和Python wave模块的文档,我做了以下操作:

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 个回答

6

这可能和调用 start*frameRate 时,它是一个浮点数(小数)有关。也许在调用 readframes 之后,你应该使用 tell 来找出文件指针当前的位置,而不是直接用 setpos

撰写回答