Python 如何将.wav文件拆分为多个.wav文件?
我有一个几分钟长的.wav文件,我想把它分成不同的10秒.wav文件 这是迄今为止我的python代码:Python 如何将.wav文件拆分为多个.wav文件?,python,audio,wave,Python,Audio,Wave,我有一个几分钟长的.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()
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)
导入波
输入数学
def main(文件名、时间):
read=wave.open(文件名'r')
#获取采样率
frameRate=read.getframerate()
#获取帧数
numFrames=read.getnframes()
#获取持续时间
持续时间=numFrames/帧速率
#以字节字符串的形式获取所有帧
frames=read.readframes(numFrames)
#以字节字符串形式获取1帧
oneFrame=read.readframes(1)
#帧速率*时间==numframesneeded
numFramesNeeded=帧速率*时间
#numFramesNeeded*oneFrame=numBytes
numBytes=numFramesNeeded*oneFrame
#拼接帧以获得一个列表字符串,每个字符串表示一个“时间”长度
#wav文件
x=0
wavList=[]
而x+time这是一个python代码片段,我根据需要使用它来分割文件。
我使用的是来自的pydub库。
您可以修改代码段以满足您的需求
from pydub import AudioSegment
t1 = t1 * 1000 #Works in milliseconds
t2 = t2 * 1000
newAudio = AudioSegment.from_wav("oldSong.wav")
newAudio = newAudio[t1:t2]
newAudio.export('newSong.wav', format="wav") #Exports to a wav file in the current path.
我已经编写了一个类来简化整个过程。
尽管它是用于wav
文件
这是:
用法
就这样!它将单个wav
文件拆分为多个wav
文件,每个文件持续时间1分钟。最后一次分割音频的持续时间可能少于1分钟;)
注意:如果您使用的是Mac/Linux,请将\\
更改为/
显然,pydub
的可能重复是完成此任务的直接方法。在我看来,您真正要求的是代码审查。如果您想知道如何在较低的层次上进行思考,为什么不直接阅读pydub
代码呢?e、 g.请参阅和操作。\u数据
操作概述。太棒了!谢谢你不客气@A.sobhdel
from pydub import AudioSegment
import math
class SplitWavAudioMubin():
def __init__(self, folder, filename):
self.folder = folder
self.filename = filename
self.filepath = folder + '\\' + filename
self.audio = AudioSegment.from_wav(self.filepath)
def get_duration(self):
return self.audio.duration_seconds
def single_split(self, from_min, to_min, split_filename):
t1 = from_min * 60 * 1000
t2 = to_min * 60 * 1000
split_audio = self.audio[t1:t2]
split_audio.export(self.folder + '\\' + split_filename, format="wav")
def multiple_split(self, min_per_split):
total_mins = math.ceil(self.get_duration() / 60)
for i in range(0, total_mins, min_per_split):
split_fn = str(i) + '_' + self.filename
self.single_split(i, i+min_per_split, split_fn)
print(str(i) + ' Done')
if i == total_mins - min_per_split:
print('All splited successfully')
folder = 'F:\\My Audios\\Khaled'
file = 'Khaled Speech.wav'
split_wav = SplitWavAudioMubin(folder, file)
split_wav.multiple_split(min_per_split=1)