LilyPond Internals Reference: 2.1.27 Voice

### 2.1.27 Voice

Corresponds to a voice on a staff. This context handles the conversion of dynamic signs, stems, beams, super- and subscripts, slurs, ties, and rests.

You have to instantiate this explicitly if you want to have multiple voices on the same staff.

This context creates the following layout object(s):

Arpeggio, Beam, BendAfter, BreathingSign, ClusterSpanner, ClusterSpannerBeacon, CombineTextScript, Dots, DoublePercentRepeat, DoublePercentRepeatCounter, DoubleRepeatSlash, DynamicLineSpanner, DynamicText, DynamicTextSpanner, Fingering, FootnoteItem, FootnoteSpanner, Glissando, Hairpin, InstrumentSwitch, LaissezVibrerTie, LaissezVibrerTieColumn, LigatureBracket, MultiMeasureRest, MultiMeasureRestNumber, MultiMeasureRestText, NoteColumn, NoteHead, NoteSpacing, PercentRepeat, PercentRepeatCounter, PhrasingSlur, RepeatSlash, RepeatTie, RepeatTieColumn, Rest, Script, ScriptColumn, Slur, Stem, StemTremolo, StringNumber, StrokeFinger, TextScript, TextSpanner, Tie, TieColumn, TrillPitchAccidental, TrillPitchGroup, TrillPitchHead, TrillSpanner, TupletBracket, TupletNumber and VoiceFollower.

This context is a ‘bottom’ context; it cannot contain other contexts.

This context is built from the following engraver(s):

> `Arpeggio_engraver`

>   Generate an Arpeggio symbol.

>   Music types accepted:

>   arpeggio-event

>   This engraver creates the following layout object(s):

>   Arpeggio.

> `Auto_beam_engraver`

>   Generate beams based on measure characteristics and observed Stems. Uses `baseMoment`, `beatStructure`, `beamExceptions`, `measureLength`, and `measurePosition` to decide when to start and stop a beam. Overriding beaming is done through Stem_engraver properties `stemLeftBeamCount` and `stemRightBeamCount`.

>   Music types accepted:

>   beam-forbid-event

>   Properties (read)

>   > `autoBeaming` (boolean)

>   >   If set to true then beams are generated automatically.

>   > `baseMoment` (moment)

>   >   Smallest unit of time that will stand on its own as a subdivided section.

>   > `beamExceptions` (list)

>   >   An alist of exceptions to autobeam rules that normally end on beats.

>   > `beatStructure` (list)

>   >   List of `baseMoment`s that are combined to make beats.

>   > `subdivideBeams` (boolean)

>   >   If set, multiple beams will be subdivided at `baseMoment` positions by only drawing one beam over the beat.

>   This engraver creates the following layout object(s):

>   Beam.

> `Beam_engraver`

>   Handle `Beam` events by engraving beams. If omitted, then notes are printed with flags instead of beams.

>   Music types accepted:

>   beam-event

>   Properties (read)

>   > `baseMoment` (moment)

>   >   Smallest unit of time that will stand on its own as a subdivided section.

>   > `beamMelismaBusy` (boolean)

>   >   Signal if a beam is present.

>   > `beatStructure` (list)

>   >   List of `baseMoment`s that are combined to make beats.

>   > `subdivideBeams` (boolean)

>   >   If set, multiple beams will be subdivided at `baseMoment` positions by only drawing one beam over the beat.

>   Properties (write)

>   > `forbidBreak` (boolean)

>   >   If set to `##t`, prevent a line break at this point.

>   This engraver creates the following layout object(s):

>   Beam.

> `Bend_engraver`

>   Create fall spanners.

>   Music types accepted:

>   bend-after-event

>   This engraver creates the following layout object(s):

>   BendAfter.

> `Breathing_sign_engraver`

>   Create a breathing sign.

>   Music types accepted:

>   breathing-event

>   This engraver creates the following layout object(s):

>   BreathingSign.

> `Chord_tremolo_engraver`

>   Generate beams for tremolo repeats.

>   Music types accepted:

>   tremolo-span-event

>   This engraver creates the following layout object(s):

>   Beam.

> `Cluster_spanner_engraver`

>   Engrave a cluster using `Spanner` notation.

>   Music types accepted:

>   cluster-note-event

>   This engraver creates the following layout object(s):

>   ClusterSpanner and ClusterSpannerBeacon.

> `Dots_engraver`

>   Create Dots objects for rhythmic-head-interfaces.

>   This engraver creates the following layout object(s):

>   Dots.

> `Double_percent_repeat_engraver`

>   Make double measure repeats.

>   Music types accepted:

>   double-percent-event

>   Properties (read)

>   > `countPercentRepeats` (boolean)

>   >   If set, produce counters for percent repeats.

>   > `measureLength` (moment)

>   >   Length of one measure in the current time signature.

>   > `repeatCountVisibility` (procedure)

>   >   A procedure taking as arguments an integer and context, returning whether the corresponding percent repeat number should be printed when `countPercentRepeats` is set.

>   Properties (write)

>   > `forbidBreak` (boolean)

>   >   If set to `##t`, prevent a line break at this point.

>   This engraver creates the following layout object(s):

>   DoublePercentRepeat and DoublePercentRepeatCounter.

> `Dynamic_align_engraver`

>   Align hairpins and dynamic texts on a horizontal line.

>   Music types accepted:

>   break-span-event

>   Properties (read)

>   > `currentMusicalColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all non-breakable items (note heads, lyrics, etc.).

>   This engraver creates the following layout object(s):

>   DynamicLineSpanner.

> `Fingering_engraver`

>   Create fingering scripts.

>   Music types accepted:

>   fingering-event and stroke-finger-event

>   This engraver creates the following layout object(s):

>   Fingering.

> `Font_size_engraver`

>   Put `fontSize` into `font-size` grob property.

>   Properties (read)

>   > `fontSize` (number)

>   >   The relative size of all grobs in a context.

> `Footnote_engraver`

>   Create footnote texts.

>   Music types accepted:

>   footnote-event

>   Properties (read)

>   > `currentMusicalColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all non-breakable items (note heads, lyrics, etc.).

>   This engraver creates the following layout object(s):

>   FootnoteItem and FootnoteSpanner.

> `Forbid_line_break_engraver`

>   Forbid line breaks when note heads are still playing at some point.

>   Properties (read)

>   > `busyGrobs` (list)

>   >   A queue of `(end-moment . GROB)` cons cells. This is for internal (C++) use only. This property contains the grobs which are still busy (e.g. note heads, spanners, etc.).

>   Properties (write)

>   > `forbidBreak` (boolean)

>   >   If set to `##t`, prevent a line break at this point.

> `Glissando_engraver`

>   Engrave glissandi.

>   Music types accepted:

>   glissando-event

>   Properties (read)

>   > `glissandoMap` (list)

>   >   A map in the form of ’((source1 . target1) (source2 . target2) (sourcen . targetn)) showing the glissandi to be drawn for note columns. The value ’() will default to ’((0 . 0) (1 . 1) (n . n)), where n is the minimal number of note-heads in the two note columns between which the glissandi occur.

>   This engraver creates the following layout object(s):

>   Glissando.

> `Grace_beam_engraver`

>   Handle `Beam` events by engraving beams. If omitted, then notes are printed with flags instead of beams. Only engraves beams when we are at grace points in time.

>   Music types accepted:

>   beam-event

>   Properties (read)

>   > `baseMoment` (moment)

>   >   Smallest unit of time that will stand on its own as a subdivided section.

>   > `beamMelismaBusy` (boolean)

>   >   Signal if a beam is present.

>   > `beatStructure` (list)

>   >   List of `baseMoment`s that are combined to make beats.

>   > `subdivideBeams` (boolean)

>   >   If set, multiple beams will be subdivided at `baseMoment` positions by only drawing one beam over the beat.

>   This engraver creates the following layout object(s):

>   Beam.

> `Grace_engraver`

>   Set font size and other properties for grace notes.

>   Properties (read)

>   > `graceSettings` (list)

>   >   Overrides for grace notes. This property should be manipulated through the `add-grace-property` function.

> `Grob_pq_engraver`

>   Administrate when certain grobs (e.g., note heads) stop playing.

>   Properties (read)

>   > `busyGrobs` (list)

>   >   A queue of `(end-moment . GROB)` cons cells. This is for internal (C++) use only. This property contains the grobs which are still busy (e.g. note heads, spanners, etc.).

>   Properties (write)

>   > `busyGrobs` (list)

>   >   A queue of `(end-moment . GROB)` cons cells. This is for internal (C++) use only. This property contains the grobs which are still busy (e.g. note heads, spanners, etc.).

> `Instrument_switch_engraver`

>   Create a cue text for taking instrument.

>   Properties (read)

>   > `instrumentCueName` (markup)

>   >   The name to print if another instrument is to be taken.

>   This engraver creates the following layout object(s):

>   InstrumentSwitch.

> `Laissez_vibrer_engraver`

>   Create laissez vibrer items.

>   Music types accepted:

>   laissez-vibrer-event

>   This engraver creates the following layout object(s):

>   LaissezVibrerTie and LaissezVibrerTieColumn.

> `Ligature_bracket_engraver`

>   Handle `Ligature_events` by engraving `Ligature` brackets.

>   Music types accepted:

>   ligature-event

>   This engraver creates the following layout object(s):

>   LigatureBracket.

> `Multi_measure_rest_engraver`

>   Engrave multi-measure rests that are produced with ‘`R`’. It reads `measurePosition` and `internalBarNumber` to determine what number to print over the MultiMeasureRest. Reads `measureLength` to determine whether it should use a whole rest or a breve rest to represent one measure.

>   Music types accepted:

>   multi-measure-rest-event and multi-measure-text-event

>   Properties (read)

>   > `currentCommandColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all current breakable (clef, key signature, etc.) items.

>   > `internalBarNumber` (integer)

>   >   Contains the current barnumber. This property is used for internal timekeeping, among others by the `Accidental_engraver`.

>   > `measureLength` (moment)

>   >   Length of one measure in the current time signature.

>   > `measurePosition` (moment)

>   >   How much of the current measure have we had. This can be set manually to create incomplete measures.

>   > `restNumberThreshold` (number)

>   >   If a multimeasure rest has more measures than this, a number is printed.

>   This engraver creates the following layout object(s):

>   MultiMeasureRest, MultiMeasureRestNumber and MultiMeasureRestText.

> `New_dynamic_engraver`

>   Create hairpins, dynamic texts and dynamic text spanners.

>   Music types accepted:

>   absolute-dynamic-event and span-dynamic-event

>   Properties (read)

>   > `crescendoSpanner` (symbol)

>   >   The type of spanner to be used for crescendi. Available values are ‘`hairpin`’ and ‘`text`’. If unset, a hairpin crescendo is used.

>   > `crescendoText` (markup)

>   >   The text to print at start of non-hairpin crescendo, i.e., ‘`cresc.`’.

>   > `currentMusicalColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all non-breakable items (note heads, lyrics, etc.).

>   > `decrescendoSpanner` (symbol)

>   >   The type of spanner to be used for decrescendi. Available values are ‘`hairpin`’ and ‘`text`’. If unset, a hairpin decrescendo is used.

>   > `decrescendoText` (markup)

>   >   The text to print at start of non-hairpin decrescendo, i.e., ‘`dim.`’.

>   This engraver creates the following layout object(s):

>   DynamicText, DynamicTextSpanner and Hairpin.

> `New_fingering_engraver`

>   Create fingering scripts for notes in a new chord. This engraver is ill-named, since it also takes care of articulations and harmonic note heads.

>   Properties (read)

>   > `fingeringOrientations` (list)

>   >   A list of symbols, containing ‘`left`’, ‘`right`’, ‘`up`’ and/or ‘`down`’. This list determines where fingerings are put relative to the chord being fingered.

>   > `harmonicDots` (boolean)

>   >   If set, harmonic notes in dotted chords get dots.

>   > `stringNumberOrientations` (list)

>   >   See `fingeringOrientations`.

>   > `strokeFingerOrientations` (list)

>   >   See `fingeringOrientations`.

>   This engraver creates the following layout object(s):

>   Fingering, Script, StringNumber and StrokeFinger.

> `Note_head_line_engraver`

>   Engrave a line between two note heads, for example a glissando. If `followVoice` is set, staff switches also generate a line.

>   Properties (read)

>   > `followVoice` (boolean)

>   >   If set, note heads are tracked across staff switches by a thin line.

>   This engraver creates the following layout object(s):

>   Glissando and VoiceFollower.

> `Note_heads_engraver`

>   Generate note heads.

>   Music types accepted:

>   note-event

>   Properties (read)

>   > `middleCPosition` (number)

>   >   The place of the middle C, measured in half staff-spaces. Usually determined by looking at `middleCClefPosition` and `middleCOffset`.

>   > `staffLineLayoutFunction` (procedure)

>   >   Layout of staff lines, `traditional`, or `semitone`.

>   This engraver creates the following layout object(s):

>   NoteHead.

> `Note_spacing_engraver`

>   Generate `NoteSpacing`, an object linking horizontal lines for use in spacing.

>   This engraver creates the following layout object(s):

>   NoteSpacing.

> `Output_property_engraver`

>   Apply a procedure to any grob acknowledged.

>   Music types accepted:

>   apply-output-event

> `Part_combine_engraver`

>   Part combine engraver for orchestral scores: Print markings ‘a2’, ‘Solo’, ‘Solo II’, and ‘unisono’.

>   Music types accepted:

>   note-event and part-combine-event

>   Properties (read)

>   > `aDueText` (markup)

>   >   Text to print at a unisono passage.

>   > `partCombineTextsOnNote` (boolean)

>   >   Print part-combine texts only on the next note rather than immediately on rests or skips.

>   > `printPartCombineTexts` (boolean)

>   >   Set ‘Solo’ and ‘A due’ texts in the part combiner?

>   > `soloIIText` (markup)

>   >   The text for the start of a solo for voice ‘two’ when part-combining.

>   > `soloText` (markup)

>   >   The text for the start of a solo when part-combining.

>   This engraver creates the following layout object(s):

>   CombineTextScript.

> `Percent_repeat_engraver`

>   Make whole measure repeats.

>   Music types accepted:

>   percent-event

>   Properties (read)

>   > `countPercentRepeats` (boolean)

>   >   If set, produce counters for percent repeats.

>   > `currentCommandColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all current breakable (clef, key signature, etc.) items.

>   > `repeatCountVisibility` (procedure)

>   >   A procedure taking as arguments an integer and context, returning whether the corresponding percent repeat number should be printed when `countPercentRepeats` is set.

>   This engraver creates the following layout object(s):

>   PercentRepeat and PercentRepeatCounter.

> `Phrasing_slur_engraver`

>   Print phrasing slurs. Similar to Slur_engraver.

>   Music types accepted:

>   phrasing-slur-event

>   This engraver creates the following layout object(s):

>   PhrasingSlur.

> `Pitched_trill_engraver`

>   Print the bracketed note head after a note head with trill.

>   This engraver creates the following layout object(s):

>   TrillPitchAccidental, TrillPitchGroup and TrillPitchHead.

> `Repeat_tie_engraver`

>   Create repeat ties.

>   Music types accepted:

>   repeat-tie-event

>   This engraver creates the following layout object(s):

>   RepeatTie and RepeatTieColumn.

> `Rest_engraver`

>   Engrave rests.

>   Music types accepted:

>   rest-event

>   Properties (read)

>   > `middleCPosition` (number)

>   >   The place of the middle C, measured in half staff-spaces. Usually determined by looking at `middleCClefPosition` and `middleCOffset`.

>   This engraver creates the following layout object(s):

>   Rest.

> `Rhythmic_column_engraver`

>   Generate `NoteColumn`, an object that groups stems, note heads, and rests.

>   This engraver creates the following layout object(s):

>   NoteColumn.

> `Script_column_engraver`

>   Find potentially colliding scripts and put them into a `ScriptColumn` object; that will fix the collisions.

>   This engraver creates the following layout object(s):

>   ScriptColumn.

> `Script_engraver`

>   Handle note scripted articulations.

>   Music types accepted:

>   articulation-event

>   Properties (read)

>   > `scriptDefinitions` (list)

>   >   The description of scripts. This is used by the `Script_engraver` for typesetting note-superscripts and subscripts. See ‘`scm/script.scm`’ for more information.

>   This engraver creates the following layout object(s):

>   Script.

> `Slash_repeat_engraver`

>   Make beat repeats.

>   Music types accepted:

>   repeat-slash-event

>   This engraver creates the following layout object(s):

>   DoubleRepeatSlash and RepeatSlash.

> `Slur_engraver`

>   Build slur grobs from slur events.

>   Music types accepted:

>   slur-event

>   Properties (read)

>   > `doubleSlurs` (boolean)

>   >   If set, two slurs are created for every slurred note, one above and one below the chord.

>   > `slurMelismaBusy` (boolean)

>   >   Signal if a slur is present.

>   This engraver creates the following layout object(s):

>   Slur.

> `Spanner_break_forbid_engraver`

>   Forbid breaks in certain spanners.

> `Stem_engraver`

>   Create stems and single-stem tremolos. It also works together with the beam engraver for overriding beaming.

>   Music types accepted:

>   tremolo-event

>   Properties (read)

>   > `stemLeftBeamCount` (integer)

>   >   Specify the number of beams to draw on the left side of the next note. Overrides automatic beaming. The value is only used once, and then it is erased.

>   > `stemRightBeamCount` (integer)

>   >   See `stemLeftBeamCount`.

>   > `tremoloFlags` (integer)

>   >   The number of tremolo flags to add if no number is specified.

>   This engraver creates the following layout object(s):

>   Stem and StemTremolo.

> `Text_engraver`

>   Create text scripts.

>   Music types accepted:

>   text-script-event

>   This engraver creates the following layout object(s):

>   TextScript.

> `Text_spanner_engraver`

>   Create text spanner from an event.

>   Music types accepted:

>   text-span-event

>   Properties (read)

>   > `currentMusicalColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all non-breakable items (note heads, lyrics, etc.).

>   This engraver creates the following layout object(s):

>   TextSpanner.

> `Tie_engraver`

>   Generate ties between note heads of equal pitch.

>   Music types accepted:

>   tie-event

>   Properties (read)

>   > `tieWaitForNote` (boolean)

>   >   If true, tied notes do not have to follow each other directly. This can be used for writing out arpeggios.

>   Properties (write)

>   > `tieMelismaBusy` (boolean)

>   >   Signal whether a tie is present.

>   This engraver creates the following layout object(s):

>   Tie and TieColumn.

> `Trill_spanner_engraver`

>   Create trill spanner from an event.

>   Music types accepted:

>   trill-span-event

>   Properties (read)

>   > `currentCommandColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all current breakable (clef, key signature, etc.) items.

>   > `currentMusicalColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all non-breakable items (note heads, lyrics, etc.).

>   This engraver creates the following layout object(s):

>   TrillSpanner.

> `Tuplet_engraver`

>   Catch tuplet events and generate appropriate bracket.

>   Music types accepted:

>   tuplet-span-event

>   Properties (read)

>   > `tupletFullLength` (boolean)

>   >   If set, the tuplet is printed up to the start of the next note.

>   > `tupletFullLengthNote` (boolean)

>   >   If set, end at the next note, otherwise end on the matter (time signatures, etc.) before the note.

>   This engraver creates the following layout object(s):

>   TupletBracket and TupletNumber.

> `Tweak_engraver`

>   Read the `tweaks` property from the originating event, and set properties.

#### Internals Reference