2016-06-23 3 views
3

У меня есть .wav-файл на несколько минут, что я хотел бы разбить на разные 10-секундные .wav-файлы.Python, как разбить WAV-файл на несколько .wav-файлов

Это мой питон код до сих пор:

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, x86, x00, x00, \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 ']

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

EDIT: Это дублирует вопрос How to splice an audio file (wav format) into 1 sec splices in python? Однако, если кто-то есть ответ, который не требует pydub я бы очень хотел, чтобы увидеть его.

ответ

3

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