Karya, built on 2018-03-16T03:22:32 (patch df7306861219887e676081746f4a4edfe05eb0b5)

Safe HaskellNone




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



initial_environ :: BaseTypes.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 Score.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