Understanding FX-PCS-VPS/WIN-E: Mitsubishi’s Positioning Control Software
def register_fx(self, name: str, processor: Callable, params: Dict = None): """Register an FX processor node""" self.nodes[name] = FXNode( name=name, enabled=True, params=params or {}, process_fn=processor ) self.logger.info(f"Registered FX: name") @staticmethod def tremolo(samples: np.ndarray, rate_hz: float = 5.0, depth: float = 0.8, samplerate: int = 48000, phase: float = 0.0) -> tuple: """Amplitude modulation tremolo effect""" t = np.arange(samples.shape[0]) / samplerate lfo = 0.5 + 0.5 * np.sin(2 * np.pi * rate_hz * t + phase) envelope = 1.0 - depth + depth * lfo new_phase = (phase + 2 * np.pi * rate_hz * samples.shape[0] / samplerate) % (2 * np.pi) return samples * envelope[:, np.newaxis], new_phaseThis software is intended for: