midifile: use the meta.offset to get to the metadata

This commit is contained in:
Wim Taymans 2024-08-23 15:34:36 +02:00
parent a60cf79226
commit 63afe65e3f

View file

@ -683,19 +683,21 @@ static int dump_event_midi1(FILE *out, const struct midi_event *ev)
fprintf(out, "Active Sensing"); fprintf(out, "Active Sensing");
break; break;
case 0xff: case 0xff:
{
uint8_t *meta = &ev->data[ev->meta.offset];
fprintf(out, "Meta: "); fprintf(out, "Meta: ");
switch (ev->data[1]) { switch (ev->data[1]) {
case 0x00: case 0x00:
fprintf(out, "Sequence Number %3d %3d", ev->data[3], ev->data[4]); fprintf(out, "Sequence Number %3d %3d", meta[0], meta[1]);
break; break;
case 0x01 ... 0x09: case 0x01 ... 0x09:
fprintf(out, "%s: %s", event_names[ev->data[1] - 1], &ev->data[ev->meta.offset]); fprintf(out, "%s: %s", event_names[ev->data[1] - 1], meta);
break; break;
case 0x20: case 0x20:
fprintf(out, "Channel Prefix: %03d", ev->data[3]); fprintf(out, "Channel Prefix: %03d", meta[0]);
break; break;
case 0x21: case 0x21:
fprintf(out, "Midi Port: %03d", ev->data[3]); fprintf(out, "Midi Port: %03d", meta[0]);
break; break;
case 0x2f: case 0x2f:
fprintf(out, "End Of Track"); fprintf(out, "End Of Track");
@ -707,20 +709,20 @@ static int dump_event_midi1(FILE *out, const struct midi_event *ev)
break; break;
case 0x54: case 0x54:
fprintf(out, "SMPTE Offset: %s %02d:%02d:%02d:%02d.%03d", fprintf(out, "SMPTE Offset: %s %02d:%02d:%02d:%02d.%03d",
smpte_rates[(ev->data[3] & 0x60) >> 5], smpte_rates[(meta[0] & 0x60) >> 5],
ev->data[3] & 0x1f, ev->data[4], ev->data[5], meta[0] & 0x1f, meta[1], meta[2],
ev->data[6], ev->data[7]); meta[3], meta[4]);
break; break;
case 0x58: case 0x58:
fprintf(out, "Time Signature: %d/%d, %d clocks per click, %d notated 32nd notes per quarter note", fprintf(out, "Time Signature: %d/%d, %d clocks per click, %d notated 32nd notes per quarter note",
ev->data[3], (int)pow(2, ev->data[4]), ev->data[5], ev->data[6]); meta[0], (int)pow(2, meta[1]), meta[2], meta[3]);
break; break;
case 0x59: case 0x59:
{ {
int sf = ev->data[3]; int sf = meta[0];
fprintf(out, "Key Signature: %d %s: %s", abs(sf), fprintf(out, "Key Signature: %d %s: %s", abs(sf),
sf > 0 ? "sharps" : "flats", sf > 0 ? "sharps" : "flats",
ev->data[4] == 0 ? meta[1] == 0 ?
major_keys[SPA_CLAMP(sf + 9, 0, 18)] : major_keys[SPA_CLAMP(sf + 9, 0, 18)] :
minor_keys[SPA_CLAMP(sf + 9, 0, 18)]); minor_keys[SPA_CLAMP(sf + 9, 0, 18)]);
break; break;
@ -732,6 +734,7 @@ static int dump_event_midi1(FILE *out, const struct midi_event *ev)
dump_mem(out, "Invalid", ev->data, ev->size); dump_mem(out, "Invalid", ev->data, ev->size);
} }
break; break;
}
default: default:
dump_mem(out, "Unknown", ev->data, ev->size); dump_mem(out, "Unknown", ev->data, ev->size);
break; break;