Подтвердить что ты не робот

Python, как разбить WAV файл на несколько WAV файлов

У меня есть .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\x00\x00\x00\x00\x00\x00\x00\x00' ]

Я знаю, что это список фреймов. Как сделать один wav файл для каждого элемента в этом списке (первый .wav файл будет '\ x00\x00\x00\x00\xff\xff\x00\x00\x00\x00')? Python wave неясно, как использовать фреймы для создания WAV файлов.

EDIT: Это дублированный вопрос Как объединить аудиофайл (wav-формат) в 1 sec-сращивания в python? Однако, если у кого-то есть ответ, который не требует pydub, я бы очень хотел его увидеть.

4b9b3361

Ответ 1

Это фрагмент кода Python, который я использую для разделения файлов по мере необходимости.
Я использую библиотеку pydub из https://github.com/jiaaro/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.