Karya, built on 2023-08-29T07:47:28 (patch 7a412d5d6ba4968ca4155ef276a062ccdeb9109a)
Safe HaskellSafe-Inferred

Cmd.PlayUtil

Description

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

Synopsis

Documentation

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 #

eval_with_dynamic :: Cmd.M m => Dynamic -> Deriver a -> m a Source #

run_with_dynamic but extract just the value.

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

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 #

Arguments

:: 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