2021-02-02 21:12:08 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
first commit - just play a MIDI file without interaction
diff --git a/qmp.c b/qmp.c new file mode 100644 index 0000000..71393a1 --- /dev/null +++ b/qmp.c @@ -0,0 +1,55 @@ +#include <unistd.h> +#include <stdio.h> + +#include "qms.h" +#include "smf.h" + +#define NEVENTS (1 << 16) +Event midi_evs[NEVENTS]; + +void +qms_putsample(int16_t left, int16_t right) +{ + write(1, & left, 2); + write(1, &right, 2); +} + +int +main(int argc, char *argv[]) +{ + Seeker seeker; + unsigned int i = 0; + int nevs = 0; + if (argc < 2) { + fprintf(stderr, "usage:\n %s song.mid\n", argv[0]); + return 1; + } + switch (qms_smf2evs(argv[1], midi_evs, NEVENTS, &nevs)) { + case SMF_OK: + fprintf(stderr, "%u events compiled\n", nevs); + break; + case SMF_NOFILE: + fprintf(stderr, "file not found\n"); + break; + case SMF_BADSIG: + fprintf(stderr, "invalid signature\n"); + break; + case SMF_BADFMT: + fprintf(stderr, "unsupported track format\n"); + break; + case SMF_BADDIV: + fprintf(stderr, "unsupported division format\n"); + break; + case SMF_TOOBIG: + fprintf(stderr, "too many events\n"); + break; + } + qms_init(); + qms_load(&seeker, midi_evs, nevs); + qms_seek(&seeker, 0*R); + while (!qms_play(&seeker, R>>2)) { + fprintf(stderr, " %c\r", "|/-\\"[i++%4]); + fflush(stderr); + } + return 0; +}