Karya, built on 2020-11-26T21:03:17 (patch 23b5be2d53a9e8e7d6136cda5aae2849abe5cded)
Safe HaskellNone



Functions to do with performance. This is split off from Cmd.Play, which contains play Cmds and their direct support.



initial_environ :: DeriveT.Environ Source #

There are a few environ values that almost everything relies on.

cached_derive :: Cmd.M m => BlockId -> m Result Source #

Derive with the cache.

derive_block :: Cmd.M m => Cache -> ScoreDamage -> BlockId -> m Result Source #

Derive the contents of the given block to score events.

run :: Cmd.M m => Cache -> ScoreDamage -> Deriver a -> m (RunResult a) Source #

run_with_dynamic :: Cmd.M m => Dynamic -> Deriver a -> m (RunResult a) Source #

Run a derivation when you already know the Dynamic. This is the case when deriving at a certain point in the score via the TrackDynamic.

get_constant :: Cmd.M m => Ui.State -> Cache -> ScoreDamage -> m (Constant, InstrumentAliases) Source #

Create deriver configuration. This is the main place where Cmd level configuration is adapted to the deriver.


first_time :: [LEvent.LEvent Midi.WriteMessage] -> RealTime.RealTime Source #

The first timestamp from the msgs.

events_from Source #


:: Set ScoreT.Instrument

scan back for starts of these

-> RealTime.RealTime 
-> Vector.Vector Score.Event 
-> ([Score.Event], Vector.Vector Score.Event)

(extra events before start, events from start)

As a special case, a start <= 0 will get all events, including negative ones. This is so notes pushed before 0 won't be clipped on a play from 0.

overlapping_events :: RealTime.RealTime -> Vector.Vector Score.Event -> [Score.Event] Source #

How to know how far back to go? Impossible to know! Well, I could look up overlapping ui events, then map the earliest time to RealTime, and start searching there. But for now scanning from the beginning should be fast enough.

mute and solo