2020-09-23 22:40:07 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
basic skeleton for track syncing
diff --git a/seqt.c b/seqt.c index f0c4fbd..a688c9f 100644 --- a/seqt.c +++ b/seqt.c @@ -7,11 +7,60 @@ int ntracks; char map[MAPSIZE][RECSIZE]; unsigned char matrix[MAXINDEX][MAXTRACK][MAXVOICE]; +void +print_tracks() +{ + int index[MAXTRACK] = {0}; + int count[MAXTRACK] = {0}; + int active_tracks = MAXTRACK-1; + int i, min_count; + unsigned char duration; + while (active_tracks) { + for (i = 1; i < MAXTRACK; i++) { + if (index[i] == MAXINDEX) { + /* TODO: output blank */ + printf("~"); + continue; + } + if (!count[i]) { + duration = matrix[index[i]][0][i >> 1]; + duration = i & 1 ? duration & 0x0F : duration >> 4; + if (!duration) { + index[i] = MAXINDEX; + active_tracks--; + /* TODO: output blank */ + printf("~"); + continue; + } + /* head */ + /* TODO: output head */ + printf("*"); + count[i] = 0x40 >> (duration - 1); + } else { + /* tail */ + /* TODO: output tail */ + printf("|"); + } + } + printf("\n"); + min_count = 0x40; + for (i = 1; i < MAXTRACK; i++) + if (index[i] != MAXINDEX && count[i] < min_count) + min_count = count[i]; + for (i = 1; i < MAXTRACK; i++) { + count[i] -= min_count; + if (!count[i]) + index[i]++; + } + } +} + int main() { if (load_txt(stdin) < 0) return 1; + print_tracks(); if (save_txt(stdout) < 0) return 2; return 0;