Source code for neoscore.western.tremolo

from __future__ import annotations

from typing import Optional, Union

from neoscore.core.brush import BrushDef
from neoscore.core.music_font import MusicFont
from neoscore.core.music_text import MusicText
from neoscore.core.pen import PenDef
from neoscore.core.point import PointDef
from neoscore.core.positioned_object import PositionedObject
from neoscore.western.chordrest import Chordrest


[docs]class Tremolo(MusicText): """A tremolo marking over a single Chordrest. The tremolo indicator accepts either an integer for declaring the number of strokes of a combining (common) tremolo, or a SMuFL glyphname e.g. "pendereckiTremolo". If a bridging tremolo is required between two chordrests, this class may not be suitable; instead consider manually building such tremolos using :obj:`.Beam` objects. """
[docs] def __init__( self, pos: PointDef, parent: PositionedObject, indication: Union[int, str], font: Optional[MusicFont] = None, brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None, ): """ Args: pos: The starting position parent: The parent for the starting position. If no font is given, this or one of its ancestors must implement :obj:`.HasMusicFont`. indication: The type of tremolo to draw, either a stroke count for conventional tremolos (1-5) or an arbitrary SMuFL glyphname. font: If provided, this overrides any font found in the ancestor chain. brush: The brush to fill shapes with. pen: The pen to draw outlines with. """ if isinstance(indication, int): if indication < 1 or indication > 5: raise ValueError(f"Invalid stroke number: {indication}") glyphname = "tremolo" + str(indication) else: glyphname = indication MusicText.__init__(self, pos, parent, glyphname, font, brush, pen)
[docs] @classmethod def for_chordrest( cls, chordrest: Chordrest, indication: Union[int, str], font: Optional[MusicFont] = None, brush: Optional[BrushDef] = None, pen: Optional[PenDef] = None, ) -> Tremolo: """Convenience constructor for a tremolo attached to a chord Args: chordrest: The chord to attach the tremolo to. indication: The type of tremolo to draw, either a stroke count for conventional tremolos (1-5) or an arbitrary SMuFL glyphname. font: If provided, this overrides any font found in the ancestor chain. brush: The brush to fill shapes with. pen: The pen to draw outlines with. """ pos = chordrest.tremolo_attachment_point return Tremolo(pos, chordrest, indication, font, brush, pen)