From 43872dc6b365bbcc91d47d85c780b357a78b98c8 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 21 Jan 2021 21:24:37 +0000 Subject: [PATCH] panbus seems to work now ref #762 --- src/Sound/Tidal/Params.hs | 5 +++++ src/Sound/Tidal/Stream.hs | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Sound/Tidal/Params.hs b/src/Sound/Tidal/Params.hs index 1b0b566ef..47b0952e2 100644 --- a/src/Sound/Tidal/Params.hs +++ b/src/Sound/Tidal/Params.hs @@ -21,6 +21,7 @@ module Sound.Tidal.Params where import qualified Data.Map.Strict as Map import Sound.Tidal.Pattern +import Sound.Tidal.Core ((#)) import Sound.Tidal.Utils import Data.Maybe (fromMaybe) import Data.Word (Word8) @@ -330,6 +331,10 @@ overshape = pF "overshape" -- | a pattern of numbers between 0 and 1, from left to right (assuming stereo), once round a circle (assuming multichannel) pan :: Pattern Double -> ControlPattern pan = pF "pan" + +panbus :: Pattern Int -> Pattern Double -> ControlPattern +panbus busid pat = (pF "pan" pat) # (pI "^pan" busid) + -- | a pattern of numbers between -inf and inf, which controls how much multichannel output is fanned out (negative is backwards ordering) panspan :: Pattern Double -> ControlPattern panspan = pF "span" diff --git a/src/Sound/Tidal/Stream.hs b/src/Sound/Tidal/Stream.hs index c0cc97705..eb3f4acfe 100644 --- a/src/Sound/Tidal/Stream.hs +++ b/src/Sound/Tidal/Stream.hs @@ -306,10 +306,11 @@ playStack pMap = stack $ map pattern active toOSC :: Double -> [Int] -> Event ControlMap -> T.Tempo -> OSC -> [(Double, Bool, O.Message)] toOSC latency busses e tempo osc@(OSC _ _) = catMaybes (playmsg:busmsgs) - where (busmap, playmap) = Map.partitionWithKey (\k _ -> null k || head k /= '^') $ value e + where (playmap, busmap) = Map.partitionWithKey (\k _ -> null k || head k /= '^') $ value e -- swap in bus ids where needed playmap' = Map.union (Map.mapKeys tail $ Map.map (\(VI i) -> VS ('c':(show i))) busmap) playmap - playmsg | eventHasOnset e = do vs <- toData osc addExtra + addExtra = Map.union playmap' extra + playmsg | eventHasOnset e = do vs <- toData osc (e {value = addExtra}) mungedPath <- substitutePath (path osc) playmap' return (ts, False, -- bus message ? @@ -331,12 +332,11 @@ toOSC latency busses e tempo osc@(OSC _ _) off = sched tempo $ stop $ wholeOrPart e delta = off - on -- If there is already cps in the event, the union will preserve that. - addExtra = (\v -> (Map.union v extra)) <$> e extra = Map.fromList [("cps", (VF (T.cps tempo))), ("delta", VF delta), ("cycle", VF (fromRational $ start $ wholeOrPart e)) ] - nudge = fromJust $ getF $ fromMaybe (VF 0) $ Map.lookup "nudge" $ value e + nudge = fromJust $ getF $ fromMaybe (VF 0) $ Map.lookup "nudge" $ playmap ts = on + nudge + latency tsPart = onPart + nudge + latency