Portability | non-portable (TF,GNTD) |
---|---|
Stability | experimental |
Maintainer | hans@hanshoglund.se |
Safe Haskell | None |
- module Music.Time.Duration
- class HasDuration a => HasPosition a where
- era :: (HasPosition a, Transformable a) => Lens' a Span
- position :: (HasPosition a, Transformable a) => Duration -> Lens' a Time
- onset :: (HasPosition a, Transformable a) => Lens' a Time
- midpoint :: (HasPosition a, Transformable a) => Lens' a Time
- offset :: (HasPosition a, Transformable a) => Lens' a Time
- preOnset :: (HasPosition a, Transformable a) => Lens' a Time
- postOffset :: (HasPosition a, Transformable a) => Lens' a Time
- postOnset :: (HasPosition a, Transformable a) => Lens' a Time
- startAt :: (Transformable a, HasPosition a) => Time -> a -> a
- stopAt :: (Transformable a, HasPosition a) => Time -> a -> a
- placeAt :: (Transformable a, HasPosition a) => Duration -> Time -> a -> a
- _setEra :: (HasPosition a, Transformable a) => Span -> a -> a
- _getEra :: HasPosition a => a -> Span
Documentation
module Music.Time.Duration
The HasPosition class
class HasDuration a => HasPosition a whereSource
Class of values that have a position in time.
Many values such as notes, envelopes etc can in fact have many positions such as onset,
attack point, offset, decay point time etc. Rather than having separate methods for a
discrete set of cases, this class provides an interpolation from a local position to
a global position. While the local position goes from 0 to 1, the global position
goes from the onset
to the offset
of the value.
For instantaneous values, a suitable instance is:
_position
x =const
t
For values with an onset and offset we can use alerp
:
_position
x =alerp
(_onset
x) (_offset
x)
_position :: a -> Duration -> TimeSource
Return the onset of the given value, or the value between the attack and decay phases.
_onset, _offset :: a -> TimeSource
Return the onset of the given value, or the value between the attack and decay phases.
HasPosition Span | |
HasPosition Time | |
(HasPosition a, HasDuration a) => HasPosition [a] | |
HasPosition a => HasPosition (Bound a) | |
HasPosition a => HasPosition (AddMeta a) | |
HasPosition (Delayed a) | |
HasPosition (Track a) | |
HasPosition (Note a) | |
HasPosition (Score a) |
Inspecting position
era :: (HasPosition a, Transformable a) => Lens' a SpanSource
A lens to the position
position :: (HasPosition a, Transformable a) => Duration -> Lens' a TimeSource
Position of the given value.
Specific positions
onset :: (HasPosition a, Transformable a) => Lens' a TimeSource
Onset of the given value.
midpoint :: (HasPosition a, Transformable a) => Lens' a TimeSource
Midpoint of the given value, or the value between the decay and sustain phases.
offset :: (HasPosition a, Transformable a) => Lens' a TimeSource
Onset of the given value.
preOnset :: (HasPosition a, Transformable a) => Lens' a TimeSource
Pre-onset of the given value, or the value right before the attack phase.
postOffset :: (HasPosition a, Transformable a) => Lens' a TimeSource
Post-offset of the given value, or the value right after the release phase.
Deprecated
postOnset :: (HasPosition a, Transformable a) => Lens' a TimeSource
Deprecated: Use midpoint
Moving to absolute positions
startAt :: (Transformable a, HasPosition a) => Time -> a -> aSource
Move a value forward in time.
stopAt :: (Transformable a, HasPosition a) => Time -> a -> aSource
Move a value forward in time.
placeAt :: (Transformable a, HasPosition a) => Duration -> Time -> a -> aSource
Internal
_setEra :: (HasPosition a, Transformable a) => Span -> a -> aSource
Place a value over the given span.
placeAt s t
places the given thing so that x^.place = s
_getEra :: HasPosition a => a -> SpanSource