+ Mv(n) is the return value of ::get_value() for the n-th master
+ Mr(n) is the return value of ::ratio() for the n-th master record
+
+ the slave should return V' on the next call to ::get_value().
+
+ but the value is determined by the masters, so we know:
+
+ V' = (Mv(1) * Mr(1)) * (Mv(2) * Mr(2)) * ... * (Mv(n) * Mr(n))
+
+ hence:
+
+ Mr(1) * Mr(2) * ... * (Mr(n) = V' / (Mv(1) * Mv(2) * ... * Mv(n))
+
+ if we make all ratios equal (i.e. each master contributes the same
+ fraction of its own gain level to make the final slave gain), then we
+ have:
+
+ pow (Mr(n), n) = V' / (Mv(1) * Mv(2) * ... * Mv(n))
+
+ which gives
+
+ Mr(n) = pow ((V' / (Mv(1) * Mv(2) * ... * Mv(n))), 1/n)
+
+ Mr(n) is the new ratio number for the slaves
+ */
+
+
+ const double nmasters = _masters.size();
+ double masters_total_gain_coefficient = 1.0;
+
+ for (Masters::iterator mr = _masters.begin(); mr != _masters.end(); ++mr) {
+ masters_total_gain_coefficient *= mr->second.master()->get_value();