ref: b49daf6cd100c92c728b3286d6579e5a479f9945
dir: /python/aubiocut/
#!/usr/bin/python """ this file was written by Paul Brossier it is released under the GNU/GPL license. """ from aubio.aubioclass import * import sys bufsize = 1024 hopsize = bufsize/2 def getonsets(filein,threshold): frameread = 0 filei = sndfile(filein) srate = filei.samplerate() channels = filei.channels() myvec = fvec(hopsize,channels) readsize = filei.read(hopsize,myvec) opick = onsetpick(bufsize,hopsize,channels,myvec,threshold) #newname = "%s%.8f%s" % ("/tmp/",0.0000000,filein[-4:]) #fileo = sndfile(newname,model=filei) mylist = list() ovalist = [0., 0., 0., 0., 0., 0.] while(readsize==hopsize): readsize = filei.read(hopsize,myvec) isonset,val = opick.do(myvec) ovalist.append(val) ovalist.pop(0) if (isonset == 1): print frameread i=len(ovalist)-1 # find local minima while ovalist[i-1] < ovalist[i] and i > 0: i -= 1 now = (frameread-i+1)*hopsize/(srate+0.) #del fileo #fileo = sndfile("%s%f%s" % ("/tmp/",now,filein[-4:]),model=filei) mylist.append(now) #writesize = fileo.write(readsize,myoldvec) frameread += 1 return mylist def cutfile(filein,onsets): frameread = 0 readsize = hopsize filei = sndfile(filein) srate = filei.samplerate() channels = filei.channels() newname = "%s%f%s" % ("/tmp/",0.0000000,filein[-4:]) fileo = sndfile(newname,model=filei) myvec = fvec(hopsize,channels) while(readsize==hopsize): readsize = filei.read(hopsize,myvec) now = (frameread)*hopsize/(srate+0.) writesize = fileo.write(readsize,myvec) if len(onsets) and now == onsets[0]: onsets.pop(0) del fileo fileo = sndfile("%s%f%s%s" % ("/tmp/",now,".",filein.split(".")[-1]),model=filei) frameread += 1 del fileo filename = sys.argv[1] threshold = sys.argv[2] onsets = getonsets(filename,threshold) cutfile(filename,onsets)