I found a bug in the AU Version:
When the AU sends a ctr change to SL, SL sends back the old value (the value, that it had before the ctr change).
You can reproduce this by connecting a fader in Mainstage to a control (i.E. sync or rate) and change it in SL (OSC Interface). Mainstage will be always one step behind.
Possible cause:
The processing of the event in the _nonrt_update_event_queue is faster then the on in the _event_queue.
This leads to the signal ParamChanged beeing emitted bofore the new value gets wirtten to the ports. If this happens, the AU gets the signal and reads the old (yet unchanged) value.
Possible fix:
Send the signal from looper.cpp (works on my computer)
in looper.cpp
Code: Select all
default:
ports[ev->Control] = ev->Value;
LoopParamChanged(ev->Control, _index); // emit
//cerr << "set port " << ev->Control << " to: " << ev->Value << endl;
break;
}
Code: Select all
LoopAdded (instance->get_index(), !_loading); // emit
instance->LoopParamChanged.connect(slot(*this, &Engine::parameter_changed));
Code: Select all
void Engine::parameter_changed(int ctrl_id, int instance) {
ParamChanged(ctrl_id, instance); // emit
}
disable the signal
Code: Select all
//ParamChanged(evt->Control, instance); // emit