sys.exit(1)
-def getonsets(filein,threshold=0.2,silence=-70.,bufsize=1024,hopsize=512,
- mode='dual',localmin=False,storefunc=False,derivate=False):
- frameread = 0
- filei = sndfile(filein)
- channels = filei.channels()
- myvec = fvec(hopsize,channels)
- readsize = filei.read(hopsize,myvec)
- opick = onsetpick(bufsize,hopsize,channels,myvec,threshold,
- mode=mode,derivate=derivate)
- mylist = list()
- if localmin:
- ovalist = [0., 0., 0., 0., 0.]
- ofunclist = []
- while(readsize):
- readsize = filei.read(hopsize,myvec)
- isonset,val = opick.do(myvec)
- if (aubio_silence_detection(myvec(),silence)):
- isonset=0
- if localmin:
- if val > 0: ovalist.append(val)
- else: ovalist.append(0)
- ovalist.pop(0)
- if storefunc:
- ofunclist.append(val)
- if (isonset == 1):
- if localmin:
- i=len(ovalist)-1
- # find local minima before peak
- while ovalist[i-1] < ovalist[i] and i > 0:
- i -= 1
- now = (frameread+1-i)
- else:
- now = frameread
- if now > 0 :
- mylist.append(now)
- else:
- now = 0
- mylist.append(now)
- frameread += 1
- return mylist, ofunclist
-
-def cutfile(filein,slicetimes,zerothres=0.008,bufsize=1024,hopsize=512):
- frameread = 0
- readsize = hopsize
- filei = sndfile(filein)
- framestep = hopsize/(filei.samplerate()+0.)
- channels = filei.channels()
- newname = "%s%s%09.5f%s%s" % (filein.split(".")[0].split("/")[-1],".",
- frameread*framestep,".",filein.split(".")[-1])
- 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(slicetimes) and frameread >= slicetimes[0]:
- slicetimes.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%09.5f%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
-
-
-def getsilences(filein,hopsize=512,silence=-70):
- frameread = 0
- filei = sndfile(filein)
- srate = filei.samplerate()
- channels = filei.channels()
- myvec = fvec(hopsize,channels)
- readsize = filei.read(hopsize,myvec)
- mylist = []
- wassilence = 0
- while(readsize==hopsize):
- readsize = filei.read(hopsize,myvec)
- if (aubio_silence_detection(myvec(),silence)==1):
- if wassilence == 0:
- mylist.append(frameread)
- wassilence == 1
- else: wassilence = 0
- frameread += 1
- return mylist
-
-
-def getpitch(filein,mode=aubio_pitch_mcomb,bufsize=1024,hopsize=512,omode=aubio_pitchm_freq,
- samplerate=44100.,silence=-70):
- frameread = 0
- filei = sndfile(filein)
- srate = filei.samplerate()
- channels = filei.channels()
- myvec = fvec(hopsize,channels)
- readsize = filei.read(hopsize,myvec)
- pitchdet = pitchdetection(mode=mode,bufsize=bufsize,hopsize=hopsize,
- channels=channels,samplerate=srate,omode=omode)
- mylist = []
- while(readsize==hopsize):
- readsize = filei.read(hopsize,myvec)
- freq = pitchdet(myvec)
- #print "%.3f %.2f" % (now,freq)
- if (aubio_silence_detection(myvec(),silence)!=1):
- mylist.append(freq)
- else:
- mylist.append(-1.)
- frameread += 1
- return mylist
+#def getonsets(filein,threshold=0.2,silence=-70.,bufsize=1024,hopsize=512,
+# mode='dual',localmin=False,storefunc=False,derivate=False):
+# frameread = 0
+# filei = sndfile(filein)
+# channels = filei.channels()
+# myvec = fvec(hopsize,channels)
+# readsize = filei.read(hopsize,myvec)
+# opick = onsetpick(bufsize,hopsize,channels,myvec,threshold,
+# mode=mode,derivate=derivate)
+# mylist = list()
+# if localmin:
+# ovalist = [0., 0., 0., 0., 0.]
+# ofunclist = []
+# while(readsize):
+# readsize = filei.read(hopsize,myvec)
+# isonset,val = opick.do(myvec)
+# if (aubio_silence_detection(myvec(),silence)):
+# isonset=0
+# if localmin:
+# if val > 0: ovalist.append(val)
+# else: ovalist.append(0)
+# ovalist.pop(0)
+# if storefunc:
+# ofunclist.append(val)
+# if (isonset == 1):
+# if localmin:
+# i=len(ovalist)-1
+# # find local minima before peak
+# while ovalist[i-1] < ovalist[i] and i > 0:
+# i -= 1
+# now = (frameread+1-i)
+# else:
+# now = frameread
+# if now > 0 :
+# mylist.append(now)
+# else:
+# now = 0
+# mylist.append(now)
+# frameread += 1
+# return mylist, ofunclist
+#
+#def cutfile(filein,slicetimes,zerothres=0.008,bufsize=1024,hopsize=512):
+# frameread = 0
+# readsize = hopsize
+# filei = sndfile(filein)
+# framestep = hopsize/(filei.samplerate()+0.)
+# channels = filei.channels()
+# newname = "%s%s%09.5f%s%s" % (filein.split(".")[0].split("/")[-1],".",
+# frameread*framestep,".",filein.split(".")[-1])
+# 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(slicetimes) and frameread >= slicetimes[0]:
+# slicetimes.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%09.5f%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
+#
+#
+#def getsilences(filein,hopsize=512,silence=-70):
+# frameread = 0
+# filei = sndfile(filein)
+# srate = filei.samplerate()
+# channels = filei.channels()
+# myvec = fvec(hopsize,channels)
+# readsize = filei.read(hopsize,myvec)
+# mylist = []
+# wassilence = 0
+# while(readsize==hopsize):
+# readsize = filei.read(hopsize,myvec)
+# if (aubio_silence_detection(myvec(),silence)==1):
+# if wassilence == 0:
+# mylist.append(frameread)
+# wassilence == 1
+# else: wassilence = 0
+# frameread += 1
+# return mylist
+#
+#
+#def getpitch(filein,mode=aubio_pitch_mcomb,bufsize=1024,hopsize=512,omode=aubio_pitchm_freq,
+# samplerate=44100.,silence=-70):
+# frameread = 0
+# filei = sndfile(filein)
+# srate = filei.samplerate()
+# channels = filei.channels()
+# myvec = fvec(hopsize,channels)
+# readsize = filei.read(hopsize,myvec)
+# pitchdet = pitchdetection(mode=mode,bufsize=bufsize,hopsize=hopsize,
+# channels=channels,samplerate=srate,omode=omode)
+# mylist = []
+# while(readsize==hopsize):
+# readsize = filei.read(hopsize,myvec)
+# freq = pitchdet(myvec)
+# #print "%.3f %.2f" % (now,freq)
+# if (aubio_silence_detection(myvec(),silence)!=1):
+# mylist.append(freq)
+# else:
+# mylist.append(-1.)
+# frameread += 1
+# return mylist
class taskparams(object):
""" open the input file and initialize default argument
parameters should be set *before* calling this method.
"""
+ import time
+ self.tic = time.time()
if params == None: self.params = taskparams()
else: self.params = params
self.frameread = 0
self.step = float(self.srate)/float(self.params.hopsize)
self.myvec = fvec(self.params.hopsize,self.channels)
self.output = output
+
def __call__(self):
self.readsize = self.filei.read(self.params.hopsize,self.myvec)
self.frameread += 1
""" Plot data """
pass
+ def time(self):
+ import time
+ print "CPU time is now %f seconds," % time.clock(),
+ print "task execution took %f seconds" % (time.time() - self.tic)
+
class tasksilence(task):
wassilence = 1
issilence = 1
meddist = self.truth - med
return avgdist, meddist
- def plot(self):
+ def plot(self,pitch,outplot=None):
from aubio.gnuplot import plot_pitch
plot_pitch(self.input,
pitch,
- samplerate=samplerate,
+ samplerate=float(self.srate),
hopsize=self.params.hopsize,
- outplot=options.outplot)
+ outplot=outplot)
class taskonset(task):
parser.add_option("-i","--input",
action="store", dest="filename",
help="input sound file")
- parser.add_option("-m","--mode", action="callback",
- callback=check_pitch_mode, dest="mode",
- default=[aubio_pitch_mcomb],
+ parser.add_option("-m","--mode",
+ action="store", dest="mode", default='mcomb',
help="pitch detection mode [default=mcomb] \
mcomb|yin|fcomb|schmitt")
parser.add_option("-u","--units", action="callback",
#print options.bufsize, options.hopsize
filename = options.filename
-samplerate = float(sndfile(filename).samplerate())
-hopsize = int(options.hopsize)
-bufsize = int(options.bufsize)
-step = float(samplerate)/float(hopsize)
-threshold = float(options.threshold)
-silence = float(options.silence)
-mode = options.mode
+params = taskparams()
+#params.samplerate = float(sndfile(filename).samplerate())
+params.hopsize = int(options.hopsize)
+params.bufsize = int(options.bufsize)
+#params.step = float(samplerate)/float(hopsize)
+params.threshold = float(options.threshold)
+params.silence = float(options.silence)
#mintol = float(options.mintol)*step
# default take back system delay
if options.delay: delay = float(options.delay)
-else: delay = 2./step
+else: delay = 2./params.step
if options.note:
exit("not implemented yet")
-else:
- pitch = []
- for i in range(len(mode)):
- pitch.append(getpitch(filename, #threshold,
- mode=mode[i],
- omode=options.omode,
- bufsize=bufsize,hopsize=hopsize,
- silence=silence))
- for j in range(len(pitch[i])):
- if pitch[i][j] > 1500 or pitch[i][j] < 40:
- pitch[i][j] = 0.;
-## take back system delay
-#if delay != 0:
-# for i in range(len(onsets)):
-# onsets[i] -= delay*step
-#
-## prune doubled
-#if mintol > 0:
-# last = -2*mintol
-# newonsets = []
-# for new in onsets:
-# if (new - last > mintol):
-# newonsets.append(new)
-# last = new
-# onsets = newonsets
-# print times in second
-if options.verbose:
- for j in range(len(pitch[0])):
- print "%f\t" % (j/step),
- for i in range(len(pitch)):
- print "%f\t" % pitch[i][j],
- print
+pitch = []
+modes = options.mode.split(',')
+for i in range(len(modes)):
+ params.pitchmode = modes[i]
+ dotask = taskpitch
+ #pitch.append(getpitch(filename, #threshold,
+ # mode=mode[i],
+ # omode=options.omode,
+ # bufsize=bufsize,hopsize=hopsize,
+ # silence=silence))
+ filetask = dotask(filename,params=params)
+ pitch.append(filetask.compute_all())
+ for j in range(len(pitch[i])):
+ if pitch[i][j] > 10000 or pitch[i][j] < 40:
+ pitch[i][j] = 0.;
-if options.plot:
- from aubio.gnuplot import plot_pitch
- plot_pitch(filename, pitch,
- samplerate=samplerate, hopsize=hopsize, outplot=options.outplot)
+ if options.verbose:
+ for j in range(len(pitch[i])):
+ print "%f\t" % (j/params.step),
+ print "%f\t" % pitch[i][j],
+ print
+
+ if options.plot:
+ filetask.plot(pitch,outplot=options.outplot)