Time
Documentation
type Time = Rational
Time is rational
data ArcF a
An arc of time, with a start time (or onset) and a stop time (or offset)
Constructors
Arc | |
Instances
Instances details
Applicative ArcF | |
Defined in Sound.Tidal.Time Methods
| |
Functor ArcF | |
Defined in Sound.Tidal.Time Methods
| |
Show Arc | |
Defined in Sound.Tidal.Show Methods
| |
Generic (ArcF a) | |
Defined in Sound.Tidal.Time Associated Types
| |
Num a => Num (ArcF a) | |
Defined in Sound.Tidal.Time Methods
| |
Fractional a => Fractional (ArcF a) | |
Defined in Sound.Tidal.Time Methods
| |
Show a => Show (Event a) | |
Defined in Sound.Tidal.Show Methods
| |
Show a => Show (ArcF a) | |
Defined in Sound.Tidal.Time Methods
| |
NFData a => NFData (ArcF a) | |
Defined in Sound.Tidal.Time Methods
| |
Eq a => Eq (ArcF a) | |
Defined in Sound.Tidal.Time Methods
| |
Ord a => Ord (ArcF a) | |
Defined in Sound.Tidal.Time Methods
| |
type Rep (ArcF a) | |
Defined in Sound.Tidal.Time type Rep (ArcF a) = D1 ('MetaData "ArcF" "Sound.Tidal.Time" "tidal-1.9.5-7AHiE4IEnHeHqbwX3gka7l" 'False) (C1 ('MetaCons "Arc" 'PrefixI 'True) (S1 ('MetaSel ('Just "start") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Just "stop") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) |
type Arc = ArcF Time
Utility functions - Time
sam :: Time -> Time
The sam
(start of cycle) for the given time value. Cycles have duration 1, so every integer Time value divides two cycles.
toTime :: Real a => a -> Rational
Turns a number into a (rational) time value. An alias for toRational
.
fromTime :: Fractional a => Time -> a
Turns a (rational) time value into another number. An alias for fromRational
.
nextSam :: Time -> Time
The end point of the current cycle (and starting point of the next cycle)
cyclePos :: Time -> Time
The position of a time value relative to the start of its cycle.
Utility functions - Arc
hull :: Arc -> Arc -> Arc
convex hull union
subArc :: Arc -> Arc -> Maybe Arc
subArc i j
is the timespan that is the intersection of i
and j
. intersection The definition is a bit fiddly as results might be zero-width, but not at the end of an non-zero-width arc - e.g. (0,1) and (1,2) do not intersect, but (1,1) (1,1) does.
subMaybeArc :: Maybe Arc -> Maybe Arc -> Maybe (Maybe Arc)
sect :: Arc -> Arc -> Arc
Simple intersection of two arcs
timeToCycleArc :: Time -> Arc
The Arc returned is the cycle that the Time falls within.
Edge case: If the Time is an integer, the Arc claiming it is the one starting at that Time, not the previous one ending at that Time.
cycleArc :: Arc -> Arc
Shifts an Arc to one of equal duration that starts within cycle zero. (Note that the output Arc probably does not start *at* Time 0 — that only happens when the input Arc starts at an integral Time.)
cyclesInArc :: Integral a => Arc -> [a]
Returns the numbers of the cycles that the input Arc
overlaps (excluding the input Arc
’s endpoint, unless it has duration 0 — see “Edge cases” below). (The “cycle number” of an Arc
is equal to its start value. Thus, for instance, cyclesInArc (Arc 0 1.5) == [0,1]
.)
Edge cases: > cyclesInArc $ Arc 0 1.0001 == [0,1] > cyclesInArc $ Arc 0 1 == [0] — the endpoint is excluded > cyclesInArc $ Arc 1 1 == [1] — unless the Arc has duration 0
PITFALL: Don’t be fooled by the name. The output cycles are not necessarily completely contained in the input Arc
, but they definitely overlap it, and they include every cycle that overlaps it.
cycleArcsInArc :: Arc -> [Arc]
This provides exactly the same information as cyclesInArc
, except that this represents its output as Arc
s, whereas cyclesInArc
represents the same information as integral indices. (The Arc
from 0 to 1 corresponds to the index 0, the one from 1 to 2 has index 1, etc.)
arcCycles :: Arc -> [Arc]
Splits the given Arc
into a list of Arc
s, at cycle boundaries.
arcCyclesZW :: Arc -> [Arc]
Like arcCycles, but returns zero-width arcs
mapCycle :: (Time -> Time) -> Arc -> Arc
Similar to fmap
but time is relative to the cycle (i.e. the sam of the start of the arc)
isIn :: Arc -> Time -> Bool
isIn a t
is True
if t
is inside the arc represented by a
.