trevorbaca / baca

Trevor Bača's Abjad library.
8 stars 3 forks source link

Add OnBeatGraceContainer #34

Closed trevorbaca closed 4 years ago

trevorbaca commented 4 years ago

Common practice provides no adequate notation.

Follow Ferneyhough's usage instead:

on-beat-grace-notes
\new Staff
{
    \set Score.proportionalNotationDuration = #(ly:make-moment 1 8)
    <<
        {
            \set fontSize = #-2
            \once \override NoteColumn.force-hshift = #0.2
            \once \override Accidental.stencil = ##f
            \slash <b' cs'>8 * 1/2
            \accent
            (
            bf'8 * 1/2
            gf'8 * 1/2
            f'8 * 1/2
            )
        }
    \\
        cs'4
    >>
    d'2.
    <<
        g''4
    \\
        {
            \set fontSize = #-2
            \once \override Accidental.stencil = ##f
            \slash <g'' b'>8 * 2/5
            \accent
            (
            bf'8 * 2/5
            gf'8 * 2/5
            f'8 * 2/5
            e'8 * 2/5
            )
        }
    >>
    f''2.
    <<
        gs''4
    \\
        {
            \set fontSize = #-2
            \once \override Accidental.stencil = ##f
            \slash <g'' b'>8 * 2/3
            \accent
            (
            bf'8 * 2/3
            gf'8 * 2/3
            )
        }
    >>
    a''2.
}

These examples require David Nalesnik's \slash function.

Build first figure like this:

voice = abjad.Voice("cs'4 d'2.", name="MusicVoice")
container = abjad.OnBeatGraceContainer("b'8 bf' gf' f'")
abjad.attach(abjad.Articulation(">"), container[0])
abjad.attach(container, voice[0])

Make sure grace displacements look like this:

b'4  Timespan(Offset((0, 0)), Offset((0, 0), grace_displacement=(1, 8))
bf'4 Timespan(Offset((0, 0), grace_displacement=(1, 8)), Offset((0, 0), grace_displacement=(2, 8))
gf'4 Timespan(Offset((0, 0), grace_displacement=(2, 8)), Offset((0, 0), grace_displacement=(3, 8))
f'4  Timespan(Offset((0, 0), grace_displacement=(3, 8)), Offset((0, 0), grace_displacement=(4, 8))
cs'4 Timespan(Offset((0, 0), grace_displacement=(5, 8)), Offset((1, 4)))
trevorbaca commented 4 years ago

Moved to Abjad #1107.