разделить WAV-файл в Python с разной продолжительностью начала и конца - PullRequest
0 голосов
/ 27 июня 2018

У меня есть много .wav аудиофайлов, которые я хочу разделить в соответствии с информацией о сегментах, доступной для соответствующих .wav файлов. Ниже приведен пример информации о сегментах для одного аудиофайла. Число внутри массива указывается в миллисекундах.

start_array = [1285, 19967, 30227, 41823]
duration_array = [14423, 7437, 10000, 6454]

Я написал код, который разделяет аудиофайл каждые десять секунд и сохраняет разделенный файл с тем же именем, что и исходный файл, с расширенным номером, указывающим номер чанка. например, "originalFileName_00" для первого чанка, "originalFileName_01" для второго чанка и т. д.

Ниже приведен код:

# read file from input dir and split them
for filename in os.listdir(inputdir):
    save_file_name = filename[:-4]
    myaudio = AudioSegment.from_file(inputdir+"/"+filename, "wav") 
    chunk_length_ms = 10000 # pydub calculates in millisec
    chunks = make_chunks(myaudio, chunk_length_ms) #Make chunks of ten sec
    # saving then to output dir.
    for i, chunk in enumerate(chunks):
        chunk_name = save_file_name+"_{0}.wav".format(i)
        #print(chunk_name)
        parts = chunk_name.split('_')  
        a = parts[-1].split('.')
        b = a[0]
        if(len(b) == 1):
            b = "0"+b
        chunk_name = parts[0]+"_"+parts[1]+"_"+b+".wav"
        #print(chunk_name)
        print "exporting", chunk_name
        chunk.export(outputdir+"/"+chunk_name, format="wav")

Теперь я хочу разделить звуковые дорожки в соответствии с доступной информацией о начале и конце сегмента (начало + продолжительность даст мне конец этого сегмента). Как я могу сделать это, используя функцию make_chunks? Или есть какая-нибудь другая функция, которую я могу использовать для этого?

1 Ответ

0 голосов
/ 27 июня 2018

из документов

Аудиосегменты можно разрезать за миллисекунды. например:

a = AudioSegment.from_mp3(mp3file) 
first_second = a[:1000] # get the first second of an mp3 
slice = a[5000:10000] # get a slice from 5 to 10 seconds of an mp3

примерно так должно работать:

for filename in os.listdir(inputdir):
    save_file_name = filename[:-4]
    myaudio = AudioSegment.from_file(inputdir+"/"+filename, "wav") 

    for i in range(len(start_array)):
        chunk_data = myaudio[start_array[i]:start_array[i]+duration_array[i]]
...