MIDI standard: encode as unsigned with center at 8192

md-perf
probonopd 5 days ago
parent b4f4e8fdd4
commit 457906267c
  1. 7
      src/performance_sysex.cpp

@ -25,19 +25,18 @@
#include "minidexed.h"
#include "mididevice.h"
// Helper functions for 2's complement 14-bit MIDI-safe encoding/decoding
// Helper functions for standard MIDI 14-bit signed value encoding/decoding (offset method)
static void encode_midi14_signed_7bit(int value, uint8_t& msb, uint8_t& lsb) {
// Clamp to 14-bit signed range
if (value < -8192) value = -8192;
if (value > 8191) value = 8191;
uint16_t midi14 = (value < 0) ? (0x2000 + value) : value;
midi14 &= 0x3FFF;
uint16_t midi14 = (uint16_t)(value + 8192); // MIDI standard: center is 8192
msb = (midi14 >> 7) & 0x7F;
lsb = midi14 & 0x7F;
}
static int decode_midi14_signed_7bit(uint8_t msb, uint8_t lsb) {
uint16_t midi14 = ((msb & 0x7F) << 7) | (lsb & 0x7F);
return (midi14 & 0x2000) ? (midi14 - 0x4000) : midi14;
return (int)midi14 - 8192;
}
LOGMODULE ("PerformanceSysEx");

Loading…
Cancel
Save