aboutsummaryrefslogtreecommitdiffstats
path: root/solo-tool-project/src/solo_tool
diff options
context:
space:
mode:
Diffstat (limited to 'solo-tool-project/src/solo_tool')
-rw-r--r--solo-tool-project/src/solo_tool/handlers.py14
-rw-r--r--solo-tool-project/src/solo_tool/midi_controller_launchpad_mini.py4
-rw-r--r--solo-tool-project/src/solo_tool/session_manager.py35
-rw-r--r--solo-tool-project/src/solo_tool/solo_tool.py1
4 files changed, 34 insertions, 20 deletions
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