diff options
Diffstat (limited to 'solo-tool-project')
| -rw-r--r-- | solo-tool-project/src/solo_tool/handlers.py | 17 | ||||
| -rw-r--r-- | solo-tool-project/src/solo_tool/midi_controller_launchpad_mini.py | 38 | ||||
| -rw-r--r-- | solo-tool-project/src/solo_tool/solo_tool.py | 1 | 
3 files changed, 25 insertions, 31 deletions
| diff --git a/solo-tool-project/src/solo_tool/handlers.py b/solo-tool-project/src/solo_tool/handlers.py index 0a4ee21..040928c 100644 --- a/solo-tool-project/src/solo_tool/handlers.py +++ b/solo-tool-project/src/solo_tool/handlers.py @@ -2,6 +2,14 @@ from collections.abc import Callable  from solo_tool.solo_tool import SoloTool +def playPause(st: SoloTool) -> Callable[[], None]: +    def f(): +        if st.isPlaying(): +            st.pause() +        else: +            st.play() +    return f +  def changeSong(st: SoloTool, delta: int) -> Callable[[], None]:      def f():          if st.song is None: @@ -33,3 +41,12 @@ def changeKeyPoint(st: SoloTool, delta: int) -> Callable[[], None]:          st.keyPoint = st.keyPoints[new]      return f +def rateAbsolute(st: SoloTool, value: float) -> Callable[[], None]: +    def f(): +        st.rate = value +    return f + +def volumeAbsolute(st: SoloTool, value: float) -> Callable[[], None]: +    def f(): +        st.volume = value +    return f diff --git a/solo-tool-project/src/solo_tool/midi_controller_launchpad_mini.py b/solo-tool-project/src/solo_tool/midi_controller_launchpad_mini.py index 6d2b5b2..9582a88 100644 --- a/solo-tool-project/src/solo_tool/midi_controller_launchpad_mini.py +++ b/solo-tool-project/src/solo_tool/midi_controller_launchpad_mini.py @@ -34,7 +34,7 @@ class MidiController:          self._handlers = {              96  : self._soloTool.stop,              114 : self._soloTool.jump, -            112 : self._playPause, +            112 : handlers.playPause(self._soloTool),              118 : handlers.changeKeyPoint(self._soloTool, -1),              119 : handlers.changeKeyPoint(self._soloTool, 1),              117 : handlers.positionToKeyPoint(self._soloTool), @@ -50,18 +50,18 @@ class MidiController:          for i in range(0, 8):              volume = round(MidiController.MIN_PLAYBACK_VOLUME + MidiController.PLAYBACK_VOLUME_STEP * i, 1) -            self._handlers[i] = self._createSetPlaybackVolumeCallback(volume) +            self._handlers[i] = handlers.volumeAbsolute(self._soloTool, volume)          for i, button in enumerate(range(16, 24)):              rate = round(MidiController.MIN_PLAYBACK_RATE + MidiController.PLAYBACK_RATE_STEP * i, 1) -            self._handlers[button] = self._createSetPlaybackRateCallback(rate) +            self._handlers[button] = handlers.rateAbsolute(self._soloTool, rate)      def connect(self):          self._midiWrapper.connect(MidiController.DEVICE_NAME, self._callback)          self._initialiseButtonLEDs()      def disconnect(self): -        self._allLEDsOff() +        self._setAllLEDs(MidiController.LED_OFF)          self._midiWrapper.disconnect()      def _callback(self, msg): @@ -71,24 +71,12 @@ class MidiController:          if msg.note in self._handlers:              handler = self._handlers[msg.note]() -    def _playPause(self): -        if self._soloTool.isPlaying(): -            self._soloTool.pause() -        else: -            self._soloTool.play() -      def _updatePlayPauseButton(self, playing):          if playing:              self._setButtonLED(7, 0, MidiController.LED_GREEN)          else:              self._setButtonLED(7, 0, MidiController.LED_YELLOW) -    def _updateToggleAbLimitEnableButton(self, enabled): -        if enabled: -            self._setButtonLED(6, 2, MidiController.LED_GREEN) -        else: -            self._setButtonLED(6, 2, MidiController.LED_RED) -      def _updateVolumeRow(self, volume):          t1 = int(round(volume / MidiController.PLAYBACK_VOLUME_STEP, 1))          t2 = int(round(MidiController.MIN_PLAYBACK_VOLUME / MidiController.PLAYBACK_VOLUME_STEP, 1)) @@ -101,16 +89,6 @@ class MidiController:          lastColumnLit = t1 - t2 + 1          self._lightRowUntilColumn(1, lastColumnLit, MidiController.LED_YELLOW) -    def _createSetPlaybackRateCallback(self, rate): -        def f(): -            self._soloTool.rate = rate -        return f - -    def _createSetPlaybackVolumeCallback(self, volume): -        def f(): -            self._soloTool.volume = volume -        return f -      def _setButtonLED(self, row, col, colour):          self._midiWrapper.sendMessage(MidiController.BUTTON_MATRIX[row][col], colour, MidiController.LIGHT_CONTROL_CHANNEL) @@ -119,13 +97,13 @@ class MidiController:          for col in range(0, 8):              self._setButtonLED(row, col, colours[col]) -    def _allLEDsOff(self): +    def _setAllLEDs(self, colour):          for row in range(0, 8):              for col in range(0, 8): -                self._setButtonLED(row, col, MidiController.LED_OFF) +                self._setButtonLED(row, col, colour)      def _initialiseButtonLEDs(self): -        self._allLEDsOff() +        self._setAllLEDs(MidiController.LED_OFF)          # volume buttons          self._updateVolumeRow(self._soloTool.volume) @@ -137,7 +115,7 @@ class MidiController:          self._setButtonLED(6, 0, MidiController.LED_RED)          self._updatePlayPauseButton(self._soloTool.isPlaying()) -        # AB control +        # Key point control          self._setButtonLED(7, 2, MidiController.LED_YELLOW)          self._setButtonLED(7, 6, MidiController.LED_RED)          self._setButtonLED(7, 7, MidiController.LED_GREEN) diff --git a/solo-tool-project/src/solo_tool/solo_tool.py b/solo-tool-project/src/solo_tool/solo_tool.py index 147a7b9..13e3c03 100644 --- a/solo-tool-project/src/solo_tool/solo_tool.py +++ b/solo-tool-project/src/solo_tool/solo_tool.py @@ -108,7 +108,6 @@ class SoloTool:      @position.setter      def position(self, new: float) -> None: -        # TODO stop playback before changing position?          if new is not None and new != self._player.getPlaybackPosition():              self._player.setPlaybackPosition(min(max(0.0, new), 1.0)) | 
