2016-06-23 24 views
3

Ich habe eine WAV-Datei mehrere Minuten lang, die ich in verschiedene 10 Sekunden. WAV-Dateien aufgeteilt werden möchte.Python, Wie man eine WAV-Datei in mehrere WAV-Dateien aufteilen

Das ist mein Python-Code so weit:

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" ergibt:

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

I weiß, dass dies eine Liste von Frames ist. Wie erstelle ich eine WAV-Datei für jedes Element in dieser Liste (die erste WAV-Datei wäre '\ x00 \ x00 \ x00 \ x00 \ xff \ xff \ x00 \ x00 \ x00 \ x00')? Pythons wave Modul ist unklar über die Verwendung von Frames zum Erstellen von. Wav-Dateien.

EDIT: Dies ist eine doppelte Frage How to splice an audio file (wav format) into 1 sec splices in python? Allerdings, wenn jemand eine Antwort hat, die nicht pydub benötigt würde ich sehr viel, um es sehen mag.

Antwort

3

Dies ist ein Python-Code-Snippet, das ich zum Teilen von Dateien nach Bedarf verwende.
Ich benutze die Pydub-Bibliothek von https://github.com/jiaaro/pydub. Sie können das Snippet an Ihre Anforderungen anpassen.

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.