-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Pattern language for improvised music -- -- Tidal is a domain specific language for live coding pattern. @package tidal @version 0.7 module Sound.Tidal.MIDI.Device displayOutputDevices :: IO String displayDevices :: Show a => [(a, DeviceInfo)] -> String getOutputDevices :: [(a, DeviceInfo)] -> [(a, DeviceInfo)] getIndexedDevices :: IO [(Integer, DeviceInfo)] getDevices :: IO ([DeviceInfo]) getIDForDeviceName :: Num a => String -> IO (Maybe a) module Sound.Tidal.Utils enumerate :: [a] -> [(Int, a)] mapFst :: (a -> b) -> (a, c) -> (b, c) mapFsts :: (a -> b) -> [(a, c)] -> [(b, c)] mapSnd :: (a -> b) -> (c, a) -> (c, b) mapSnds :: (a -> b) -> [(c, a)] -> [(c, b)] wordsBy :: (a -> Bool) -> [a] -> [[a]] maybeRead :: String -> Maybe Double fst' :: (t, t1, t2) -> t snd' :: (t, t1, t2) -> t1 thd' :: (t, t1, t2) -> t2 mapFst' :: (a -> x) -> (a, b, c) -> (x, b, c) mapSnd' :: (b -> x) -> (a, b, c) -> (a, x, c) mapThd' :: (c -> x) -> (a, b, c) -> (a, b, x) mapFsts' :: (a -> x) -> [(a, b, c)] -> [(x, b, c)] mapSnds' :: (b -> x) -> [(a, b, c)] -> [(a, x, c)] mapThds' :: (c -> x) -> [(a, b, c)] -> [(a, b, x)] mapArcs :: (a -> a) -> [(a, a, x)] -> [(a, a, x)] getEnvDefault :: String -> String -> IO String mergelists :: [a] -> [a] -> [a] (!!!) :: [a] -> Int -> a module Sound.Tidal.Tempo data Tempo Tempo :: UTCTime -> Double -> Double -> Bool -> Double -> Tempo [at] :: Tempo -> UTCTime [beat] :: Tempo -> Double [cps] :: Tempo -> Double [paused] :: Tempo -> Bool [clockLatency] :: Tempo -> Double type ClientState = [Connection] getLatency :: IO Double getClockIp :: IO String getServerPort :: IO Int readTempo :: String -> Tempo logicalTime :: Tempo -> Double -> Double tempoMVar :: IO (MVar (Tempo)) beatNow :: Tempo -> IO (Double) clientApp :: MVar Tempo -> MVar Double -> ClientApp () sendCps :: Connection -> MVar Tempo -> MVar Double -> IO () connectClient :: Bool -> String -> MVar Tempo -> MVar Double -> IO () runClient :: IO ((MVar Tempo, MVar Double)) cpsUtils :: IO ((Double -> IO (), IO (Rational))) bpsUtils :: IO ((Double -> IO (), IO (Rational))) cpsSetter :: IO (Double -> IO ()) clocked :: (Tempo -> Int -> IO ()) -> IO () clockedTick :: Int -> (Tempo -> Int -> IO ()) -> IO () updateTempo :: Tempo -> Double -> IO (Tempo) addClient :: a -> [a] -> [a] removeClient :: Connection -> ClientState -> ClientState broadcast :: Text -> ClientState -> IO () startServer :: IO (ThreadId) serverApp :: MVar Tempo -> MVar ClientState -> ServerApp serverLoop :: Connection -> MVar Tempo -> MVar ClientState -> IO () instance GHC.Classes.Eq Network.WebSockets.Connection.Connection instance GHC.Show.Show Sound.Tidal.Tempo.Tempo module Sound.Tidal.Time -- | Time is represented by a rational number. Each natural number -- represents both the start of the next rhythmic cycle, and the end of -- the previous one. Rational numbers are used so that subdivisions of -- each cycle can be accurately represented. type Time = Rational -- | (s,e) :: Arc represents a time interval with a start and end -- value. { t : s <= t && t < e } type Arc = (Time, Time) -- | An Event is a value that occurs during the period given by the first -- Arc. The second one indicates the event's "domain of -- influence". These will often be the same, but many temporal -- transformations, such as rotation and scaling time, may result in arcs -- being split or truncated. In such cases, the first arc is preserved, -- but the second arc reflects the portion of the event which is -- relevant. type Event a = (Arc, Arc, a) -- | The starting point of the current cycle. A cycle occurs from each -- natural number to the next, so this is equivalent to floor. sam :: Time -> Time -- | The end point of the current cycle (and starting point of the next -- cycle) nextSam :: Time -> Time -- | The position of a time value relative to the start of its cycle. cyclePos :: Time -> Time -- | isIn a t is True iff t is inside the arc -- represented by a. isIn :: Arc -> Time -> Bool -- | Splits the given Arc into a list of Arcs, at cycle -- boundaries. arcCycles :: Arc -> [Arc] -- | Splits the given Arc into a list of Arcs, at cycle -- boundaries, but wrapping the arcs within the same cycle. arcCycles' :: Arc -> [Arc] -- | subArc i j is the arc that is the intersection of i -- and j. subArc :: Arc -> Arc -> Maybe Arc -- | Map the given function over both the start and end Time -- values of the given Arc. mapArc :: (Time -> Time) -> Arc -> Arc -- | Similar to mapArc but time is relative to the cycle (i.e. the -- sam of the start of the arc) mapCycle :: (Time -> Time) -> Arc -> Arc -- | Returns the `mirror image' of an Arc, used by -- Sound.Tidal.Pattern.rev. mirrorArc :: Arc -> Arc -- | The start time of the given Event eventStart :: Event a -> Time -- | The original onset of the given Event eventOnset :: Event a -> Time -- | The original offset of the given Event eventOffset :: Event a -> Time -- | The arc of the given Event eventArc :: Event a -> Arc -- | The midpoint of an Arc midPoint :: Arc -> Time hasOnset :: Event a -> Bool hasOffset :: Event a -> Bool onsetIn :: Arc -> Event a -> Bool offsetIn :: Arc -> Event a -> Bool module Sound.Tidal.Pattern -- | The pattern datatype, a function from a time Arc to -- Event values. For discrete patterns, this returns the events -- which are active during that time. For continuous patterns, events -- with values for the midpoint of the given Arc is returned. data Pattern a Pattern :: (Arc -> [Event a]) -> Pattern a [arc] :: Pattern a -> Arc -> [Event a] -- | show (p :: Pattern) returns a text string representing the -- event values active during the first cycle of the given pattern. showTime :: (Integral a, Show a) => Ratio a -> String showArc :: (Integral a, Integral a1, Show a, Show a1) => (Ratio a, Ratio a1) -> [Char] showEvent :: (Integral a, Integral a1, Show a, Show a1, Show a2) => ((Ratio a, Ratio a1), (Ratio a, Ratio a1), a2) -> [Char] -- | pure a returns a pattern with an event with value a, -- which has a duration of one cycle, and repeats every cycle. -- | mempty is a synonym for silence. | mappend -- is a synonym for overlay. unwrap :: Pattern (Pattern a) -> Pattern a -- | atom is a synonym for pure. atom :: a -> Pattern a -- | silence returns a pattern with no events. silence :: Pattern a -- | withQueryArc f p returns a new Pattern with function -- f applied to the Arc values passed to the original -- Pattern p. withQueryArc :: (Arc -> Arc) -> Pattern a -> Pattern a -- | withQueryTime f p returns a new Pattern with -- function f applied to the both the start and end -- Time of the Arc passed to Pattern -- p. withQueryTime :: (Time -> Time) -> Pattern a -> Pattern a -- | withResultArc f p returns a new Pattern with -- function f applied to the Arc values in the events -- returned from the original Pattern p. withResultArc :: (Arc -> Arc) -> Pattern a -> Pattern a -- | withResultTime f p returns a new Pattern with -- function f applied to the both the start and end -- Time of the Arc values in the events returned from -- the original Pattern p. withResultTime :: (Time -> Time) -> Pattern a -> Pattern a -- | overlay combines two Patterns into a new pattern, so -- that their events are combined over time. This is the same as the -- infix operator <>. overlay :: Pattern a -> Pattern a -> Pattern a -- | stack combines a list of Patterns into a new -- pattern, so that their events are combined over time. stack :: [Pattern a] -> Pattern a -- | append combines two patterns Patterns into a new -- pattern, so that the events of the second pattern are appended to -- those of the first pattern, within a single cycle append :: Pattern a -> Pattern a -> Pattern a -- | append' does the same as append, but over two -- cycles, so that the cycles alternate between the two patterns. append' :: Pattern a -> Pattern a -> Pattern a -- | cat returns a new pattern which interlaces the cycles of the -- given patterns, within a single cycle. It's the equivalent of -- append, but with a list of patterns. cat :: [Pattern a] -> Pattern a splitAtSam :: Pattern a -> Pattern a -- | slowcat does the same as cat, but maintaining the -- duration of the original patterns. It is the equivalent of -- append', but with a list of patterns. slowcat :: [Pattern a] -> Pattern a -- | listToPat turns the given list of values to a Pattern, which -- cycles through the list. listToPat :: [a] -> Pattern a -- | maybeListToPat is similar to listToPat, but allows -- values to be optional using the Maybe type, so that -- Nothing results in gaps in the pattern. maybeListToPat :: [Maybe a] -> Pattern a -- | run n returns a pattern representing a cycle of -- numbers from 0 to n-1. run :: (Enum a, Num a) => a -> Pattern a scan :: (Enum a, Num a) => a -> Pattern a -- | density returns the given pattern with density increased by -- the given Time factor. Therefore density 2 p will -- return a pattern that is twice as fast, and density (1%3) p -- will return one three times as slow. density :: Time -> Pattern a -> Pattern a -- | densityGap is similar to density but maintains its -- cyclic alignment. For example, densityGap 2 p would squash -- the events in pattern p into the first half of each cycle -- (and the second halves would be empty). densityGap :: Time -> Pattern a -> Pattern a -- | slow does the opposite of density, i.e. slow 2 -- p will return a pattern that is half the speed. slow :: Time -> Pattern a -> Pattern a -- | The <~ operator shifts (or rotates) a pattern to the left -- (or counter-clockwise) by the given Time value. For example -- (1%16) <~ p will return a pattern with all the events -- moved one 16th of a cycle to the left. (<~) :: Time -> Pattern a -> Pattern a -- | The ~> operator does the same as ~> but shifts -- events to the right (or clockwise) rather than to the left. (~>) :: Time -> Pattern a -> Pattern a brak :: Pattern a -> Pattern a iter :: Int -> Pattern a -> Pattern a -- | rev p returns p with the event positions in each -- cycle reversed (or mirrored). rev :: Pattern a -> Pattern a -- | palindrome p applies rev to p every other -- cycle, so that the pattern alternates between forwards and backwards. palindrome :: Pattern a -> Pattern a -- | when test f p applies the function f to p, -- but in a way which only affects cycles where the test -- function applied to the cycle number returns True. when :: (Int -> Bool) -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a whenT :: (Time -> Bool) -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a playWhen :: (Time -> Bool) -> Pattern a -> Pattern a playFor :: Time -> Time -> Pattern a -> Pattern a seqP :: [(Time, Time, Pattern a)] -> Pattern a -- | every n f p applies the function f to p, -- but only affects every n cycles. every :: Int -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a -- | foldEvery ns f p applies the function f to -- p, and is applied for each cycle in ns. foldEvery :: [Int] -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a -- | sig f takes a function from time to values, and turns it into -- a Pattern. sig :: (Time -> a) -> Pattern a -- | sinewave returns a Pattern of continuous -- Double values following a sinewave with frequency of one -- cycle, and amplitude from -1 to 1. sinewave :: Pattern Double -- | sine is a synonym for @sinewave. sine :: Pattern Double -- | sinerat is equivalent to sinewave for -- Rational values, suitable for use as Time offsets. sinerat :: Pattern Rational ratsine :: Pattern Rational -- | sinewave1 is equivalent to sinewave, but with -- amplitude from 0 to 1. sinewave1 :: Pattern Double -- | sine1 is a synonym for sinewave1. sine1 :: Pattern Double -- | sinerat1 is equivalent to sinerat, but with -- amplitude from 0 to 1. sinerat1 :: Pattern Rational -- | sineAmp1 d returns sinewave1 with its amplitude -- offset by d. sineAmp1 :: Double -> Pattern Double -- | sawwave is the equivalent of sinewave for sawtooth -- waves. sawwave :: Pattern Double -- | saw is a synonym for sawwave. saw :: Pattern Double -- | sawrat is the same as sawwave but returns -- Rational values suitable for use as Time offsets. sawrat :: Pattern Rational sawwave1 :: Pattern Double saw1 :: Pattern Double sawrat1 :: Pattern Rational -- | triwave is the equivalent of sinewave for triangular -- waves. triwave :: Pattern Double -- | tri is a synonym for triwave. tri :: Pattern Double -- | trirat is the same as triwave but returns -- Rational values suitable for use as Time offsets. trirat :: Pattern Rational triwave1 :: Pattern Double tri1 :: Pattern Double trirat1 :: Pattern Rational squarewave1 :: Pattern Double square1 :: Pattern Double squarewave :: Pattern Double square :: Pattern Double -- | envL is a Pattern of continuous Double -- values, representing a linear interpolation between 0 and 1 during the -- first cycle, then staying constant at 1 for all following cycles. -- Possibly only useful if you're using something like the retrig -- function defined in tidal.el. envL :: Pattern Double envLR :: Pattern Double envEq :: Pattern Double envEqR :: Pattern Double fadeOut :: Time -> Pattern a -> Pattern a fadeOut' :: Time -> Time -> Pattern a -> Pattern a fadeIn' :: Time -> Time -> Pattern a -> Pattern a fadeIn :: Time -> Pattern a -> Pattern a spread :: (a -> t -> Pattern b) -> [a] -> t -> Pattern b slowspread :: (a -> t -> Pattern b) -> [a] -> t -> Pattern b spread' :: (a -> Pattern b -> Pattern c) -> Pattern a -> Pattern b -> Pattern c filterValues :: (a -> Bool) -> Pattern a -> Pattern a filterOnsets :: Pattern a -> Pattern a filterStartInRange :: Pattern a -> Pattern a filterOnsetsInRange :: Pattern a -> Pattern a seqToRelOnsets :: Arc -> Pattern a -> [(Double, a)] segment :: Pattern a -> Pattern [a] segment' :: [Event a] -> [Event a] split :: Time -> [Event a] -> [Event a] points :: [Event a] -> [Time] groupByTime :: [Event a] -> [Event [a]] ifp :: (Int -> Bool) -> (Pattern a -> Pattern a) -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a rand :: Pattern Double timeToRand :: RealFrac r => r -> Double irand :: Int -> Pattern Int choose :: [a] -> Pattern a degradeBy :: Double -> Pattern a -> Pattern a unDegradeBy :: Double -> Pattern a -> Pattern a sometimesBy :: Double -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a sometimes :: (Pattern a -> Pattern a) -> Pattern a -> Pattern a often :: (Pattern a -> Pattern a) -> Pattern a -> Pattern a rarely :: (Pattern a -> Pattern a) -> Pattern a -> Pattern a almostNever :: (Pattern a -> Pattern a) -> Pattern a -> Pattern a almostAlways :: (Pattern a -> Pattern a) -> Pattern a -> Pattern a degrade :: Pattern a -> Pattern a -- | wedge t p p' combines patterns p and p' by -- squashing the p into the portion of each cycle given by -- t, and p' into the remainer of each cycle. wedge :: Time -> Pattern a -> Pattern a -> Pattern a whenmod :: Int -> Int -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a superimpose :: (Pattern a -> Pattern a) -> Pattern a -> Pattern a -- | splitQueries p wraps p to ensure that it does not -- get queries that span arcs. For example `arc p (0.5, 1.5)` would be -- turned into two queries, `(0.5,1)` and `(1,1.5)`, and the results -- combined. Being able to assume queries don't span cycles often makes -- transformations easier to specify. splitQueries :: Pattern a -> Pattern a trunc :: Time -> Pattern a -> Pattern a zoom :: Arc -> Pattern a -> Pattern a compress :: Arc -> Pattern a -> Pattern a sliceArc :: Arc -> Pattern a -> Pattern a within :: Arc -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a revArc :: Arc -> Pattern a -> Pattern a e :: Int -> Int -> Pattern a -> Pattern a e' :: Int -> Int -> Pattern a -> Pattern a index :: Real b => b -> Pattern b -> Pattern c -> Pattern c -- | prr rot (blen, vlen) beatPattern valuePattern: pattern -- rotate/replace. prrw :: (a -> b -> c) -> Int -> (Time, Time) -> Pattern a -> Pattern b -> Pattern c -- | prr rot (blen, vlen) beatPattern valuePattern: pattern -- rotate/replace. prr :: Int -> (Time, Time) -> Pattern a -> Pattern a -> Pattern a -- | preplace (blen, plen) beats values combines the timing of -- beats with the values of values. Other ways of -- saying this are: * sequential convolution * values quantized -- to beats. -- -- Examples: d1 $ sound $ preplace (1,1) "x [~ x] x x" "bd sn" d1 $ -- sound $ preplace (1,1) "x(3,8)" "bd sn" d1 $ sound $ "x(3,8)" ~ -- "bd sn" d1 $ sound "[jvbass jvbass:5]*3" |+| (shape $ "1 1 1 1 1" -- ~ "0.2 0.9") -- -- It is assumed the pattern fits into a single cycle. This works well -- with pattern literals, but not always with patterns defined elsewhere. -- In those cases use prr and provide desired pattern lengths: @ -- let p = slow 2 $ "x x x" -- -- d1 $ sound $ prr 0 (2,1) p "bd sn" @ preplace :: (Time, Time) -> Pattern a -> Pattern a -> Pattern a prep :: (Time, Time) -> Pattern a -> Pattern a -> Pattern a preplace1 :: Pattern a -> Pattern a -> Pattern a preplaceWith :: (a -> b -> c) -> (Time, Time) -> Pattern a -> Pattern b -> Pattern c prw :: (a -> b -> c) -> (Time, Time) -> Pattern a -> Pattern b -> Pattern c preplaceWith1 :: (a -> b -> c) -> Pattern a -> Pattern b -> Pattern c prw1 :: (a -> b -> c) -> Pattern a -> Pattern b -> Pattern c (<~>) :: Pattern a -> Pattern a -> Pattern a -- | protate len rot p rotates pattern p by rot -- beats to the left. len: length of the pattern, in cycles. -- Example: d1 $ every 4 (protate 2 (-1)) $ slow 2 $ sound "bd hh hh -- hh" protate :: Time -> Int -> Pattern a -> Pattern a prot :: Time -> Int -> Pattern a -> Pattern a prot1 :: Int -> Pattern a -> Pattern a -- | The <<~ operator rotates a unit pattern to the left, -- similar to <~, but by events rather than linear time. The -- timing of the pattern remains constant: -- --
--   d1 $ (1 <<~) $ sound "bd ~ sn hh"
--   -- will become
--   d1 $ sound "sn ~ hh bd"
--   
(<<~) :: Int -> Pattern a -> Pattern a (~>>) :: Int -> Pattern a -> Pattern a -- | pequal cycles p1 p2: quickly test if p1 and -- p2 are the same. pequal :: Ord a => Time -> Pattern a -> Pattern a -> Bool -- | discretise n p: samples the pattern p at a -- rate of n events per cycle. Useful for turning a continuous -- pattern into a discrete one. discretise :: Time -> Pattern a -> Pattern a -- | randcat ps: does a slowcat on the list of patterns -- ps but randomises the order in which they are played. randcat :: [Pattern a] -> Pattern a -- | toMIDI p: converts a pattern of human-readable pitch names -- into MIDI pitch numbers. For example, "cs4" will be rendered -- as "49". Omitting the octave number will create a pitch in -- the fifth octave ("cf" -> "cf5"). Pitches can be -- decorated using: -- -- -- -- This function also has a shorter alias tom. toMIDI :: Pattern String -> Pattern Int -- | tom p: Alias for toMIDI. tom :: Pattern String -> Pattern Int fit :: Int -> [a] -> Pattern Int -> Pattern a permstep :: RealFrac b => Int -> [a] -> Pattern b -> Pattern a -- | struct a b: structures pattern b in terms of -- a. struct :: Pattern String -> Pattern a -> Pattern a parseLMRule :: String -> [(String, String)] parseLMRule' :: String -> [(Char, String)] lindenmayer :: Int -> String -> String -> String unwrap' :: Pattern (Pattern a) -> Pattern a mask :: Pattern a -> Pattern b -> Pattern b enclosingArc :: [Arc] -> Arc stretch :: Pattern a -> Pattern a fit' :: Time -> Int -> Pattern Int -> Pattern Int -> Pattern a -> Pattern a instance GHC.Show.Show a => GHC.Show.Show (Sound.Tidal.Pattern.Pattern a) instance GHC.Base.Functor Sound.Tidal.Pattern.Pattern instance GHC.Base.Applicative Sound.Tidal.Pattern.Pattern instance GHC.Base.Monoid (Sound.Tidal.Pattern.Pattern a) instance GHC.Base.Monad Sound.Tidal.Pattern.Pattern module Sound.Tidal.Parse class Parseable a p :: Parseable a => String -> Pattern a type ColourD = Colour Double lexer :: GenTokenParser String u Identity braces :: ParsecT String u Identity a -> ParsecT String u Identity a brackets :: ParsecT String u Identity a -> ParsecT String u Identity a parens :: ParsecT String u Identity a -> ParsecT String u Identity a angles :: ParsecT String u Identity a -> ParsecT String u Identity a symbol :: String -> ParsecT String u Identity String natural :: ParsecT String u Identity Integer integer :: ParsecT String u Identity Integer float :: ParsecT String u Identity Double naturalOrFloat :: ParsecT String u Identity (Either Integer Double) data Sign Positive :: Sign Negative :: Sign applySign :: Num a => Sign -> a -> a sign :: Parser Sign intOrFloat :: Parser (Either Integer Double) r :: Parseable a => String -> Pattern a -> IO (Pattern a) parseRhythm :: Parser (Pattern a) -> String -> (Pattern a) pSequenceN :: Parser (Pattern a) -> GenParser Char () (Int, Pattern a) pSequence :: Parser (Pattern a) -> GenParser Char () (Pattern a) pSingle :: Parser (Pattern a) -> Parser (Pattern a) pPart :: Parser (Pattern a) -> Parser ([Pattern a]) pPolyIn :: Parser (Pattern a) -> Parser (Pattern a) pPolyOut :: Parser (Pattern a) -> Parser (Pattern a) pString :: Parser (String) pVocable :: Parser (Pattern String) pDouble :: Parser (Pattern Double) pBool :: Parser (Pattern Bool) pInt :: Parser (Pattern Int) midinote :: Parser Integer pColour :: Parser (Pattern ColourD) pMult :: Pattern a -> Parser (Pattern a) pRand :: Pattern a -> Parser (Pattern a) pE :: Pattern a -> Parser (Pattern a) pReplicate :: Pattern a -> Parser ([Pattern a]) pRatio :: Parser (Rational) pRational :: Parser (Pattern Rational) pDensity :: Parser (Rational) instance Sound.Tidal.Parse.Parseable GHC.Types.Double instance Sound.Tidal.Parse.Parseable GHC.Base.String instance Sound.Tidal.Parse.Parseable GHC.Types.Bool instance Sound.Tidal.Parse.Parseable GHC.Types.Int instance Sound.Tidal.Parse.Parseable GHC.Real.Rational instance Sound.Tidal.Parse.Parseable Sound.Tidal.Parse.ColourD instance Sound.Tidal.Parse.Parseable a => Data.String.IsString (Sound.Tidal.Pattern.Pattern a) module Sound.Tidal.Stream type ToMessageFunc = Shape -> Tempo -> Int -> (Double, ParamMap) -> Maybe (IO ()) data Backend a Backend :: ToMessageFunc -> Backend a [toMessage] :: Backend a -> ToMessageFunc data Param S :: String -> Maybe String -> Param [name] :: Param -> String [sDefault] :: Param -> Maybe String F :: String -> Maybe Double -> Param [name] :: Param -> String [fDefault] :: Param -> Maybe Double I :: String -> Maybe Int -> Param [name] :: Param -> String [iDefault] :: Param -> Maybe Int data Shape Shape :: [Param] -> Double -> Bool -> Shape [params] :: Shape -> [Param] [latency] :: Shape -> Double [cpsStamp] :: Shape -> Bool data Value VS :: String -> Value [svalue] :: Value -> String VF :: Double -> Value [fvalue] :: Value -> Double VI :: Int -> Value [ivalue] :: Value -> Int type ParamMap = Map Param (Maybe Value) type ParamPattern = Pattern ParamMap ticksPerCycle :: Num a => a defaultValue :: Param -> Maybe Value hasDefault :: Param -> Bool defaulted :: Shape -> [Param] defaultMap :: Shape -> ParamMap required :: Shape -> [Param] hasRequired :: Shape -> ParamMap -> Bool isSubset :: (Eq a) => [a] -> [a] -> Bool doAt :: RealFrac r => r -> IO () -> IO () logicalOnset' :: Integral a => Tempo -> a -> Double -> Double -> Double applyShape' :: Shape -> ParamMap -> Maybe ParamMap start :: Backend a -> Shape -> IO (MVar (ParamPattern)) state :: Backend a -> Shape -> IO (MVar (ParamPattern, [ParamPattern])) stream :: Backend a -> Shape -> IO (ParamPattern -> IO ()) streamcallback :: (ParamPattern -> IO ()) -> Backend a -> Shape -> IO (ParamPattern -> IO ()) onTick :: Backend a -> Shape -> MVar (ParamPattern) -> Tempo -> Int -> IO () onTick' :: Backend a -> Shape -> MVar (ParamPattern, [ParamPattern]) -> Tempo -> Int -> IO () make :: (a -> Value) -> Shape -> String -> Pattern a -> ParamPattern makeS :: Shape -> String -> Pattern String -> ParamPattern makeF :: Shape -> String -> Pattern Double -> ParamPattern makeI :: Shape -> String -> Pattern Int -> ParamPattern param :: Shape -> String -> Param merge :: ParamPattern -> ParamPattern -> ParamPattern (|=|) :: ParamPattern -> ParamPattern -> ParamPattern (#) :: ParamPattern -> ParamPattern -> ParamPattern mergeWith :: (Ord k, Applicative f) => (k -> a -> a -> a) -> f (Map k a) -> f (Map k a) -> f (Map k a) mergeNumWith :: Applicative f => (Int -> Int -> Int) -> (Double -> Double -> Double) -> f (Map Param (Maybe Value)) -> f (Map Param (Maybe Value)) -> f (Map Param (Maybe Value)) mergePlus :: Applicative f => f (Map Param (Maybe Value)) -> f (Map Param (Maybe Value)) -> f (Map Param (Maybe Value)) (|*|) :: ParamPattern -> ParamPattern -> ParamPattern (|+|) :: ParamPattern -> ParamPattern -> ParamPattern (|-|) :: ParamPattern -> ParamPattern -> ParamPattern (|/|) :: ParamPattern -> ParamPattern -> ParamPattern setter :: MVar (a, [a]) -> a -> IO () instance GHC.Classes.Ord Sound.Tidal.Stream.Value instance GHC.Classes.Eq Sound.Tidal.Stream.Value instance GHC.Show.Show Sound.Tidal.Stream.Value instance GHC.Classes.Eq Sound.Tidal.Stream.Param instance GHC.Classes.Ord Sound.Tidal.Stream.Param instance GHC.Show.Show Sound.Tidal.Stream.Param module Sound.Tidal.Params make' :: (a -> Value) -> Param -> Pattern a -> ParamPattern grp :: [Param] -> Pattern String -> ParamPattern sound :: Pattern String -> ParamPattern s :: Pattern String -> ParamPattern s_p :: Param n :: Pattern Int -> ParamPattern n_p :: Param nudge :: Pattern Double -> ParamPattern nudge_p :: Param offset :: Pattern Double -> ParamPattern offset_p :: Param begin :: Pattern Double -> ParamPattern begin_p :: Param end :: Pattern Double -> ParamPattern end_p :: Param speed :: Pattern Double -> ParamPattern speed_p :: Param pan :: Pattern Double -> ParamPattern pan_p :: Param velocity :: Pattern Double -> ParamPattern velocity_p :: Param vowel :: Pattern String -> ParamPattern vowel_p :: Param cutoff :: Pattern Double -> ParamPattern cutoff_p :: Param resonance :: Pattern Double -> ParamPattern resonance_p :: Param accelerate :: Pattern Double -> ParamPattern accelerate_p :: Param shape :: Pattern Double -> ParamPattern shape_p :: Param kriole :: Pattern Int -> ParamPattern kriole_p :: Param gain :: Pattern Double -> ParamPattern gain_p :: Param cut :: Pattern Int -> ParamPattern cut_p :: Param delay :: Pattern Double -> ParamPattern delay_p :: Param delaytime :: Pattern Double -> ParamPattern delaytime_p :: Param delayfeedback :: Pattern Double -> ParamPattern delayfeedback_p :: Param crush :: Pattern Double -> ParamPattern crush_p :: Param coarse :: Pattern Int -> ParamPattern coarse_p :: Param hcutoff :: Pattern Double -> ParamPattern hcutoff_p :: Param hresonance :: Pattern Double -> ParamPattern hresonance_p :: Param bandf :: Pattern Double -> ParamPattern bandf_p :: Param bandq :: Pattern Double -> ParamPattern bandq_p :: Param unit :: Pattern String -> ParamPattern unit_p :: Param loop :: Pattern Int -> ParamPattern loop_p :: Param channel :: Pattern Int -> ParamPattern channel_p :: Param room :: Pattern Double -> ParamPattern room_p :: Param size :: Pattern Double -> ParamPattern size_p :: Param dry :: Pattern Double -> ParamPattern dry_p :: Param orbit :: Pattern Int -> ParamPattern orbit_p :: Param module Sound.Tidal.OscStream data TimeStamp BundleStamp :: TimeStamp MessageStamp :: TimeStamp NoStamp :: TimeStamp data OscSlang OscSlang :: String -> TimeStamp -> Bool -> [Datum] -> OscSlang [path] :: OscSlang -> String [timestamp] :: OscSlang -> TimeStamp [namedParams] :: OscSlang -> Bool [preamble] :: OscSlang -> [Datum] type OscMap = Map Param (Maybe Datum) toOscDatum :: Value -> Maybe Datum toOscMap :: ParamMap -> OscMap send :: (Integral a, Transport t) => t -> OscSlang -> Shape -> Tempo -> a -> (Double, Map Param (Maybe Datum)) -> IO () makeConnection :: String -> Int -> OscSlang -> IO (ToMessageFunc) instance GHC.Classes.Eq Sound.Tidal.OscStream.TimeStamp module Sound.Tidal.Transition transition :: (IO Time) -> MVar (ParamPattern, [ParamPattern]) -> (Time -> [ParamPattern] -> ParamPattern) -> ParamPattern -> IO () histpan' :: Double -> Int -> Time -> [ParamPattern] -> ParamPattern histpan :: Int -> Time -> [ParamPattern] -> ParamPattern histpan2 :: Int -> Time -> [ParamPattern] -> ParamPattern superwash :: (Pattern a -> Pattern a) -> (Pattern a -> Pattern a) -> Time -> Time -> Time -> [Pattern a] -> Pattern a wash :: (Pattern a -> Pattern a) -> Time -> Time -> [Pattern a] -> Pattern a wait :: Time -> Time -> [ParamPattern] -> ParamPattern jumpIn' :: Int -> Time -> [ParamPattern] -> ParamPattern jumpIn :: Int -> Time -> [ParamPattern] -> ParamPattern jump :: Time -> [ParamPattern] -> ParamPattern jumpMod :: Int -> Time -> [ParamPattern] -> ParamPattern mortal :: Time -> Time -> Time -> [ParamPattern] -> ParamPattern module Sound.Tidal.MIDI.Params dur :: Pattern Double -> ParamPattern dur_p :: Param note :: Pattern Int -> ParamPattern note_p :: Param modwheel :: Pattern Double -> ParamPattern modwheel_p :: Param expression :: Pattern Double -> ParamPattern expression_p :: Param sustainpedal :: Pattern Double -> ParamPattern sustainpedal_p :: Param module Sound.Tidal.MIDI.Control type RangeMapFunc = (Int, Int) -> Double -> Int data ControlChange CC :: Param -> Int -> (Int, Int) -> Double -> RangeMapFunc -> ControlChange [param] :: ControlChange -> Param [midi] :: ControlChange -> Int [range] :: ControlChange -> (Int, Int) [vdefault] :: ControlChange -> Double [scalef] :: ControlChange -> RangeMapFunc NRPN :: Param -> Int -> (Int, Int) -> Double -> RangeMapFunc -> ControlChange [param] :: ControlChange -> Param [midi] :: ControlChange -> Int [range] :: ControlChange -> (Int, Int) [vdefault] :: ControlChange -> Double [scalef] :: ControlChange -> RangeMapFunc SysEx :: Param -> Int -> (Int, Int) -> Double -> RangeMapFunc -> ControlChange [param] :: ControlChange -> Param [midi] :: ControlChange -> Int [range] :: ControlChange -> (Int, Int) [vdefault] :: ControlChange -> Double [scalef] :: ControlChange -> RangeMapFunc data ControllerShape ControllerShape :: [ControlChange] -> Double -> ControllerShape [controls] :: ControllerShape -> [ControlChange] [latency] :: ControllerShape -> Double toShape :: ControllerShape -> Shape passThru :: (Int, Int) -> Double -> Int mapRange :: (Int, Int) -> Double -> Int mCC :: Param -> Int -> ControlChange mNRPN :: Param -> Int -> ControlChange mrNRPN :: Param -> Int -> (Int, Int) -> Double -> ControlChange toParams :: ControllerShape -> [Param] ctrlN :: Num b => ControllerShape -> Param -> Maybe b paramN :: ControllerShape -> Param -> Maybe ControlChange module Sound.Tidal.MidiStream midiStream :: MVar MidiDeviceMap -> String -> Int -> ControllerShape -> IO (ParamPattern -> IO ()) midiBackend :: MVar MidiDeviceMap -> String -> Int -> ControllerShape -> IO (Backend a) midiState :: MVar MidiDeviceMap -> String -> Int -> ControllerShape -> IO (MVar (ParamPattern, [ParamPattern])) midiSetters :: MVar (MidiDeviceMap) -> String -> Int -> ControllerShape -> IO Time -> IO (ParamPattern -> IO (), (Time -> [ParamPattern] -> ParamPattern) -> ParamPattern -> IO ()) midiDevices :: IO (MVar (MidiDeviceMap)) module Sound.Tidal.Synth synthController :: ControllerShape synth :: Shape module Sound.Tidal.SerialStream serialDevices :: IO (MVar (SerialDeviceMap)) serialBackend :: MVar SerialDeviceMap -> String -> IO (Backend a) blinken :: Shape blinkenStream :: MVar SerialDeviceMap -> String -> IO (ParamPattern -> IO ()) blinkenState :: MVar SerialDeviceMap -> String -> IO (MVar (ParamPattern, [ParamPattern])) blinkenSetters :: MVar (SerialDeviceMap) -> String -> IO Time -> IO (ParamPattern -> IO (), (Time -> [ParamPattern] -> ParamPattern) -> ParamPattern -> IO ()) light :: Pattern String -> ParamPattern module Sound.Tidal.SuperCollider supercollider :: [Param] -> Double -> Shape scSlang :: String -> OscSlang scBackend :: String -> IO (Backend a) scStream :: String -> [Param] -> Double -> IO (ParamPattern -> IO (), Shape) module Sound.Tidal.Dirt dirt :: Shape dirtSlang :: OscSlang superDirtSlang :: OscSlang superDirtBackend :: Int -> IO (Backend a) superDirtState :: Int -> IO (MVar (ParamPattern, [ParamPattern])) dirtBackend :: IO (Backend a) dirtStream :: IO (ParamPattern -> IO ()) dirtState :: IO (MVar (ParamPattern, [ParamPattern])) dirtSetters :: IO Time -> IO (ParamPattern -> IO (), (Time -> [ParamPattern] -> ParamPattern) -> ParamPattern -> IO ()) superDirtSetters :: IO Time -> IO (ParamPattern -> IO (), (Time -> [ParamPattern] -> ParamPattern) -> ParamPattern -> IO ()) superDirts :: [Int] -> IO [(ParamPattern -> IO (), (Time -> [ParamPattern] -> ParamPattern) -> ParamPattern -> IO ())] dirtstream :: t -> IO (ParamPattern -> IO ()) dirtToColour :: ParamPattern -> Pattern ColourD showToColour :: Show a => a -> ColourD datumToColour :: Value -> ColourD stringToColour :: String -> ColourD pick :: String -> Int -> String striate :: Int -> ParamPattern -> ParamPattern striate' :: Int -> Double -> ParamPattern -> ParamPattern striateO :: ParamPattern -> Int -> Double -> ParamPattern striateL :: Int -> Int -> ParamPattern -> ParamPattern striateL' :: Integral a => Int -> Double -> a -> ParamPattern -> ParamPattern metronome :: Pattern ParamMap clutchIn :: Time -> Time -> [Pattern a] -> Pattern a clutch :: Time -> [Pattern a] -> Pattern a xfadeIn :: Time -> Time -> [ParamPattern] -> ParamPattern xfade :: Time -> [ParamPattern] -> ParamPattern stut :: Integer -> Double -> Rational -> ParamPattern -> ParamPattern stut' :: Integer -> Time -> (ParamPattern -> ParamPattern) -> ParamPattern -> ParamPattern anticipateIn :: Time -> Time -> [ParamPattern] -> ParamPattern anticipate :: Time -> [ParamPattern] -> ParamPattern module Sound.Tidal.Strategies stutter :: Integral a1 => a1 -> Time -> Pattern a -> Pattern a echo :: Time -> Pattern a -> Pattern a triple :: Time -> Pattern a -> Pattern a quad :: Time -> Pattern a -> Pattern a double :: Time -> Pattern a -> Pattern a jux :: (ParamPattern -> Pattern ParamMap) -> ParamPattern -> Pattern ParamMap juxcut :: (ParamPattern -> Pattern ParamMap) -> ParamPattern -> Pattern ParamMap jux' :: [t -> ParamPattern] -> t -> Pattern ParamMap jux4 :: (ParamPattern -> Pattern ParamMap) -> ParamPattern -> Pattern ParamMap juxBy :: Double -> (ParamPattern -> Pattern ParamMap) -> ParamPattern -> Pattern ParamMap smash :: Int -> [Time] -> ParamPattern -> Pattern ParamMap smash' :: Int -> [Time] -> ParamPattern -> Pattern ParamMap samples :: Applicative f => f String -> f Int -> f String samples' :: Applicative f => f String -> f Int -> f String spreadf :: t -> t1 -> [a -> Pattern b] -> a -> Pattern b spin :: Int -> ParamPattern -> ParamPattern sawwave4 :: Pattern Double sinewave4 :: Pattern Double rand4 :: Pattern Double stackwith :: Pattern ParamMap -> [ParamPattern] -> Pattern ParamMap inside :: Time -> (Pattern a1 -> Pattern a) -> Pattern a1 -> Pattern a scale :: (Functor f, Num b) => b -> b -> f b -> f b chop :: Int -> ParamPattern -> ParamPattern gap :: Int -> ParamPattern -> ParamPattern chopArc :: Arc -> Int -> [Arc] en :: [(Int, Int)] -> Pattern String -> Pattern String weave :: Rational -> ParamPattern -> [ParamPattern] -> ParamPattern weave' :: Rational -> Pattern a -> [Pattern a -> Pattern a] -> Pattern a interlace :: ParamPattern -> ParamPattern -> ParamPattern step :: String -> String -> Pattern String steps :: [(String, String)] -> Pattern String step' :: [String] -> String -> Pattern String off :: Time -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a offadd :: Num a => Time -> a -> Pattern a -> Pattern a up :: Pattern Double -> ParamPattern ghost'' :: Time -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a ghost' :: t -> Pattern ParamMap -> Pattern ParamMap ghost :: Pattern ParamMap -> Pattern ParamMap slice :: Int -> Int -> ParamPattern -> ParamPattern randslice :: Int -> ParamPattern -> ParamPattern module Sound.Tidal.Context