【发布时间】:2016-10-26 05:34:33
【问题描述】:
我有一个几分钟长的 .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 文件。
编辑:这是How to splice an audio file (wav format) into 1 sec splices in python? 的重复问题
但是,如果有人有不需要pydub 的答案,我非常希望看到它。
【问题讨论】:
-
pydub显然是完成这项任务的直接方法。在我看来,您真正要求的是代码审查。如果您询问如何在较低级别进行思考,为什么不直接阅读pydub代码?例如参见get_sample_slice和._data操作的一般操作。