ref: 1e37adec4dc504c99185e178b4a16934e53b6c55
dir: /python/aubio/task/cut.py/
from task import task
from aubio.aubioclass import *
class taskcut(task):
def __init__(self,input,slicetimes,params=None,output=None):
""" open the input file and initialize arguments
parameters should be set *before* calling this method.
"""
from os.path import basename,splitext
task.__init__(self,input,output=None,params=params)
self.soundoutbase, self.soundoutext = splitext(basename(self.input))
self.newname = "%s%s%09.5f%s%s" % (self.soundoutbase,".",
self.frameread*self.params.step,".",self.soundoutext)
self.fileo = sndfile(self.newname,model=self.filei)
self.myvec = fvec(self.params.hopsize,self.channels)
self.mycopy = fvec(self.params.hopsize,self.channels)
self.slicetimes = slicetimes
def __call__(self):
task.__call__(self)
# write to current file
if len(self.slicetimes) and self.frameread >= self.slicetimes[0][0]:
self.slicetimes.pop(0)
# write up to 1st zero crossing
zerocross = 0
while ( abs( self.myvec.get(zerocross,0) ) > self.params.zerothres ):
zerocross += 1
writesize = self.fileo.write(zerocross,self.myvec)
fromcross = 0
while (zerocross < self.readsize):
for i in range(self.channels):
self.mycopy.set(self.myvec.get(zerocross,i),fromcross,i)
fromcross += 1
zerocross += 1
del self.fileo
self.fileo = sndfile("%s%s%09.5f%s%s" % (self.soundoutbase,".",
self.frameread*self.params.step,".",self.soundoutext),model=self.filei)
writesize = self.fileo.write(fromcross,self.mycopy)
else:
writesize = self.fileo.write(self.readsize,self.myvec)