web-dev-qa-db-fra.com

Comment diviser un fichier .wav en plusieurs fichiers .wav?

J'ai un fichier .wav de plusieurs minutes que je voudrais diviser en différents fichiers .wav de 10 secondes.

Voici mon code python pour l'instant:

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)

L'impression wavList donne:

['\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']

Je sais que c'est une liste d'images. Comment créer un fichier wav pour chaque élément de cette liste (le premier fichier .wav serait '\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00'? Le module wave de Python n'est pas clair sur l'utilisation des cadres pour créer des fichiers .wav.

EDIT: Ceci est une question en double de Comment épisser un fichier audio (format wav) en épissures de 1 sec en python? Cependant, si quelqu'un a une réponse qui ne nécessite pas pydub I aimerait beaucoup le voir.

13
jdsto

Il s'agit d'un extrait de code python que j'utilise pour fractionner des fichiers selon les besoins.
J'utilise la bibliothèque pydub de https://github.com/jiaaro/pydub . Vous pouvez modifier l'extrait de code en fonction de vos besoins.

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.
12
siddhantsomani