scale-deg {tabr} | R Documentation |
Scale degrees and mappings
Description
These functions assist with mapping between scale degrees, notes and chords.
Usage
scale_degree(
notes,
key = "c",
scale = "diatonic",
use_root = TRUE,
strict_accidentals = TRUE,
naturalize = FALSE,
roman = FALSE
)
scale_note(deg, key = "c", scale = "diatonic", collapse = FALSE, ...)
note_in_scale(
notes,
key = "c",
scale = "diatonic",
use_root = TRUE,
strict_accidentals = TRUE
)
chord_degree(
notes,
key = "c",
scale = "diatonic",
strict_accidentals = TRUE,
naturalize = FALSE,
roman = FALSE
)
is_in_scale(notes, key = "c", scale = "diatonic", strict_accidentals = TRUE)
Arguments
notes |
character, a string of notes. |
key |
character, key signature (or root note) for scale, depending on
the type of |
scale |
character, the suffix of a supported |
use_root |
logical, use lowest pitch in chord. Otherwise yield an
|
strict_accidentals |
logical, whether representation must match key and scale. See details. |
naturalize |
logical, whether to naturalize any sharps or flats before obtaiuning the scale degree. |
roman |
logical, return integer scale degrees as Roman numerals. |
deg |
integer, roman class, or character roman, the scale degree. |
collapse |
logical, collapse result into a single string ready for phrase construction. |
... |
additional arguments passed to the scale function, e.g.,
|
Details
Obtain the scale degree of a note in a supported scale with scale_degree()
.
This function works on any noteworthy string. It ignores octave numbering.
Rests and any note not explicitly in the scale return NA
. If deg
is
greater than the number of degrees in the scale, it is recycled, e.g., in C
major 8 starts over as C.
By default, flats and sharps checked strictly against the scale. Setting
strict_accidentals = FALSE
will convert any flats or sharps present,
if necessary based on the combination of key
signature and
scale
. The chromatic scale is a special case where strict accidental
is always ignored.
Not any arbitrary combination of valid key
and valid scale
is valid. For
example, key = "am"
and scale = "harmonic"
is valid, but not with
key = "a"
.
note_in_scale()
is a wrapper around scale_degree()
. To check if full
chords are diatonic to the scale, see is_diatonic()
.
The inverse of scale_degree()
is scale_note()
, for obtaining the note
associated with a scale degree. This could be done simply by calling a
scale_*
function and indexing its output directly, but this wrapper is
provided to complement scale_degree()
.
Additionally, it accepts the common Roman numeral input for the degree.
This can be with the roman
class or as a character string.
Degrees return NA
if outside the scale degree range.
Value
integer, or roman class if roman = TRUE
for scale_degree()
;
character for scale_note()
.
See Also
scale-helpers()
, is_diatonic()
Examples
scale_degree("r c, e3 g~ g s g# ceg")
note_in_scale("r c, e3 g~ g s g# ceg")
scale_degree("c e g", roman = TRUE)
scale_degree("c c# d_ e", key = "d")
scale_degree("c c# d_ e", key = "d", strict_accidentals = FALSE)
scale_degree("c, e_3 g' f#ac#", use_root = FALSE)
scale_degree("c, e_3 g' f#ac#", naturalize = TRUE) # lowest chord pitch: c#
scale_degree("c# d_ e_' e4 f f# g", key = "c#", scale = "chromatic")
scale_note(1:3, key = "am")
scale_note(c(1, 3, 8), "d", collapse = TRUE)
all(sapply(list(4, "IV", as.roman(4)), scale_note) == "f")
x <- "d dfa df#a f#ac#"
chord_degree(x, "d")
is_in_scale(x, "d")