diff --git a/light9/effect/sequencer/eval_faders.py b/light9/effect/sequencer/eval_faders.py --- a/light9/effect/sequencer/eval_faders.py +++ b/light9/effect/sequencer/eval_faders.py @@ -44,8 +44,10 @@ class FaderEval: self.graph = graph self.lib = lib self.faders: List[Fader] = [] + self.grandMaster = 1.0 self.graph.addHandler(self._compile) + self.graph.addHandler(self._compileGm) self.lastLoopSucceeded = False @COMPILE.time() @@ -73,6 +75,15 @@ class FaderEval: setAttr = typedValue(EffectAttr, self.graph, setting, L9['effectAttr']) return (Fader(self.graph, self.lib, cast(URIRef, fader), effect, setAttr)) + def _compileGm(self): + try: + self.grandMaster = typedValue(float, self.graph, + L9.grandMaster, + L9.value) + print('got gm', self.grandMaster) + except ValueError: + return + @COMPUTE_ALL_FADERS.time() def computeOutput(self) -> DeviceSettings: faderEffectOutputs: List[DeviceSettings] = [] @@ -82,7 +93,9 @@ class FaderEval: if f.value is None: log.warning(f'{f.value=}; should be set during _compile. Skipping {f.uri}') continue - effectSettings = EffectSettings(self.graph, [(f.effect, f.setEffectAttr, f.value)]) + v = f.value + v *= self.grandMaster + effectSettings = EffectSettings(self.graph, [(f.effect, f.setEffectAttr, v)]) ds = f.ee.compute(now, effectSettings) faderEffectOutputs.append(ds)