forked from genewildish/Mainline
fix: Bug fixes and improvements
- fix(demo-lfo-effects): Fix math.sin() usage (was angle.__sin__()) - feat(pipeline): Add set_effect_intensity() method for runtime effect control - Allows changing effect intensity during pipeline execution - Returns False if effect not found or intensity out of range - Used by LFO modulation demo The demo-lfo-effects.py script now works correctly with proper math.sin() usage and the new set_effect_intensity() method provides a clean API for runtime effect intensity control.
This commit is contained in:
@@ -984,6 +984,35 @@ class Pipeline:
|
||||
"""Get historical frame times for sparklines/charts."""
|
||||
return [f.total_ms for f in self._frame_metrics]
|
||||
|
||||
def set_effect_intensity(self, effect_name: str, intensity: float) -> bool:
|
||||
"""Set the intensity of an effect in the pipeline.
|
||||
|
||||
Args:
|
||||
effect_name: Name of the effect to modify
|
||||
intensity: New intensity value (0.0 to 1.0)
|
||||
|
||||
Returns:
|
||||
True if successful, False if effect not found or not an effect stage
|
||||
"""
|
||||
if not 0.0 <= intensity <= 1.0:
|
||||
return False
|
||||
|
||||
stage = self._stages.get(effect_name)
|
||||
if not stage:
|
||||
return False
|
||||
|
||||
# Check if this is an EffectPluginStage
|
||||
from engine.pipeline.adapters.effect_plugin import EffectPluginStage
|
||||
|
||||
if isinstance(stage, EffectPluginStage):
|
||||
# Access the underlying effect plugin
|
||||
effect = stage._effect
|
||||
if hasattr(effect, "config"):
|
||||
effect.config.intensity = intensity
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
class PipelineRunner:
|
||||
"""High-level pipeline runner with animation support."""
|
||||
|
||||
@@ -14,6 +14,7 @@ Effects modulated:
|
||||
The LFO uses a sine wave to oscillate intensity between 0.0 and 1.0.
|
||||
"""
|
||||
|
||||
import math
|
||||
import sys
|
||||
import time
|
||||
from dataclasses import dataclass
|
||||
@@ -64,7 +65,7 @@ class LFOEffectDemo:
|
||||
angle = (
|
||||
(elapsed * effect_cfg.frequency + effect_cfg.phase_offset) * 2 * 3.14159
|
||||
)
|
||||
lfo_value = 0.5 + 0.5 * (angle.__sin__())
|
||||
lfo_value = 0.5 + 0.5 * math.sin(angle)
|
||||
|
||||
# Scale to intensity range
|
||||
intensity = effect_cfg.min_intensity + lfo_value * (
|
||||
|
||||
Reference in New Issue
Block a user