BEGIN { FS=", " ;dontprint=0 ; nloop=0 ; cloop=0 ; ptick=0 ; header=1 ; htick=5 } /Header/ { print "0, 0, Header, 0, 1, " $6; dontprint=1; ptick=$6; } /1, 0, Time_signature/ { split($0,savets,", "); dontprint=1 ; } /1, 0, Tempo/ { split($0,savet,", "); dontprint=1 ; } /Start_track/ { print $0 ; print "1, 0, Time_signature, 1, 2, 24, 8" ; print "1, 0, Tempo, 230769" ; print "1, 0, Marker_t, \"SetStart\"" ; print "1, 0, Marker_t, \"cme style\"" ; print "1, 0, System_exclusive, 5, 126, 127, 9, 1, 247"; dontprint=1; } ## LoopStart1 should be on tick 0 /LoopStart1/ { dtick=ptick-$2; ## dtick = delta tick for Loopstart beginning on 2nd bar print "1, " ptick ", Time_signature, " savets[4] ", " savets[5] ", " savets[6] ", " savets[7] ; print "1, " ptick ", Tempo, " savet[4] ; print "1, " ptick ", Marker_t, \"SetEnd\"" ; header=0; } /LoopStart/ { match($0,"LoopStart"); cloop=substr($0,RSTART+RLENGTH,1); if ( nloop != 0 ) { print "1, " $2 + dtick ", Marker_t, \"LoopEnd" nloop "\"" }; nloop=cloop ; }; /End_track/ { if ( nloop != 0 ) { print "1, " $2 + dtick ", Marker_t, \"LoopEnd" nloop "\"" }; }; { if ( dontprint != 1) { ## if Loopstart1 has not been reached ## should concern only Control_c and Program_c messages if(header==1) { sub(/1, 0/,"1, " htick); htick+=5; } else { regexp="1, " $2 ", "; sub(regexp,"1, " $2 + dtick ", "); } print $0; } dontprint=0; }