shithub: aubio

ref: 647a2d8fccb93066611966f77048ddec9306d1b7
dir: /python/aubionotes/

View raw version
#!/usr/bin/python

def do(filein,threshold):

    import aubio.aubioclass
    import aubio.median
    #from numarray import around
    from math import floor
    hopsize   = 512
    bufsize   = 4096
    channels  = 1
    frameread = 0
    silthres  = -80.
    filei     = aubio.aubioclass.sndfile(filein)
    srate     = filei.samplerate()
    myvec     = aubio.aubioclass.fvec(hopsize,channels)
    readsize  = filei.read(hopsize,myvec)
    ppick     = aubio.aubioclass.pitchpick(bufsize,hopsize,channels,myvec,srate)
    opick     = aubio.aubioclass.onsetpick(bufsize,hopsize,channels,myvec,threshold)
    mylist    = list()

    wassilence = 0
    lastpitch = 0
    starttime = 0
    while(readsize==hopsize):
        readsize = filei.read(hopsize,myvec)
        val = ppick.do(myvec)
        midival = aubio.aubioclass.bintomidi(val,srate,bufsize) 
        isonset,onset = opick.do(myvec) 
        now = (frameread)*hopsize/(srate+0.)
        issilence = aubio.aubioclass.aubio_silence_detection(myvec.vec,silthres)
        
        estmidival = 0
        if (issilence == 1):
            if (wassilence == 0):
                #outputnow
                endtime = (frameread-3)*hopsize/(srate+0.)
                if len(mylist) > 5 :
                    estmidival = aubio.median.percental(mylist,len(mylist)/2)
                    print "sil", starttime, endtime, estmidival
                #resetnow
                mylist = list()
            else:
                wassilence = 1
        else:
            if isonset == 1:
                if (wassilence == 0):
                    #outputnow
                    endtime = (frameread-3)*hopsize/(srate+0.)
                    #estmidival = aubio.median.percental(around(array(mylist)),len(mylist)//2)
                    if len(mylist) > 5 :
                        estmidival = aubio.median.percental(mylist,len(mylist)/2)
                        print starttime, endtime, estmidival
                #resetnow
                mylist = list()
                #store start time
                starttime = (frameread-3)*hopsize/(srate+0.)
            else:
                """
                if(listfull):
                    #outputnow
                    endtime = (frameread-3)*hopsize/(srate+0.)
                    print starttime, endtime, estimmidival
                else:
                """
                #bufferize
                if midival > 50 and midival < 75:
                    mylist.append(floor(midival))
            wassilence = 0
                    
            
        #elif( midival > 45 ):
        #    mylist.append(( now , midival+12 ))
        #mylist.append(toappend)
        frameread += 1


if __name__ == "__main__":
    import sys
    do(sys.argv[1],sys.argv[2])