updates to tidal 1.4.x

master
alex 2019-08-22 11:12:49 +01:00
parent 9cd98d8a36
commit b27331c7f7
4 changed files with 29 additions and 11 deletions

View File

@ -6,6 +6,7 @@ module Common
, dirtToColour , dirtToColour
, fi , fi
, levels , levels
, levelsWhole
, remoteLocal , remoteLocal
, segmentator , segmentator
, toPattern , toPattern
@ -30,8 +31,21 @@ import qualified Sound.Tidal.Tempo as Tempo
fi :: (Integral a, Num b) => a -> b fi :: (Integral a, Num b) => a -> b
fi = fromIntegral fi = fromIntegral
arrangeEvents :: [Event b] -> [[Event b]] fitsWhole :: Event b -> [Event b] -> Bool
arrangeEvents = foldr addEvent [] fitsWhole event events = not $ any (\event' -> isJust $ subArc (wholeOrPart event) (wholeOrPart event')) events
addEventWhole :: Event b -> [[Event b]] -> [[Event b]]
addEventWhole e [] = [[e]]
addEventWhole e (level:ls)
| isAnalog e = level:ls
| fitsWhole e level = (e:level) : ls
| otherwise = level : addEventWhole e ls
arrangeEventsWhole :: [Event b] -> [[Event b]]
arrangeEventsWhole = foldr addEventWhole []
levelsWhole :: Pattern a -> [[Event a]]
levelsWhole pat = arrangeEventsWhole $ sortOn' ((\Arc{..} -> stop - start) . part) (queryArc pat (Arc 0 1))
fits :: Event b -> [Event b] -> Bool fits :: Event b -> [Event b] -> Bool
fits (Event _ part' _) events = not $ any (\Event{..} -> isJust $ subArc part' part) events fits (Event _ part' _) events = not $ any (\Event{..} -> isJust $ subArc part' part) events
@ -42,13 +56,16 @@ addEvent e (level:ls)
| fits e level = (e:level) : ls | fits e level = (e:level) : ls
| otherwise = level : addEvent e ls | otherwise = level : addEvent e ls
levels :: Pattern ColourD -> [[Event ColourD]] arrangeEvents :: [Event b] -> [[Event b]]
arrangeEvents = foldr addEvent []
levels :: Pattern a -> [[Event a]]
levels pat = arrangeEvents $ sortOn' ((\Arc{..} -> stop - start) . part) (queryArc pat (Arc 0 1)) levels pat = arrangeEvents $ sortOn' ((\Arc{..} -> stop - start) . part) (queryArc pat (Arc 0 1))
sortOn' :: Ord a => (b -> a) -> [b] -> [b] sortOn' :: Ord a => (b -> a) -> [b] -> [b]
sortOn' f = map snd . sortOn fst . map (\x -> let y = f x in y `seq` (y, x)) sortOn' f = map snd . sortOn fst . map (\x -> let y = f x in y `seq` (y, x))
-- | Recover depricated functions for 1.0.13 -- | Recover deprecated functions for 1.0.13
dirtToColour :: ControlPattern -> Pattern ColourD dirtToColour :: ControlPattern -> Pattern ColourD
dirtToColour = fmap (stringToColour . show) dirtToColour = fmap (stringToColour . show)
@ -61,8 +78,7 @@ stringToColour str = sRGB (r/256) (g/256) (b/256)
b = fromIntegral (i .&. 0x0000FF) b = fromIntegral (i .&. 0x0000FF)
segmentator :: Pattern ColourD -> Pattern [ColourD] segmentator :: Pattern ColourD -> Pattern [ColourD]
segmentator p@Pattern{..} = Pattern nature segmentator p@Pattern{..} = Pattern $ \(State arc@Arc{..} _)
$ \(State arc@Arc{..} _)
-> filter (\(Event _ (Arc start' stop') _) -> start' < stop && stop' > start) -> filter (\(Event _ (Arc start' stop') _) -> start' < stop && stop' > start)
$ groupByTime (segment' (queryArc p arc)) $ groupByTime (segment' (queryArc p arc))
@ -112,5 +128,5 @@ remoteLocal config time = do
_ -> error "wrong Socket" _ -> error "wrong Socket"
toPattern :: [Event ControlMap] -> ControlPattern toPattern :: [Event ControlMap] -> ControlPattern
toPattern evs = Pattern Digital $ const evs toPattern evs = Pattern $ const evs

View File

@ -48,7 +48,8 @@ renderLevel _ (num, level) = do
mapM_ drawEvent $ level mapM_ drawEvent $ level
C.restore C.restore
where where
drawEvent (Event (Arc sWhole eWhole) Arc{..} c) = do drawEvent e@(Event _ Arc{..} c) = do
let (Arc sWhole eWhole) = wholeOrPart e
let (RGB r g b) = toSRGB c let (RGB r g b) = toSRGB c
let x = (fromRational start) * totalWidth let x = (fromRational start) * totalWidth
let y = (fromIntegral num) * levelHeight let y = (fromIntegral num) * levelHeight

View File

@ -49,7 +49,8 @@ renderLevel _ (num, level) = do
mapM_ drawEvent $ level mapM_ drawEvent $ level
C.restore C.restore
where where
drawEvent (Event (Arc sWhole eWhole) (Arc sPart ePart) v) = do drawEvent e@(Event _ (Arc sPart ePart) v) = do
let (Arc sWhole eWhole) = wholeOrPart e
let (r, g, b) = (0,0,0) let (r, g, b) = (0,0,0)
let px = (fromRational sPart) * totalWidth let px = (fromRational sPart) * totalWidth
let wx = (fromRational sWhole) * totalWidth let wx = (fromRational sWhole) * totalWidth

View File

@ -1,5 +1,5 @@
name: tidal-vis name: tidal-vis
version: 1.0.14 version: 1.0.15
synopsis: Visual rendering for Tidal patterns and osc messages synopsis: Visual rendering for Tidal patterns and osc messages
homepage: http://yaxu.org/tidal/ homepage: http://yaxu.org/tidal/
license: GPL-3 license: GPL-3
@ -65,7 +65,7 @@ library
, SDL-ttf , SDL-ttf
, mtl , mtl
, network , network
, tidal >= 1.0.15 , tidal >= 1.0.15 && < 1.5
, time , time
, unagi-chan , unagi-chan