updates to tidal 1.4.x
parent
9cd98d8a36
commit
b27331c7f7
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue