Skip to content

Commit 9ed269b

Browse files
committed
Add setCycle
Allows for jumping to any cycle Closes #709
1 parent 9b1e9bf commit 9ed269b

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

BootTidal.hs

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ let only = (hush >>)
2727
nudgeAll = streamNudgeAll tidal
2828
all = streamAll tidal
2929
resetCycles = streamResetCycles tidal
30+
setCycle = streamSetCycle tidal
3031
setcps = asap . cps
3132
getcps = streamGetcps tidal
3233
getnow = streamGetnow tidal

src/Sound/Tidal/Stream.hs

+4-1
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,10 @@ streamNudgeAll :: Stream -> Double -> IO ()
565565
streamNudgeAll s nudge = T.setNudge (sActionsMV s) nudge
566566

567567
streamResetCycles :: Stream -> IO ()
568-
streamResetCycles s =T.resetCycles (sActionsMV s)
568+
streamResetCycles s = streamSetCycle s 0
569+
570+
streamSetCycle :: Stream -> Time -> IO ()
571+
streamSetCycle s cyc = T.setCycle cyc (sActionsMV s)
569572

570573
hasSolo :: Map.Map k PlayState -> Bool
571574
hasSolo = (>= 1) . length . filter solo . Map.elems

src/Sound/Tidal/Tempo.hs

+8-6
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ instance Show O.UDP where
4545
type TransitionMapper = P.Time -> [P.ControlPattern] -> P.ControlPattern
4646

4747
data TempoAction =
48-
ResetCycles
48+
SetCycle P.Time
4949
| SingleTick P.ControlPattern
5050
| SetNudge Double
5151
| StreamReplace ID P.ControlPattern
@@ -76,8 +76,8 @@ data LinkOperations =
7676
cyclesToBeat :: CDouble -> CDouble
7777
}
7878

79-
resetCycles :: MVar [TempoAction] -> IO ()
80-
resetCycles actionsMV = modifyMVar_ actionsMV (\actions -> return $ ResetCycles : actions)
79+
setCycle :: P.Time -> MVar [TempoAction] -> IO ()
80+
setCycle cyc actionsMV = modifyMVar_ actionsMV (\actions -> return $ SetCycle cyc : actions)
8181

8282
setNudge :: MVar [TempoAction] -> Double -> IO ()
8383
setNudge actionsMV nudge = modifyMVar_ actionsMV (\actions -> return $ SetNudge nudge : actions)
@@ -209,20 +209,22 @@ clocked config stateMV mapMV actionsMV ac abletonLink
209209
return $! st'
210210
handleActions :: State -> [TempoAction] -> P.ValueMap -> IO (State, P.ValueMap)
211211
handleActions st [] streamState = return (st, streamState)
212-
handleActions st (ResetCycles : otherActions) streamState =
212+
handleActions st (SetCycle cyc : otherActions) streamState =
213213
do
214214
(st', streamState') <- handleActions st otherActions streamState
215215
sessionState <- Link.createAndCaptureAppSessionState abletonLink
216216

217217
now <- Link.clock abletonLink
218218
let startAt = now + processAhead
219-
Link.requestBeatAtTime sessionState 0 startAt quantum
219+
beat = (fromRational cyc) * (cBeatsPerCycle config)
220+
Link.requestBeatAtTime sessionState beat startAt quantum
220221
Link.commitAndDestroyAppSessionState abletonLink sessionState
222+
221223

222224
let st'' = st' {
223225
ticks = 0,
224226
start = now,
225-
nowArc = P.Arc 0 0
227+
nowArc = P.Arc cyc cyc
226228
}
227229

228230
return (st'', streamState')

0 commit comments

Comments
 (0)