void MIDIMapper::set_midi_mapping(const MIDIMappingProto &new_mapping)
{
+ lock_guard<mutex> lock(mapping_mu);
if (mapping_proto) {
mapping_proto->CopyFrom(new_mapping);
} else {
midi_thread = thread(&MIDIMapper::thread_func, this);
}
+const MIDIMappingProto &MIDIMapper::get_current_mapping() const
+{
+ lock_guard<mutex> lock(mapping_mu);
+ return *mapping_proto;
+}
+
#define RETURN_ON_ERROR(msg, expr) do { \
int err = (expr); \
if (err < 0) { \
void MIDIMapper::handle_event(snd_seq_t *seq, snd_seq_event_t *event)
{
+ lock_guard<mutex> lock(mapping_mu);
switch (event->type) {
case SND_SEQ_EVENT_CONTROLLER: {
printf("Controller %d changed to %d\n", event->data.control.param, event->data.control.value);