Add TriggerCfg which acts as factory

pull/357/head
nyanpasu64 2018-07-13 05:07:16 -07:00
rodzic a19c02974f
commit b69c232e63
1 zmienionych plików z 23 dodań i 3 usunięć

Wyświetl plik

@ -1,7 +1,7 @@
import weakref import weakref
from itertools import count from itertools import count
from pathlib import Path from pathlib import Path
from typing import NamedTuple, Optional, List, Tuple from typing import NamedTuple, Optional, List, Tuple, Dict, Any
import time import time
import click import click
@ -23,8 +23,8 @@ class Config(NamedTuple):
master_wave: Optional[str] master_wave: Optional[str]
fps: int fps: int
# TODO algorithm and twiddle knobs
trigger: 'TriggerCfg' # Maybe overriden per Wave
render: 'RendererCfg' render: 'RendererCfg'
@ -43,6 +43,7 @@ def main(wave_dir: str, master_wave: Optional[str], fps: int):
wave_dir=wave_dir, wave_dir=wave_dir,
master_wave=master_wave, master_wave=master_wave,
fps=fps, fps=fps,
trigger=None, # todo
render=RendererCfg( # todo render=RendererCfg( # todo
1280, 720, 1280, 720,
samples_visible=1000, samples_visible=1000,
@ -113,13 +114,15 @@ class WaveConfig(NamedTuple):
wave_path: str wave_path: str
# TODO color # TODO color
# TODO wave-specific trigger options?
class Wave: class Wave:
def __init__(self, wcfg: WaveConfig, wave_path: str): def __init__(self, wcfg: WaveConfig, wave_path: str):
# TODO inject Trigger as dependency
self.cfg = wcfg self.cfg = wcfg
self.smp_s, self.data = wavfile.read(wave_path) self.smp_s, self.data = wavfile.read(wave_path)
# FIXME cfg
frames = 1 frames = 1
self.trigger = Trigger( self.trigger = Trigger(
wave=self, wave=self,
@ -137,6 +140,23 @@ class Wave:
return self.get_smp() / self.smp_s return self.get_smp() / self.smp_s
class TriggerCfg(NamedTuple):
name: str
args: List = []
kwargs: Dict[str, Any] = {}
def generate_trigger(self):
return TRIGGERS[self.name](*self.args, **self.kwargs)
TRIGGERS: Dict[str, type] = {}
def register_trigger(trigger_class: type):
TRIGGERS[trigger_class.__name__] = trigger_class
return trigger_class
@register_trigger
class Trigger: class Trigger:
def __init__(self, wave: Wave, scan_nsamp: int, align_amount: float): def __init__(self, wave: Wave, scan_nsamp: int, align_amount: float):
""" """