|
denigma 4.0.0
|
Structural decomposition of a dynamic marking. More...
#include <dynamics.h>
Public Attributes | |
| Reinforcement | reinforcement { Reinforcement::None } |
| Leading reinforcement syllable, if any. | |
| Level | level { Level::None } |
| The sounding level, e.g. Level::f for "sfzp". | |
| bool | forzato {} |
| Whether the marking carries the forzato "z", as in "fz", "sfz", "sffz", "rfz". | |
| Level | subsequent { Level::None } |
| The level after the attack, e.g. | |
Structural decomposition of a dynamic marking.
A dynamic marking is built from an optional reinforcement syllable, a sounding level, an optional forzato "z", and an optional level the passage settles to after the attack. A plain level such as "ff" decomposes to itself with no affixes.
A marking decomposes whether or not it is one of the spellings Dynamic enumerates. "sffffffz" has no Dynamic of its own and classifies as Dynamic::Other, but it still decomposes to a sforzando reinforcement, a level of "ffffff", and a forzato.
The affixes are reported even when the level itself cannot be named. "sffffffffz" yields a sforzando reinforcement and a forzato with level of Level::Other, so a consumer can still act on the structure it does have and take the level from dynamics::Mark::glyphs.
A default-constructed Composition means the marking has no structure the classifier recognizes. level is therefore Level::None only in that empty Composition; a marking that decomposes at all has a level, even if that level can only be reported as Level::Other.
| Level denigma::classify::dynamics::Composition::subsequent { Level::None } |
The level after the attack, e.g.
Level::p for "sfzp". Level::None if the marking does not fall back to another level.