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 )))
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