shithub: aubio

ref: b1aab3ab24ee0280d560f118a473a168188fe815
dir: /python/aubiofilter-notes/

View raw version
#!/usr/bin/python

"""  this file is used to get filter the (old) output format of aubionotes """

# default parameters 
__eps       = [0.250,0.50]      # minimum length, pitch tolerance (ms,midipitch)
__plot      = 0                 # -P (command line switch)
__delay     = 0.0               # -D <value> (fixed delay for score alignement)
__winlength = 10                # -w <value> (window length for pitch estimation in frames)

import getopt
import sys

def parse_args (sysargs):
        from getopt import gnu_getopt
        shortopts ='i:o:t:p:w:D:P:'
        longopts =('input=','output=','tolpitch=','toltime=','winlength=','delay','plot=')
        args,tmp = gnu_getopt(sysargs,shortopts,longopts)
        assert len(args) > 1
        plot      = __plot
        delay     = __delay
        eps       = __eps
        winlength = __winlength
        plot = __plot
        fileout   = '/tmp/testprint.ps'
        args.sort()
        for i in range(len(args)):  # a bad way
                if args[i][0] == '-i' or args[i][0] == '--input':
                        fileorg =  args[i][1]
                if args[i][0] == '-o' or args[i][0] == '--output':
                        fileerr =  args[i][1]
                if args[i][0] == '-t' or args[i][0] == '--toltime':
                        eps[0] = float(args[i][1])
                if args[i][0] == '-p' or args[i][0] == '--tolpitch':
                        eps[1] = float(args[i][1])
                if args[i][0] == '-D' or args[i][0] == '--delay':
                        delay = float(args[i][1])
                if args[i][0] == '-w' or args[i][0] == '--winlength':
                        winlength = int(args[i][1])
                if args[i][0] == '-P' or args[i][0] == '--plot':
                        plot = 1
                        fileout = args[i][1]
        return fileorg,fileerr,eps,winlength,plot,delay,fileout

def usage():
        print __file__, "with at least some arguments"

def main(): 
        try:
                opts,args = getopt.getopt(sys.argv[1:], 
                        "hvo:i:p:P", 
                        ["help", "output=", "verbose", "input=", "plot="])
        except getopt.GetoptError:
                usage()
                sys.exit(2)

        input = None
        output = None
        verbose = False
        winlength = __winlength
        plot = __plot
        eps = __eps

        for o, a in opts:
                if o in ("-v", "--verbose"):
                        verbose = True
                if o in ("-h", "--help"):
                        usage()
                        sys.exit(2)
                if o in ("--output"):
                        output = a
                if o in ("-i", "--input"):
                        input = a
                if o in ("-P", "--plot"):
                        plot = 1

        assert input != None and input != "", "no input file" 

        from aubio import notefilter,txtfile,gnuplot
        """ load midi and raw data """
        from numarray import array
        notelist = array(txtfile.read_datafile(input))
        """ filter it out """
        notelist_filtered = notefilter.segraw_onsets4(notelist,winlength,eps)
        if verbose == 1 : 
                for a,b in notelist_filtered:
                        print a,b
        """ plot results """
        if plot == 1  : 
                gnuplot.plotnote(notelist_filtered,title=input,fileout=output)
        
if __name__ == "__main__":
        main()