46inline std::uint8_t
to_7bit(
double norm)
noexcept {
47 const double clamped = std::clamp(norm, 0.0, 1.0);
48 return static_cast<std::uint8_t
>(
49 std::clamp<int>(
static_cast<int>(clamped * 127.0 + 0.5), 0, 127));
60 const double bend_norm = std::clamp(
61 semitones /
static_cast<double>(
64 const int bend14 =
static_cast<int>(std::lround(8192.0 + bend_norm * 8191.0));
66 channel,
static_cast<std::uint16_t
>(std::clamp(bend14, 0, 16383)));
73 choc::midi::ShortMessage(
74 static_cast<std::uint8_t
>(0xD0 | (channel & 0x0F)),
static constexpr float kDefaultMemberBendSemitones
Default member-channel pitch-bend range (MPE spec).
Definition mpe_voice_tracker.hpp:73
MPE (MIDI Polyphonic Expression) voice tracker.
Timestamped MIDI event combining a choc::midi::ShortMessage with timing info.
Definition message.hpp:32
static MidiEvent cc(uint8_t channel, uint8_t controller, uint8_t value)
Create a Control Change event.
Definition message.hpp:64
static MidiEvent pitch_bend(uint8_t channel, uint16_t value)
Create a Pitch Bend event.
Definition message.hpp:73