Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
392 views
in Technique[技术] by (71.8m points)

python - How to split a .wav file into multiple .wav files?

I have a .wav file several minutes long that I would like to split into different 10 second .wav files.

This is my python code so far:

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)

Printing wavList yields:

['x00x00x00x00xffxffx00x00x00x00', 'x00x00x00x00x00x00x00x00x00x00', 'x00x00x00x00x00x00x00x00x00x00', 'x00x00x00x00x00x00x00x00x00x00', 'x00x00x00x00x00x00x00x00x00x00']

I know that this is a list of frames. How do I make one wav file for each element in this list (the first .wav file would be 'x00x00x00x00xffxffx00x00x00x00'? Python's wave module is unclear about using frames to create .wav files.

EDIT: This is a duplicate question of How to splice an audio file (wav format) into 1 sec splices in python? However, if someone has an answer that does not require pydub I would very much like to see it.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is a python code snippet that I use for splitting files as per necessity.
I use the pydub library from https://github.com/jiaaro/pydub. You can modify the snippet to suit your requirement.

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.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...