From 336a5d1ded565298a5cc90b5e4157da5a4a464b3 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 24 Apr 2025 10:25:39 +0200 Subject: [PATCH] ump: fix program change 2.0 to 1.0 conversion The program change byte should not be shifted an extra bit, unlike all the other messages. Fixes #4664 --- spa/include/spa/control/ump-utils.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/spa/include/spa/control/ump-utils.h b/spa/include/spa/control/ump-utils.h index 9f57efb93..463b12d14 100644 --- a/spa/include/spa/control/ump-utils.h +++ b/spa/include/spa/control/ump-utils.h @@ -96,9 +96,17 @@ SPA_API_CONTROL_UMP_UTILS int spa_ump_to_midi(uint32_t *ump, size_t ump_size, if (ump_size < 8) return 0; midi[size++] = (ump[0] >> 16) | 0x80; - if (midi[0] < 0xc0 || midi[0] > 0xdf) + switch (midi[0] & 0xf0) { + case 0xc0: + midi[size++] = (ump[1] >> 24); + break; + default: midi[size++] = (ump[0] >> 8) & 0x7f; - midi[size++] = (ump[1] >> 25); + SPA_FALLTHROUGH; + case 0xd0: + midi[size++] = (ump[1] >> 25); + break; + } break; case 0x0: /* Utility Messages */