diff -urN midi_prog-/midtxt.c midi_prog/midtxt.c --- midi_prog-/midtxt.c 2015-05-11 00:00:00.000000000 +0900 +++ midi_prog/midtxt.c 2015-06-05 00:00:00.000000000 +0900 @@ -221,6 +221,40 @@ } int +tx_abs_conv(void) +{ + char buf[1024], tmp[1024]; + int abs = 0, delta; + + while(fgets(buf, sizeof(buf), stdin)){ + if(sscanf(buf, "delta=%d ", &delta) == 1){ + strcpy(tmp, strchr(buf, ' ')); + abs += delta; + sprintf(buf, "abs=%08d%s", abs, tmp); + } + fputs(buf, stdout); + } + return 0; +} + +int +tx_delta_conv(void) +{ + char buf[1024], tmp[1024]; + int abs_prev = 0, abs; + + while(fgets(buf, sizeof(buf), stdin)){ + if(sscanf(buf, "abs=%08d ", &abs) == 1){ + strcpy(tmp, strchr(buf, ' ')); + sprintf(buf, "delta=%d%s", abs - abs_prev, tmp); + abs_prev = abs; + } + fputs(buf, stdout); + } + return 0; +} + +int main(int ac, char **av) { char buf_cmd[16], buf_type[16], buf_meta[16], buf[256]; @@ -228,6 +262,8 @@ int v, hi, low, same, ch, note, velo, type, n, i; if(opt_idx("-r", ac, av) >= 0) return rconv(); + if(opt_idx("-tx_abs", ac, av) >= 0) return tx_abs_conv(); + if(opt_idx("-tx_delta", ac, av) >= 0) return tx_delta_conv(); rd_str(4, buf); printf("%s\n", buf);