Python 如何将.wav文件拆分为多个.wav文件?

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()

我有一个几分钟长的.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)
导入波
输入数学
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)