Форум сайта python.su
помогите пожалуйста.
не понимаю как делать сделал нарезку, но в отдельные файлы. а нужно склеить в один
задачка для реализации на питоне будет такая
Аргументы скрипта: Путь к входной директории, путь к директории с результатом
Задача скрипта: Нарезать все wav из входной директории в соответствии с информацией указанной в файле lab. Имена wav и lab файлов совпадают.
Описание:
Каждому файлу wav соответствует файл lab. В файле lab в текстовом виде записана информация о границах нарезки.
пример lab,
36000000 45400000 1
45400000 148200000 2
148200000 155100000 1
155100000 213000000 2
222500000 242800000 2
242800000 254200000 1
254200000 278500000 2
первое число это начало фрагмента, второе число это конец фрагмента, далее “текст” фрагмента.
Необходимо разрезать wav по границам фрагментов и потом склеить все фрагменты с текстом 1 в один файл и все фрагменты с текстом 2 в другой файл. Фрагменты из разных wav не перемешивать.
В результате для каждого исходного имя.wav должны появиться в директории с результатом два файла имя_SD_1.wav и имя_SD_2.wav
вот что я на данный момент реализовал:
import math import pyaudio import wave myfile = open(r"C:\Users\kulikov_aa\test.txt") i=0 for line in myfile.readlines(): wf = wave.open( r"C:\Users\kulikov_aa\test.wav", 'rb') i+=1; length=line.__len__();#the length by line one= line.find(' ') firstFragment=""; firstFragment=line[0:one]#first fragment two=firstFragment.__len__()#the lenght of fragment firstontwo=line[two+1:length];#one step for two fragment three=firstontwo.find(' '); twoFragment=firstontwo[0:three];#two fragment four=twoFragment.__len__() five=firstontwo[four:length]#three fragment if int(five)==1: WAVE_OUTPUT_FILENAME = r"C:\Users\kulikov_aa\testA"+str(i)+".wav" p = pyaudio.PyAudio() print firstFragment+" "+twoFragment; start = float(firstFragment)*(math.pow(10,-7)) end = float(twoFragment)*(math.pow(10,-7)) frameRate = wf.getframerate() nChannels = wf.getnchannels() sampWidth = wf.getsampwidth() wf.setpos(start*frameRate) data = wf.readframes(int((end-start)*frameRate)) wf3 = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wf3.setnchannels(nChannels) wf3.setsampwidth(sampWidth) wf3.setframerate(frameRate) wf3.writeframes(data) wf3.close() p.terminate()
Отредактировано fresh (Дек. 3, 2013 07:16:47)
Офлайн