kopia lustrzana https://github.com/corrscope/corrscope
pull/357/head
rodzic
bf30acefc0
commit
8729e46cdf
ovgenpy
|
@ -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
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Ładowanie…
Reference in New Issue