tools: add -m options to mididump

The -m option forces conversion to MIDI 1.0 and will then dump the midi
1 events.
This commit is contained in:
Wim Taymans 2025-08-19 16:33:31 +02:00
parent c0a7c01a35
commit 15f3b1f450

View file

@ -32,6 +32,7 @@ struct data {
struct pw_filter *filter; struct pw_filter *filter;
struct port *in_port; struct port *in_port;
int64_t clock_time; int64_t clock_time;
bool opt_midi1;
}; };
static int dump_file(const char *filename) static int dump_file(const char *filename)
@ -90,14 +91,20 @@ static void on_process(void *_data, struct spa_io_position *position)
while (spa_pod_parser_get_control_body(&parser, &c, &c_body) >= 0) { while (spa_pod_parser_get_control_body(&parser, &c, &c_body) >= 0) {
struct midi_event ev; struct midi_event ev;
if (c.type != SPA_CONTROL_UMP) switch (c.type) {
case SPA_CONTROL_UMP:
ev.type = MIDI_EVENT_TYPE_UMP;
break;
case SPA_CONTROL_Midi:
ev.type = MIDI_EVENT_TYPE_MIDI1;
break;
default:
continue; continue;
}
ev.track = 0; ev.track = 0;
ev.sec = (offset + c.offset) / (float) position->clock.rate.denom; ev.sec = (offset + c.offset) / (float) position->clock.rate.denom;
ev.data = (uint8_t*)c_body; ev.data = (uint8_t*)c_body;
ev.size = c.value.size; ev.size = c.value.size;
ev.type = MIDI_EVENT_TYPE_UMP;
fprintf(stdout, "%4d: ", c.offset); fprintf(stdout, "%4d: ", c.offset);
midi_file_dump_event(stdout, &ev); midi_file_dump_event(stdout, &ev);
@ -144,7 +151,7 @@ static int dump_filter(struct data *data)
PW_FILTER_PORT_FLAG_MAP_BUFFERS, PW_FILTER_PORT_FLAG_MAP_BUFFERS,
sizeof(struct port), sizeof(struct port),
pw_properties_new( pw_properties_new(
PW_KEY_FORMAT_DSP, "32 bit raw UMP", PW_KEY_FORMAT_DSP, data->opt_midi1 ? "8 bit raw midi" : "32 bit raw UMP",
PW_KEY_PORT_NAME, "input", PW_KEY_PORT_NAME, "input",
NULL), NULL),
NULL, 0); NULL, 0);
@ -167,7 +174,8 @@ static void show_help(const char *name, bool error)
fprintf(error ? stderr : stdout, "%s [options] [FILE]\n" fprintf(error ? stderr : stdout, "%s [options] [FILE]\n"
" -h, --help Show this help\n" " -h, --help Show this help\n"
" --version Show version\n" " --version Show version\n"
" -r, --remote Remote daemon name\n", " -r, --remote Remote daemon name\n"
" -m, --midi1 Dump as MIDI 1.0\n",
name); name);
} }
@ -179,6 +187,7 @@ int main(int argc, char *argv[])
{ "help", no_argument, NULL, 'h' }, { "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, 'V' }, { "version", no_argument, NULL, 'V' },
{ "remote", required_argument, NULL, 'r' }, { "remote", required_argument, NULL, 'r' },
{ "midi1", no_argument, NULL, 'm' },
{ NULL, 0, NULL, 0} { NULL, 0, NULL, 0}
}; };
@ -187,7 +196,7 @@ int main(int argc, char *argv[])
setlinebuf(stdout); setlinebuf(stdout);
while ((c = getopt_long(argc, argv, "hVr:", long_options, NULL)) != -1) { while ((c = getopt_long(argc, argv, "hVr:m", long_options, NULL)) != -1) {
switch (c) { switch (c) {
case 'h': case 'h':
show_help(argv[0], false); show_help(argv[0], false);
@ -203,6 +212,9 @@ int main(int argc, char *argv[])
case 'r': case 'r':
data.opt_remote = optarg; data.opt_remote = optarg;
break; break;
case 'm':
data.opt_midi1 = true;
break;
default: default:
show_help(argv[0], true); show_help(argv[0], true);
return -1; return -1;