mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
midifile: unpack the UMP SysRT bytes correctly
They are packed in a native endian uint32_t so read it like that and then use shifts to get the right bytes.
This commit is contained in:
parent
c4a88dfe6c
commit
55f71520db
1 changed files with 10 additions and 10 deletions
|
|
@ -940,17 +940,19 @@ static int dump_event_ump(FILE *out, const struct midi_event *ev)
|
||||||
dump_mem(out, "Utility", ev->data, ev->size);
|
dump_mem(out, "Utility", ev->data, ev->size);
|
||||||
break;
|
break;
|
||||||
case 0x1:
|
case 0x1:
|
||||||
switch (ev->data[2]) {
|
{
|
||||||
|
uint8_t b[3] = { (d[0] >> 16) & 0x7f, (d[0] >> 8) & 0x7f, d[0] & 0x7f };
|
||||||
|
switch (b[0]) {
|
||||||
case 0xf1:
|
case 0xf1:
|
||||||
fprintf(out, "MIDI Time Code Quarter Frame: type %d values %d",
|
fprintf(out, "MIDI Time Code Quarter Frame: type %d values %d",
|
||||||
ev->data[0] >> 4, ev->data[0] & 0xf);
|
b[1] >> 4, b[1] & 0xf);
|
||||||
break;
|
break;
|
||||||
case 0xf2:
|
case 0xf2:
|
||||||
fprintf(out, "Song Position Pointer: value %d",
|
fprintf(out, "Song Position Pointer: value %d",
|
||||||
((int)ev->data[1] << 7 | ev->data[0]));
|
((int)b[2] << 7 | b[1]));
|
||||||
break;
|
break;
|
||||||
case 0xf3:
|
case 0xf3:
|
||||||
fprintf(out, "Song Select: value %d", (ev->data[0] & 0x7f));
|
fprintf(out, "Song Select: value %d", b[1]);
|
||||||
break;
|
break;
|
||||||
case 0xf6:
|
case 0xf6:
|
||||||
fprintf(out, "Tune Request");
|
fprintf(out, "Tune Request");
|
||||||
|
|
@ -978,20 +980,18 @@ static int dump_event_ump(FILE *out, const struct midi_event *ev)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case 0x2:
|
case 0x2:
|
||||||
{
|
{
|
||||||
struct midi_event ev1;
|
struct midi_event ev1;
|
||||||
uint8_t msg[4];
|
uint8_t b[3] = { d[0] >> 16, d[0] >> 8, d[0] };
|
||||||
|
|
||||||
ev1 = *ev;
|
ev1 = *ev;
|
||||||
msg[0] = (d[0] >> 16);
|
if (b[0] >= 0xc0 && b[0] <= 0xdf)
|
||||||
msg[1] = (d[0] >> 8);
|
|
||||||
msg[2] = (d[0]);
|
|
||||||
if (msg[0] >= 0xc0 && msg[0] <= 0xdf)
|
|
||||||
ev1.size = 2;
|
ev1.size = 2;
|
||||||
else
|
else
|
||||||
ev1.size = 3;
|
ev1.size = 3;
|
||||||
ev1.data = msg;
|
ev1.data = b;
|
||||||
dump_event_midi1(out, &ev1);
|
dump_event_midi1(out, &ev1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue