void Sequencer::executeEvent(HostEvent* c) { switch (c->name) { case HC_TRANSPORT_PAUSE: case HC_TRANSPORT_PLAY: case HC_TRANSPORT_RECORD: case HC_TRANSPORT_REWIND: case HC_TRANSPORT_STOP: commandTransport(c); break; case HC_SONG_QUANTISENUMERATOR: _song.setQuantiseNumerator(c->argv[0]); break; case HC_SONG_QUANTISEDIVISOR: _song.setQuantiseDivisor(c->argv[0]); break; case HC_SONG_AUTOQUANTISE: _song.setAutoQuant(c->argv[0]==0?false:true); break; case HC_SECTION_SET_NEXT: _song.setNextSection(c->argv[0]); break; case HC_MIDI_EVENT: _song.addEvent(HostEventFactory::midiMessageFromEvent(c)); break; case HC_PHRASE_MUTE_TOGGLE: _song.togglePhraseMute(c->argv[0]); break; case HC_REC_METSTATE: _song.setMetronomeState((MetronomeState)c->argv[0]); break; case HC_REC_METRONOME: _song.setMetronomeBars(c->argv[0]); break; case HC_PHRASE_LENGTH: { Section* section = _song.getCurrentSectionPointer(); Phrase* phrase = section ? section->checkoutActivePhrase() : nullptr; if (phrase) { phrase->setLengthBars(c->argv[0]); section->checkinActivePhrase(); } break; } case HC_CURRENT_PHRASE: _song.setCurrentPhrase(c->argv[0]); break; case HC_PHASE_QUANTISE: _song.quantisePhrase(); break; default: break; } }