pull/357/head
nyanpasu64 2018-07-20 14:19:43 -07:00
rodzic bf30acefc0
commit 8729e46cdf
3 zmienionych plików z 39 dodań i 18 usunięć

22
ovgenpy/channel.py 100644
Wyświetl plik

@ -0,0 +1,22 @@
from typing import NamedTuple, TYPE_CHECKING, Any, Optional
if TYPE_CHECKING:
from ovgenpy.triggers import Trigger
from ovgenpy.wave import Wave
from ovgenpy.ovgenpy import Config
class ChannelConfig(NamedTuple):
_main_cfg: 'Config'
visible_ms: Optional[int]
scan_ratio: Optional[float]
line_color: Any
background_color: Any
class Channel:
def __init__(self, cfg: ChannelConfig, wave: 'Wave', trigger: 'Trigger'):
self.cfg = cfg
self.wave = wave
self.trigger = trigger

Wyświetl plik

@ -5,6 +5,7 @@ from pathlib import Path
from typing import NamedTuple, Optional, List
import click
from ovgenpy.channel import Channel
from ovgenpy.renderer import MatplotlibRenderer, RendererConfig
from ovgenpy.triggers import TriggerConfig, CorrelationTrigger
@ -71,7 +72,8 @@ class Ovgen:
def __init__(self, cfg: Config):
self.cfg = cfg
self.waves: List[Wave] = []
self.nwaves: int = None
self.channels: List[Channel] = []
self.nchan: int = None
def write(self):
self._load_waves() # self.waves =
@ -82,20 +84,22 @@ class Ovgen:
for idx, path in enumerate(wave_dir.glob('*.wav')):
wcfg = WaveConfig(
wave_path=str(path)
# fixme
)
wave = Wave(wcfg, str(path))
self.waves.append(wave)
trigger = self.cfg.trigger(
wave=wave,
scan_nsamp=round(
self.cfg.time_visible_s * self.cfg.scan_ratio * wave.smp_s),
# I tried extracting variable, but got confused as a result
)
wave.set_trigger(trigger)
self.waves.append(wave)
channel = Channel(None, wave, trigger)
self.channels.append(channel)
self.nwaves = len(self.waves)
self.nchan = len(self.waves)
def _render(self):
# Calculate number of frames (TODO master file?)
@ -105,7 +109,7 @@ class Ovgen:
nframes = fps * self.waves[0].get_s()
nframes = int(nframes) + 1
renderer = MatplotlibRenderer(self.cfg.render, self.nwaves)
renderer = MatplotlibRenderer(self.cfg.render, self.nchan)
if RENDER_PROFILING:
begin = time.perf_counter()
@ -116,13 +120,11 @@ class Ovgen:
datas = []
# Get data from each wave
for wave in self.waves:
for wave, channel in zip(self.waves, self.channels):
sample = round(wave.smp_s * time_seconds)
region_len = round(wave.smp_s * time_visible_s)
trigger_sample = wave.trigger.get_trigger(sample)
print(f'- {trigger_sample}')
trigger_sample = channel.trigger.get_trigger(sample)
datas.append(wave.get_around(trigger_sample, region_len))
print(frame)

Wyświetl plik

@ -8,10 +8,11 @@ if TYPE_CHECKING:
class WaveConfig(NamedTuple):
wave_path: str
# TODO color
amplification: float
# TODO wave-specific trigger options?
def dummy_wave_config() -> WaveConfig:
return WaveConfig(amplification=1)
FLOAT = np.single
@ -19,10 +20,9 @@ FLOAT = np.single
class Wave:
def __init__(self, wcfg: Optional[WaveConfig], wave_path: str):
self.cfg = wcfg
self.cfg = wcfg or dummy_wave_config() # type: WaveConfig
self.smp_s, self.data = wavfile.read(wave_path, mmap=True) # type: int, np.ndarray
self.nsamp = len(self.data)
self.trigger: Trigger = None
# Calculate scaling factor.
dtype = self.data.dtype
@ -91,9 +91,6 @@ class Wave:
begin = end - region_len
return self.get(begin, end)
def set_trigger(self, trigger: 'Trigger'):
self.trigger = trigger
def get_s(self) -> float:
"""
:return: time (seconds)