Ejemplo n.º 1
0
def flatmidi(r):
    #(control,program, lasttime, event)
    def transform_context(c,e):
        if (e.type=='ControlChangeEvent'):
            c[0][e.track]=(e.value,c[0][e.track][1])
            c=(c[0],None)
        elif (e.type=='ProgramChangeEvent'):
            c[0][e.track]=(c[0][e.track][0],e.value)
            c=(c[0],None)
        else:
            c=(c[0],[(c[0][e.track], e)])
        return c
    #r=midi.midi.read_midifile("/jfli/inputs/karaoke/kar/Bureau/Dutronc_J_._J_aime_les_filles.kar")
    lentracks=len(r.tracklist)
    context=([  (0,0) ] * lentracks,[])
    return ifilter(lambda x:(x!=None),imap(lambda x:x[1],ireduce(transform_context,r.iterevents(), context )))
Ejemplo n.º 2
0
def totab(m):
    from pycvf.lib.misc.ireduce import ireduce
    def _tonotes(c,n):
        if (n.velocity==0):
            c[0][(n.pitch,n.track)]=n.tick
            return [c[0],None]
        else:
            try:
                r=((n.tick,n.pitch),(c[0][(n.pitch,n.track)],n.pitch),n.velocity,n.track)
                c[0][(n.pitch,n.track)]=n.tick
                return [c[0],r]
            except KeyError:
                r=((n.tick,n.pitch),(min(midireader.midifile.endoftrack.tick,n.tick+100),n.pitch),n.velocity,n.track)
                c[0][(n.pitch,n.track)]=n.tick
                return [c[0],r]
    l=filter(lambda x:x.type[:4]=="Note", m.iterevents())
    l.reverse()
    l=filter(lambda x:x!=None,map(lambda x:x[1],ireduce(_tonotes,l,[{},None])))
    l.reverse()
    return l