我有一个几分钟长的.wav文件,我想将其分割成不同的10秒.wav文件。
以下是我目前的Python代码:
import wave
import math
def main(filename, time):
read = wave.open(filename, 'r')
#get sample rate
frameRate = read.getframerate()
#get number of frames
numFrames = read.getnframes()
#get duration
duration = numFrames/frameRate
#get all frames as a string of bytes
frames = read.readframes(numFrames)
#get 1 frame as a string of bytes
oneFrame = read.readframes(1)
#framerate*time == numframesneeded
numFramesNeeded=frameRate*time
#numFramesNeeded*oneFrame=numBytes
numBytes = numFramesNeeded*oneFrame
#splice frames to get a list strings each representing a 'time' length
#wav file
x=0
wavList=[]
while x+time<=duration:
curFrame= frames[x:x+time]
x=x+time
wavList.append(curFrame)
打印wavList
得到:
['\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']
我知道这是一个帧列表。如何为列表中的每个元素创建一个.wav文件(第一个.wav文件将是'\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00'
)?Python的wave
模块使用帧来创建.wav文件不太清楚。
编辑:这是如何在python中将音频文件(wav格式)拼接成1秒片段的重复问题?如果有人有不需要pydub
的答案,我非常希望看到它。
pydub
显然是完成此任务的简单方法。我认为你真正想要的是代码审查。如果你询问如何在更低的级别上执行此操作,为什么不直接阅读pydub
代码呢?例如,请参见get_sample_slice
和一般的._data
操作。 - Nikana Reklawyks