shithub: aubio

ref: a4b089c6106093aadfc27d0e8a68761305e83838
dir: /python/aubiocut/

View raw version
#!/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 cutfile(filein,onsets):
        frameread = 0
        zerothres = 0.002
        readsize  = hopsize 
        filei     = sndfile(filein)
        framestep = hopsize/(filei.samplerate()+0.)
        channels  = filei.channels()
        newname   = "%s%f%s" % ("/tmp/",0.0000000,filein[-4:])
        fileo     = sndfile(newname,model=filei)
        myvec     = fvec(hopsize,channels)
        mycopy    = fvec(hopsize,channels)
        while(readsize==hopsize):
                readsize = filei.read(hopsize,myvec)
		# write to current file
                if len(onsets) and frameread >= onsets[0]:
                    onsets.pop(0)
		    # write up to 1st zero crossing
		    zerocross = 0
		    while ( abs( myvec.get(zerocross,0) ) > zerothres ):
		    	zerocross += 1
                    writesize = fileo.write(zerocross,myvec)
		    fromcross = 0
		    while (zerocross < readsize):
		    	for i in range(channels):
			    	mycopy.set(myvec.get(zerocross,i),fromcross,i)
			fromcross += 1
			zerocross += 1
                    del fileo
                    fileo = sndfile("%s%s%f%s%s" % 
		    	(filein.split(".")[0].split("/")[-1],".",
			frameread*framestep,".",filein.split(".")[-1]),model=filei)
		    writesize = fileo.write(fromcross,mycopy)
		else:
		    writesize = fileo.write(readsize,myvec)
                frameread += 1
        del fileo

filename  = sys.argv[1]
threshold = sys.argv[2]
onsets    = getonsets(filename,threshold)
cutfile(filename,onsets)