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)