diff options
Diffstat (limited to 'solo-tool-project')
-rw-r--r-- | solo-tool-project/pyproject.toml | 4 | ||||
-rw-r--r-- | solo-tool-project/src/solo_tool/handlers.py | 14 | ||||
-rw-r--r-- | solo-tool-project/src/solo_tool/midi_controller_launchpad_mini.py | 4 | ||||
-rw-r--r-- | solo-tool-project/src/solo_tool/session_manager.py | 35 | ||||
-rw-r--r-- | solo-tool-project/src/solo_tool/solo_tool.py | 1 | ||||
-rw-r--r-- | solo-tool-project/test/midi_launchpad_mini_integrationtest.py | 8 | ||||
-rw-r--r-- | solo-tool-project/test/session_manager_unittest.py | 9 | ||||
-rw-r--r-- | solo-tool-project/test/test_session.json | 4 |
8 files changed, 46 insertions, 33 deletions
diff --git a/solo-tool-project/pyproject.toml b/solo-tool-project/pyproject.toml index 36d4891..7921be9 100644 --- a/solo-tool-project/pyproject.toml +++ b/solo-tool-project/pyproject.toml @@ -4,18 +4,18 @@ build-backend = "setuptools.build_meta" [project] name = "solo_tool" +version = "2.0" authors = [ { name = "Eddy Pedroni", email = "epedroni@pm.me" }, ] description = "A library for dissecting guitar solos" -requires-python = ">=3.12" +requires-python = ">=3.13" dependencies = [ "python-rtmidi", "sip", "mido", "python-vlc" ] -dynamic = ["version"] [project.optional-dependencies] dev = [ diff --git a/solo-tool-project/src/solo_tool/handlers.py b/solo-tool-project/src/solo_tool/handlers.py index 13e982b..0a4ee21 100644 --- a/solo-tool-project/src/solo_tool/handlers.py +++ b/solo-tool-project/src/solo_tool/handlers.py @@ -19,3 +19,17 @@ def positionToKeyPoint(st: SoloTool) -> Callable[[], None]: def f(): st.keyPoint = st.position return f + +def changeKeyPoint(st: SoloTool, delta: int) -> Callable[[], None]: + from bisect import bisect_right, bisect_left + def f(): + if delta > 0: + pivot = bisect_right(st.keyPoints, st.keyPoint) - 1 + elif delta < 0: + pivot = bisect_left(st.keyPoints, st.keyPoint) - 1 + else: + return + new = max(min(pivot + delta, len(st.keyPoints) - 1), 0) + st.keyPoint = st.keyPoints[new] + 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 3dc8ec6..6d2b5b2 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 @@ -35,8 +35,8 @@ class MidiController: 96 : self._soloTool.stop, 114 : self._soloTool.jump, 112 : self._playPause, - #118 : self._soloTool.previousStoredAbLimits, - #119 : self._soloTool.nextStoredAbLimits, + 118 : handlers.changeKeyPoint(self._soloTool, -1), + 119 : handlers.changeKeyPoint(self._soloTool, 1), 117 : handlers.positionToKeyPoint(self._soloTool), 48 : handlers.changeSong(self._soloTool, -1), 49 : handlers.seekRelative(self._soloTool, -0.25), diff --git a/solo-tool-project/src/solo_tool/session_manager.py b/solo-tool-project/src/solo_tool/session_manager.py index a4dabc0..9744b57 100644 --- a/solo-tool-project/src/solo_tool/session_manager.py +++ b/solo-tool-project/src/solo_tool/session_manager.py @@ -1,29 +1,30 @@ import json +from . import SoloTool -def loadSession(file, songList, abController): - jsonStr = file.read() - session = json.loads(jsonStr) +def loadSession(file: str) -> SoloTool: + with open(file, "r") as f: + session = json.load(f) - songList.clear() - abController.clear() + st = SoloTool() - for entry in session: + for i, entry in enumerate(session): songPath = entry["path"] - abLimits = entry["ab_limits"] - songList.append(songPath) + keyPoints = entry["key_points"] - if abLimits is not None: - for l in abLimits: - abController.storeLimits(l[0], l[1], songPath) + st.addSong(songPath) + st._keyPoints[i] = keyPoints + + return st -def saveSession(file, songList, abController): - session = list() +def saveSession(soloTool: SoloTool, file: str) -> None: + session = [] - for s in songList: + for i, song in enumerate(soloTool.songs): entry = { - "path": s, - "ab_limits" : abController.getStoredLimits(s) + "path": song, + "key_points" : soloTool._keyPoints[i] } session.append(entry) - file.write(json.dumps(session)) + with open(file, "w") as f: + json.dump(session, f) diff --git a/solo-tool-project/src/solo_tool/solo_tool.py b/solo-tool-project/src/solo_tool/solo_tool.py index 97c3495..147a7b9 100644 --- a/solo-tool-project/src/solo_tool/solo_tool.py +++ b/solo-tool-project/src/solo_tool/solo_tool.py @@ -1,6 +1,5 @@ import os -from .session_manager import loadSession, saveSession from .notifier import Notifier from .player_vlc import Player diff --git a/solo-tool-project/test/midi_launchpad_mini_integrationtest.py b/solo-tool-project/test/midi_launchpad_mini_integrationtest.py index 9588f9f..9e8c92e 100644 --- a/solo-tool-project/test/midi_launchpad_mini_integrationtest.py +++ b/solo-tool-project/test/midi_launchpad_mini_integrationtest.py @@ -167,16 +167,16 @@ def test_previousAndNextKeyPositionButtons(uut, midiWrapperMock, soloTool, playe assert soloTool.keyPoint == 0.0 midiWrapperMock.simulateInput(nextKeyPositionButton) - soloTool.keyPoint == 0.1 + assert soloTool.keyPoint == 0.1 midiWrapperMock.simulateInput(nextKeyPositionButton) - soloTool.keyPoint == 0.2 + assert soloTool.keyPoint == 0.2 midiWrapperMock.simulateInput(previousKeyPositionButton) - soloTool.keyPoint == 0.1 + assert soloTool.keyPoint == 0.1 midiWrapperMock.simulateInput(previousKeyPositionButton) - soloTool.keyPoint == 0.1 + assert soloTool.keyPoint == 0.1 def test_playbackRateButtons(uut, midiWrapperMock, soloTool, playerMock): playbackRateOptions = { diff --git a/solo-tool-project/test/session_manager_unittest.py b/solo-tool-project/test/session_manager_unittest.py index 0edc252..8658032 100644 --- a/solo-tool-project/test/session_manager_unittest.py +++ b/solo-tool-project/test/session_manager_unittest.py @@ -3,8 +3,6 @@ from json import loads import pathlib import shutil -pytestmark = pytest.mark.skip(reason="not yet implemented") - from solo_tool.session_manager import loadSession, saveSession from solo_tool.solo_tool import SoloTool @@ -25,16 +23,17 @@ def test_loadSession(prepared_tmp_path): assert soloTool.songs == ["test.flac", "test.mp3"] soloTool.song = 0 - assert soloTool.keyPositions == [] + assert soloTool.keyPoints == [] soloTool.song = 1 - assert soloTool.keyPositions == [0.1, 0.3] + assert soloTool.keyPoints == [0.1, 0.3] def test_saveSession(prepared_tmp_path): soloTool = SoloTool() soloTool.addSong("test.flac") soloTool.addSong("test.mp3") - soloTool.keyPositions = [0.1, 0.3] + soloTool.song = 1 + soloTool.keyPoints = [0.1, 0.3] testFile = prepared_tmp_path / "test_session_saved.json" saveSession(soloTool, testFile) diff --git a/solo-tool-project/test/test_session.json b/solo-tool-project/test/test_session.json index aed1e11..49c2d42 100644 --- a/solo-tool-project/test/test_session.json +++ b/solo-tool-project/test/test_session.json @@ -1,10 +1,10 @@ [ { "path" : "test.flac", - "key_positions" : null + "key_points" : [] }, { "path" : "test.mp3", - "key_positions" : [0.1, 0.3] + "key_points" : [0.1, 0.3] } ] |