Beispiel #1
0
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);
	}
}
Beispiel #2
0
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;
		}
}
Beispiel #3
0
PdBase& PdBase::operator<<(const ControlChange& var) {
	sendControlChange(var.channel, var.controller, var.value);
	return *this;
}
Beispiel #4
0
void Metronome::shutupSound()
{
    sendControlChange( MIDI_CTL_ALL_NOTES_OFF, 0 );
    sendControlChange( MIDI_CTL_ALL_SOUNDS_OFF, 0 );
}
Beispiel #5
0
void Metronome::metronome_set_controls()
{
    sendControlChange(MIDI_CTL_MSB_MAIN_VOLUME, m_volume);
    sendControlChange(MIDI_CTL_MSB_PAN, m_pan);
}