Now that you have had an overview
of the concept of noteworthy strings and the noteworthy
class that provides this structure to objects, next consider the
noteinfo
class. noteinfo
objects are similarly
built from character strings. Note information is supplemental
information that is stored in a noteinfo
object. A note
info string is generally a companion to a noteworthy string. They share
many of the same properties as noteworthy
objects and have
similar generic method implementations.
noteinfo
classThe data stored in a noteinfo
object always includes
duration, but can also consist of various other pieces of sheet music
notation markup syntax; information that is distinct from the pitch
itself, for example slurs or staccato notes. Because all the available
information aside from note duration tends to be specifically relevant
to sheet music transcription, you can find more details in the
transcription vignettes that introduce the phrase
class. It
is worth browsing the table in the phrases
vignette if any note info notation below is unfamiliar.
A string can be checked directly with informable()
.
#> [1] TRUE
#> [1] FALSE
This reports whether the entire string conforms to all requirements
for it to be valid noteinfo
syntax. In the special case
where only durations are provided and no other information, and these
durations do not include any triplets "t"
or dotted notes
"."
, then an integer vector will suffice. Even so, a digit
like 5
does not belong.
Use as_noteinfo()
to coerce to a noteinfo
object. Here are the print and summary statements.
#> <Note info string>
#> Format: space-delimited time
#> Values: 2. 4.. 8 t8-. t8- t8^ 16
#> <Note info string>
#> Timesteps: 7
#> Format: space-delimited time
#> Values: 2. 4.. 8 t8-. t8- t8^ 16
Similar to noteworthy
object, here are some generic
methods as applied to the noteinfo
class.
#> [1] 7
#> <Note info string>
#> Format: space-delimited time
#> Values: 16 t8^ t8- t8-. 8 4.. 2.
#> <Note info string>
#> Format: space-delimited time
#> Values: 4.. 8 t8-.
#> <Note info string>
#> Format: space-delimited time
#> Values: 2. 1( 2) t8-. t8- t8^ 16
As with the noteworthy
class, there are helper functions
available that make it convenient to extract and manipulate the data in
noteinfo
objects. Here are some examples.
a <- notate("t8x", "Start here")
x <- paste(a, "t8x t8-. 16 4.. 16- 16 2^ 2 4. 8( 4)( 4) 8*4 1 1")
info_duration(x)
#> <Note info string>
#> Format: vectorized time
#> Values: t8 t8 t8 16 4.. 16 16 2 2 4. 8 4 4 8 8 8 8 1 1
#> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
#> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
#> [13] TRUE FALSE FALSE FALSE FALSE FALSE FALSE
#> [1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
#> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#> [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
#> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#> [1] "Start here" NA NA NA NA
#> [6] NA NA NA NA NA
#> [11] NA NA NA NA NA
#> [16] NA NA NA NA
info_duration()
is a handy function that strips away all
information but note durations. Most of the other functions return
logical vectors indicating timesteps where certain types of information
are present. info_annotation()
extracts text annotations at
timesteps, returning NA
where there is no annotation.
It is unlikely to have reason to use noteinfo
objects in
isolation. They are meant to compliment noteworthy
objects
of the same timestep length. You will see them used in combination to
construct phrases for sheet music transcription, but also to build a
music
object. Music objects are the subject of the next
tutorial.
The key takeaway here is that noteworthy
- and
noteinfo
-class objects are intended to provide clean
separation of sound and time, respectively. It is true that note
information can be more than just duration, including notation markup
that represents things that have an effect on how a note sounds, but the
focus here is specifically on separating pitch from time (and everything
else).
There is much analysis that can be done on a sequence of pitches
alone. The temporal information meant to be included in a
noteworthy
object is at the rank level. There is a temporal
sequence; the object is built around timesteps. But interval/ratio level
data is not part of the definition. When this is needed,
noteinfo
is paired with pitch.