module Harmonic.Interface.Tidal.Motif
(
(>:<)
, mirror
, retro
, retroN
) where
import Sound.Tidal.Context
import Harmonic.Interface.Tidal.Form (beatsPerBar)
infixl 4 >:<
(>:<) :: Pattern Bool -> Pattern Int -> Pattern Int
>:< :: Pattern Bool -> Pattern Int -> Pattern Int
(>:<) = Pattern Bool -> Pattern Int -> Pattern Int
forall a. Pattern Bool -> Pattern a -> Pattern a
struct
mirror :: Int -> Pattern Int -> Pattern Int
mirror :: Int -> Pattern Int -> Pattern Int
mirror Int
axis = (Int -> Int) -> Pattern Int -> Pattern Int
forall a b. (a -> b) -> Pattern a -> Pattern b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Int
d -> Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
axis Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
d)
retroN :: Pattern Time -> Pattern a -> Pattern a
retroN :: forall a. Pattern Time -> Pattern a -> Pattern a
retroN Pattern Time
cyc = Pattern Time -> Pattern a -> Pattern a
forall a. Pattern Time -> Pattern a -> Pattern a
slow Pattern Time
cyc (Pattern a -> Pattern a)
-> (Pattern a -> Pattern a) -> Pattern a -> Pattern a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pattern a -> Pattern a
forall a. Pattern a -> Pattern a
rev (Pattern a -> Pattern a)
-> (Pattern a -> Pattern a) -> Pattern a -> Pattern a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pattern Time -> Pattern a -> Pattern a
forall a. Pattern Time -> Pattern a -> Pattern a
fast Pattern Time
cyc
retro :: Pattern a -> Pattern a
retro :: forall a. Pattern a -> Pattern a
retro = Pattern Time -> Pattern a -> Pattern a
forall a. Pattern Time -> Pattern a -> Pattern a
retroN (Double -> Pattern Time
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
beatsPerBar)