return val;
}
-StreamPanner::StreamPanner (Panner& p)
- : parent (p),
- _control (new PanControllable(p.session(), X_("panner"), *this))
+StreamPanner::StreamPanner (Panner& p, Parameter param)
+ : parent (p)
+ , _control (new PanControllable(p.session(), X_("panner"), *this, param))
{
+ assert(param.type() != NullAutomation);
+
_muted = false;
parent.session().add_controllable (_control);
/*---------------------------------------------------------------------- */
-BaseStereoPanner::BaseStereoPanner (Panner& p)
- : StreamPanner (p)
+BaseStereoPanner::BaseStereoPanner (Panner& p, Parameter param)
+ : StreamPanner (p, param)
{
}
pan = left * gain_coeff;
- mix_buffers_with_gain(dst+n,src+n,nframes-n,pan);
+ mix_buffers_with_gain (dst+n,src+n,nframes-n,pan);
} else {
/*---------------------------------------------------------------------- */
-EqualPowerStereoPanner::EqualPowerStereoPanner (Panner& p)
- : BaseStereoPanner (p)
+EqualPowerStereoPanner::EqualPowerStereoPanner (Panner& p, Parameter param)
+ : BaseStereoPanner (p, param)
{
update ();
desired_right = panR * (scale * panR + 1.0f - scale);
effective_x = x;
+ _control->set_value(x);
}
void
/* store effective pan position. do this even if we are muted */
- if (nframes > 0)
+ if (nframes > 0) {
effective_x = buffers[0][nframes-1];
+ _control->set_value(effective_x); // signal, update UI
+ }
if (_muted) {
return;
}
StreamPanner*
-EqualPowerStereoPanner::factory (Panner& parent)
+EqualPowerStereoPanner::factory (Panner& parent, Parameter param)
{
- return new EqualPowerStereoPanner (parent);
+ return new EqualPowerStereoPanner (parent, param);
}
XMLNode&
/*----------------------------------------------------------------------*/
-Multi2dPanner::Multi2dPanner (Panner& p)
- : StreamPanner (p)
+Multi2dPanner::Multi2dPanner (Panner& p, Parameter param)
+ : StreamPanner (p, param)
{
update ();
}
}
effective_x = x;
+ _control->set_value(x);
}
void
}
StreamPanner*
-Multi2dPanner::factory (Panner& p)
+Multi2dPanner::factory (Panner& p, Parameter param)
{
- return new Multi2dPanner (p);
+ return new Multi2dPanner (p, param);
}
int
outputs.push_back (Output (1.0, 0));
for (n = 0; n < npans; ++n) {
- push_back (new EqualPowerStereoPanner (*this));
+ push_back (new EqualPowerStereoPanner (*this, Parameter(PanAutomation, n)));
}
break;
outputs.push_back (Output (1.0, 1.0));
for (n = 0; n < npans; ++n) {
- push_back (new Multi2dPanner (*this));
+ push_back (new Multi2dPanner (*this, Parameter(PanAutomation, n)));
}
break;
outputs.push_back (Output (0, 1.0));
for (n = 0; n < npans; ++n) {
- push_back (new Multi2dPanner (*this));
+ push_back (new Multi2dPanner (*this, Parameter(PanAutomation, n)));
}
break;
outputs.push_back (Output (0.5, 0.75));
for (n = 0; n < npans; ++n) {
- push_back (new Multi2dPanner (*this));
+ push_back (new Multi2dPanner (*this, Parameter(PanAutomation, n)));
}
break;
}
for (n = 0; n < npans; ++n) {
- push_back (new Multi2dPanner (*this));
+ push_back (new Multi2dPanner (*this, Parameter(PanAutomation, n)));
}
break;
struct PanPlugins {
string name;
uint32_t nouts;
- StreamPanner* (*factory)(Panner&);
+ StreamPanner* (*factory)(Panner&, Parameter);
};
PanPlugins pan_plugins[] = {
assumption, but its still an assumption.
*/
- sp = pan_plugins[i].factory (*this);
+ sp = pan_plugins[i].factory (*this, Parameter(PanAutomation, 0));
if (sp->set_state (**niter) == 0) {
push_back (sp);