void button_midi_send(uint16_t value, Button_type* buttons, uint8_t analog) { uint8_t is_pressed = (value & 0x80) ? 0 : 1; uint8_t num = value & 0x7F; if ((num < BUTTON_B1) && is_pressed) { switch (num) { case BUTTON_STOP: sendMMC(MMC_STOP, analog); break; case BUTTON_PLAY: sendMMC(MMC_PLAY, analog); break; case BUTTON_RECORD: sendMMC(MMC_REC, analog); break; } return; } num -= BUTTON_B1; if (!buttons[num].active) return; uint8_t channel = buttons[num].channel ? buttons[num].channel : Preset.MidiChannel; if (channel) channel--; //Real channels are 0-15 if (channel > 15) channel = 0; //buttons_state storage states of button in binary mode: 01001001 //button num is order number, button state is 0 or 1 if (is_pressed) { if (buttons[num].type == BTN_TYPE_SWITCH) { if (buttons_control_state & button_positions[num]) { sendControlChange(buttons[num].event, buttons[num].off, channel, analog); buttons_control_state -= button_positions[num]; } else { sendControlChange(buttons[num].event, buttons[num].on, channel, analog); buttons_control_state += button_positions[num]; } } else { sendControlChange(buttons[num].event, buttons[num].on, channel, analog); } } else if (buttons[num].type == BTN_TYPE_PUSH) { sendControlChange(buttons[num].event, buttons[num].off, channel, analog); } }
void slider_midi_send(uint16_t value, Slider_type* sliders, uint8_t analog) { uint8_t num = (uint8_t)(value & 0x00FF); uint8_t midi_value = (uint8_t)(value >> 8); uint8_t channel = sliders[num].channel ? sliders[num].channel : Preset.MidiChannel; if (channel) channel--; //Real channels are 0-15 if (channel > 15) channel = 0; switch (num) { case SLIDER_PITCH: break; case SLIDER_AT: sendAfterTouch((uint8_t)(midi_value), channel, analog); break; default: sendControlChange(sliders[num].event, (uint8_t)(midi_value), channel, analog); break; } }
PdBase& PdBase::operator<<(const ControlChange& var) { sendControlChange(var.channel, var.controller, var.value); return *this; }
void Metronome::shutupSound() { sendControlChange( MIDI_CTL_ALL_NOTES_OFF, 0 ); sendControlChange( MIDI_CTL_ALL_SOUNDS_OFF, 0 ); }
void Metronome::metronome_set_controls() { sendControlChange(MIDI_CTL_MSB_MAIN_VOLUME, m_volume); sendControlChange(MIDI_CTL_MSB_PAN, m_pan); }