web-dev-qa-db-ja.com

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

これがフレームのリストであることを知っています。このリストの要素ごとに1つのwavファイルを作成するにはどうすればよいですか(最初の.wavファイルは'\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00'? Pythonのwaveモジュールは、フレームを使用して.wavファイルを作成することについて明確ではありません。

編集:これは Pythonの1秒スプライスにオーディオファイル(wav形式)をスプライスする方法の重複した質問ですか? ただし、誰かが答えを持っている場合pydubは必要ありません。ぜひご覧になってください。

13
jdsto

これはpython必要に応じてファイルの分割に使用するコードスニペットです。
私は https://github.com/jiaaro/pydub の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.
12
siddhantsomani