Karya, built on 2022-03-21T01:30:44 (patch 89d1651424c35e564138d93424a157ff87457245)
Safe HaskellSafe-Inferred



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.


perform_raw :: Cmd.M m => [Score.Event] -> m Perform.MidiEvents Source #

Perform midi only, from time 0, without mutes.

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