import mido from collections.abc import Callable from . import handlers from .solo_tool import SoloTool class ActitionController: class _MidoMidiWrapper: def __init__(self): self._callback = None self._inPort = mido.open_input("f_midi") self._inPort.callback = self._midoCallback def setCallback(self, callback: Callable[[int, int], None]) -> None: self._callback = callback def _midoCallback(self, msg: mido.Message) -> None: if msg.type != "control_change": return if self._callback: self._callback(msg.control, msg.channel) def __init__(self, midiWrapperOverride=None): self._handlers = {} if midiWrapperOverride: self._midiWrapper = midiWrapperOverride else: self._midiWrapper = ActitionController._MidoMidiWrapper() self._midiWrapper.setCallback(self._callback) def _callback(self, control: int, channel: int) -> None: if channel != 15: return if control in self._handlers: self._handlers[control]() def setSoloTool(self, soloTool: SoloTool) -> None: self._handlers = { 102: handlers.seekAbsolute(soloTool, 0.0), 103: handlers.positionToKeyPoint(soloTool), 104: soloTool.jump, 105: handlers.playPause(soloTool) }