28#ifndef SBL_DSP_WIDGETS_MIDI_CONVERTER_HPP_
29#define SBL_DSP_WIDGETS_MIDI_CONVERTER_HPP_
37enum class Cc : uint8_t {
65 float v =
static_cast<float>(vel) / 127.0f;
68 pitch_ = note_to_pitch(note);
74 if (note == current_note_) {
80 void cc(uint8_t number, uint8_t value) {
81 cc_[number] =
static_cast<float>(value) / 127.0f;
87 bend_ =
static_cast<float>(value) / 8191.0f;
89 bend_ =
static_cast<float>(value) / 8192.0f;
95 pressure_ =
static_cast<float>(value) / 127.0f;
101 float pitch()
const {
return pitch_; }
104 float gate()
const {
return gate_; }
113 float bend()
const {
return bend_; }
117 return cc_[
static_cast<uint8_t
>(cc_num)];
121 float cc(uint8_t cc_num)
const {
129 min_note_ = min_note;
130 max_note_ = max_note;
141 for (
auto& v : cc_) v = 0.0f;
145 float note_to_pitch(uint8_t note)
const {
146 float range =
static_cast<float>(max_note_ - min_note_);
147 float normalized = (
static_cast<float>(note) -
static_cast<float>(min_note_)) / range;
148 return std::clamp(normalized, 0.0f, 1.0f);
153 float velocity_ = 0.0f;
154 float pressure_ = 0.0f;
156 uint8_t current_note_ = 0;
157 uint8_t min_note_ = 24;
158 uint8_t max_note_ = 120;