Helper functions for setting formatting attributes of noteworthy strings including representation of timesteps, octaves and accidentals.
naturalize(notes, type = c("both", "flat", "sharp"))
sharpen_flat(notes)
flatten_sharp(notes)
note_set_key(notes, key = "c")
as_tick_octaves(notes)
as_integer_octaves(notes)
as_space_time(x)
as_vector_time(x)
pretty_notes(notes, ignore_octave = TRUE)
character, a noteworthy string, space-delimited or vector of individual entries.
character, type of note to naturalize.
character, key signature to coerce any accidentals to the
appropriate form for the key. May also specify "sharp"
or "flat"
.
for generic functions: notes, info or music string.
logical, strip any octave notation that may be present, returning only the basic notes without explicit pitch.
character
For sharpen_flat()
and flatten_sharp()
, sharpening flats and flattening
sharps refer to inverting their respective notation, not to raising or
lowering a flatted or sharped note by one semitone. For the latter, use
naturalize()
, which removes flat and/or sharp notation from a string.
note_set_key()
is used for coercing a noteworthy string to a specific
and consistent notation for accidentals based on a key signature.
This is a wrapper around sharpen_flat()
and flatten_sharp()
.
as_tick_octaves()
, as_integer_octaves()
, as_space_time()
and
as_vector_time()
similarly affect octave and timestep format.
For simultaneous control over the representation of timesteps, octave
numbering and accidentals, all three are available as arguments to
as_noteworthy()
.
as_space_time()
and as_vector_time()
are generic since they apply clearly
to and are useful for not only noteworthy strings, but also note info and
music objects. If x
is still a simple character string, these functions
attempt to guess which of the three it is. It is recommended to set the class
before using these functions.
There are many package functions that operate on noteworthy strings that could in concept work on music objects, but the expectation is that sound and time/info are disentangled. The music class is convenient for data entry, e.g., for transcription purposes, but it is not sensible to perform data analysis with quantities like pitch and time tightly bound together. This would only lead to repetitive deconstructions and reconstructions of music class objects. Most functions that operate on noteworthy strings or note info strings strictly apply to one or the other. Generic functions are reserved for only the most fundamental and generally applicable metadata retrieval and format coercion.
x <- "e_2 a_, b_, c#f#a# c#'f#'a#''"
note_set_key(x, "f")
#> <Noteworthy string>
#> Format: space-delimited time
#> Values: e_, a_, b_, <d_g_b_> <d_'g_'b_''>
note_set_key(x, "g")
#> <Noteworthy string>
#> Format: space-delimited time
#> Values: d#, g#, a#, <c#f#a#> <c#'f#'a#''>
as_tick_octaves(x)
#> <Noteworthy string>
#> Format: space-delimited time
#> Values: e_, a_, b_, <d_g_b_> <d_'g_'b_''>
as_integer_octaves(x)
#> <Noteworthy string>
#> Format: space-delimited time
#> Values: e_2 a_2 b_2 <d_g_b_> <d_4g_4b_5>
y <- as_vector_time(x)
is_vector_time(y)
#> [1] TRUE
is_space_time(as_space_time(y))
#> [1] TRUE
naturalize(x)
#> <Noteworthy string>
#> Format: space-delimited time
#> Values: e, a, b, <cfa> <c'f'a''>
naturalize(x, "sharp")
#> <Noteworthy string>
#> Format: space-delimited time
#> Values: e_, a_, b_, <cfa> <c'f'a''>
sharpen_flat(x)
#> <Noteworthy string>
#> Format: space-delimited time
#> Values: d#, g#, a#, <c#f#a#> <c#'f#'a#''>
flatten_sharp(x)
#> <Noteworthy string>
#> Format: space-delimited time
#> Values: e_, a_, b_, <d_g_b_> <d_'g_'b_''>
pretty_notes(x)
#> [1] "Eb Ab Bb C#F#A# C#F#A#"