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

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

РЕДАКТИРОВАТЬ: Это дублирующий вопросКак разделить аудиофайл (формат WAV) на 1-секундные соединения в Python? Однако, если у кого-то есть ответ, который не требуетpydub Я бы очень хотел это увидеть.

 Nikana Reklawyks06 сент. 2018 г., 23:03
pydub Очевидно, это простой способ сделать эту задачу. Мне кажется, что вы действительно просите о проверке кода. Если вы спрашиваете о том, как мыслить на более низком уровне, почему бы просто не прочитатьpydub код? например увидетьget_sample_slice и манипуляции._data манипуляции в общем.

Ответы на вопрос(1)

Решение Вопроса

который я использую для разделения файлов по мере необходимости.
Я использую библиотеку 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.

Ваш ответ на вопрос