Added 1 character view and fucked with effects
This commit is contained in:
parent
4ee7f503d7
commit
14593786d0
123
src/main.cpp
123
src/main.cpp
|
@ -18,9 +18,10 @@ static char *note_name[] = { "C ", "C#", "D ", "D#", "E ", "F ", "F#", "G ", "G#
|
||||||
|
|
||||||
void updateTrack(char* name, char* type);
|
void updateTrack(char* name, char* type);
|
||||||
void renderRows(WINDOW* win, xmp_module_info *mi, xmp_frame_info *fi);
|
void renderRows(WINDOW* win, xmp_module_info *mi, xmp_frame_info *fi);
|
||||||
|
char getEffectType(int i);
|
||||||
|
|
||||||
static char *device = "default";
|
static char *device = "default";
|
||||||
int chanOffset = 0; int detail = 0; int vol = 100;
|
int chanOffset = 0; int detail = 1; int vol = 100;
|
||||||
bool looper = false, is_stopped = false;
|
bool looper = false, is_stopped = false;
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
printf("Trakker %s (with libxmp %s)\n", VERSION, xmp_version);
|
printf("Trakker %s (with libxmp %s)\n", VERSION, xmp_version);
|
||||||
|
@ -137,10 +138,11 @@ int main(int argc, char *argv[]) {
|
||||||
case 'l':
|
case 'l':
|
||||||
looper = !looper;
|
looper = !looper;
|
||||||
break;
|
break;
|
||||||
case '1': detail = 0; break;
|
case '0': detail = 0; break;
|
||||||
case '2': detail = 1; break;
|
case '1': detail = 1; break;
|
||||||
case '3': detail = 2; break;
|
case '2': detail = 2; break;
|
||||||
case '4': detail = 3; break;
|
case '3': detail = 3; break;
|
||||||
|
case '4': detail = 4; break;
|
||||||
};
|
};
|
||||||
renderRows(win, &mi, &fi);
|
renderRows(win, &mi, &fi);
|
||||||
}
|
}
|
||||||
|
@ -201,18 +203,23 @@ void renderRows(WINDOW* win, xmp_module_info *mi, xmp_frame_info *fi) {
|
||||||
mi->mod->pat,
|
mi->mod->pat,
|
||||||
fi->bpm,
|
fi->bpm,
|
||||||
fi->speed,
|
fi->speed,
|
||||||
chanOffset,
|
chanOffset+1,
|
||||||
mi->mod->chn-1,
|
mi->mod->chn,
|
||||||
vol,
|
vol,
|
||||||
detail+1,
|
detail+1,
|
||||||
looper?"LOOP ":""
|
looper?"LOOP ":""
|
||||||
);
|
);
|
||||||
int view_chanOffset = chanOffset;
|
int view_chanOffset = chanOffset;
|
||||||
int view_detail = detail;
|
int view_detail = detail;
|
||||||
int dlvl = (7+(detail*4));
|
int dlvl;
|
||||||
|
if (detail == 4) dlvl = 19;
|
||||||
|
else if (detail == 3) dlvl = 15;
|
||||||
|
else if (detail == 2) dlvl = 11;
|
||||||
|
else if (detail == 1) dlvl = 7;
|
||||||
|
else dlvl = 2;
|
||||||
for (int y = 0; y < LINES - 2; y++) {
|
for (int y = 0; y < LINES - 2; y++) {
|
||||||
int trow = (fi->row - ((LINES - 2) / 2))+y;
|
int trow = (fi->row - ((LINES - 2) / 2))+y;
|
||||||
if (trow > fi->num_rows || trow < 0) { continue;}
|
if (trow > fi->num_rows-1 || trow < 0) { continue;}
|
||||||
if (trow == fi->row) {
|
if (trow == fi->row) {
|
||||||
wattron(win, COLOR_PAIR(is_stopped?2:1));
|
wattron(win, COLOR_PAIR(is_stopped?2:1));
|
||||||
wattron(win, A_BOLD);
|
wattron(win, A_BOLD);
|
||||||
|
@ -234,50 +241,53 @@ void renderRows(WINDOW* win, xmp_module_info *mi, xmp_frame_info *fi) {
|
||||||
struct xmp_event event = mi->mod->xxt[track]->event[trow];
|
struct xmp_event event = mi->mod->xxt[track]->event[trow];
|
||||||
if (i > 0 && i == chanOffset) wprintw(win, "<");
|
if (i > 0 && i == chanOffset) wprintw(win, "<");
|
||||||
else wprintw(win, "|");
|
else wprintw(win, "|");
|
||||||
if (event.note > 0x80) {
|
|
||||||
wprintw(win, "=== ");
|
|
||||||
} else if (event.note > 0) {
|
|
||||||
int note = event.note - 1;
|
|
||||||
wprintw(win, "%s%d ", note_name[note % 12], note / 12);
|
|
||||||
} else {
|
|
||||||
wprintw(win, "--- ");
|
|
||||||
}
|
|
||||||
if (event.ins > 0) {
|
|
||||||
wprintw(win, "%02X", event.ins);
|
|
||||||
} else {
|
|
||||||
wprintw(win, "--");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (detail >= 1) {
|
if (detail >= 1) {
|
||||||
if (event.vol > 0) {
|
if (event.note > 0x80) {
|
||||||
wprintw(win, " v%02X", event.vol);
|
wprintw(win, "=== ");
|
||||||
|
} else if (event.note > 0) {
|
||||||
|
int note = event.note - 1;
|
||||||
|
wprintw(win, "%s%d ", note_name[note % 12], note / 12);
|
||||||
} else {
|
} else {
|
||||||
wprintw(win, " ---");
|
wprintw(win, "--- ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.ins > 0) {
|
||||||
|
wprintw(win, "%02X", event.ins);
|
||||||
|
} else {
|
||||||
|
wprintw(win, "--");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (detail >= 2) {
|
if (detail >= 2) {
|
||||||
if (event.fxt > 0) {
|
if (event.vol != 0) {
|
||||||
char t = event.fxt;
|
wprintw(win, " v%02i", event.vol-1);
|
||||||
char t2[0];
|
|
||||||
if (t > 0x0f) t = 'F' + (t - 0x0f);
|
|
||||||
else { sprintf(t2, "%X", t); t = t2[0]; }
|
|
||||||
wprintw(win, " %c%02X", t, event.fxp);
|
|
||||||
} else {
|
} else {
|
||||||
wprintw(win, " ---");
|
wprintw(win, " ---");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (detail >= 3) {
|
if (detail >= 3) {
|
||||||
if (event.f2t > 0) {
|
char f1;
|
||||||
char t = event.f2t;
|
if ((f1 = getEffectType(event.fxt)) != 0)
|
||||||
char t2[0];
|
wprintw(win, " %c%02X", f1, event.fxp);
|
||||||
if (t > 0x0f) t = 'F' + (t - 0x0f);
|
else
|
||||||
else { sprintf(t2, "%X", t); t = t2[0]; }
|
|
||||||
wprintw(win, " %c%02X", t, event.f2p);
|
|
||||||
} else {
|
|
||||||
wprintw(win, " ---");
|
wprintw(win, " ---");
|
||||||
|
|
||||||
|
if (detail >= 4) {
|
||||||
|
char f2;
|
||||||
|
if ((f2 = getEffectType(event.fxt)) != 0)
|
||||||
|
wprintw(win, " %c%02X", f2, event.f2p);
|
||||||
|
else
|
||||||
|
wprintw(win, " ---");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (event.note > 0x80) {
|
||||||
|
wprintw(win, "-");
|
||||||
|
} else if (event.note > 0) {
|
||||||
|
wprintw(win, "#");
|
||||||
|
} else {
|
||||||
|
wprintw(win, " ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
view_chanOffset = chanOffset;
|
view_chanOffset = chanOffset;
|
||||||
view_detail = detail;
|
view_detail = detail;
|
||||||
|
@ -288,3 +298,38 @@ void renderRows(WINDOW* win, xmp_module_info *mi, xmp_frame_info *fi) {
|
||||||
refresh();
|
refresh();
|
||||||
wrefresh(win);
|
wrefresh(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char getEffectType(int i) {
|
||||||
|
// The effect type characters are so strange to me.
|
||||||
|
// They make absolutely no sense in why it's setup this way.
|
||||||
|
// Maybe I'm mega stupid right now but this is all of the IT
|
||||||
|
// formats effects, so maybe this will cover everything enough.
|
||||||
|
// Broken, but not crashy-broken anymore.
|
||||||
|
switch(i) {
|
||||||
|
case 1: return 'F';
|
||||||
|
case 2: return 'E';
|
||||||
|
case 3: return 'G';
|
||||||
|
case 4: return 'H';
|
||||||
|
case 5: return 'L';
|
||||||
|
case 6: return 'K';
|
||||||
|
case 7: return 'R';
|
||||||
|
case 8: return 'X';
|
||||||
|
case 9: return 'O';
|
||||||
|
case 10: return 'D';
|
||||||
|
case 11: return 'B';
|
||||||
|
case 16: return 'V';
|
||||||
|
case 17: return 'W';
|
||||||
|
case 27: return 'Q';
|
||||||
|
case 29: return 'I';
|
||||||
|
case 128: return 'M';
|
||||||
|
case 129: return 'N';
|
||||||
|
case 132: return 'Z';
|
||||||
|
case 135: return 'T';
|
||||||
|
case 137: return 'P';
|
||||||
|
case 138: return 'Y';
|
||||||
|
case 142: return 'C';
|
||||||
|
case 163: return 'A';
|
||||||
|
case 172: return 'U';
|
||||||
|
case 180: return 'J';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user