Helper functions for musical intervals defined by two notes.

pitch_interval(notes1, notes2, use_root = TRUE) pitch_diff(notes, use_root = TRUE, n = 1, trim = FALSE) scale_interval( notes1, notes2, use_root = TRUE, format = c("mmp_abb", "mmp", "ad_abb", "ad") ) scale_diff( notes, use_root = TRUE, n = 1, trim = FALSE, format = c("mmp_abb", "mmp", "ad_abb", "ad") ) tuning_intervals(tuning = "standard")

use_root | logical, use lowest pitch in chord for pitch intervals or
scale intervals between adjacent timesteps. Otherwise intervals involving
chords are |
---|---|

notes, notes1, notes2 | character, a noteworthy string. |

n | integer, size of lag. |

trim | logical, trim the |

format | character, format of the scale notation: major/minor/perfect, augmented/diminished, and respective abbreviations. See argument options in defaults. |

tuning | character, string tuning. |

a musical interval, integer or character depending on the function.

Numeric intervals are directional. `pitch_interval`

returns the signed
number of semitones defining the distance between two notes.
Named scale intervals are names only. Use pitch for direction.

`scale_interval`

returns a character string that provides the named
main interval, simple or compound, defined by the two notes.
This function will return `NA`

for any uncommon out of range large
interval not listed as a named interval in `mainIntervals`

.

`pitch_interval`

and `scale_interval`

compute intervals
element-wise between two noteworthy strings. `pitch_diff`

and
`scale_diff`

work similarly but compute lagged intervals on the
elements in `notes`

.

pitch_interval("b", "c4")#> [1] 1pitch_interval("c, e_, g_, a,", "e_, g_, a, c")#> [1] 3 3 3 3pitch_interval("c r", "dfa d")#> [1] 2 NApitch_interval("c r", "dfa d", use_root = FALSE)#> [1] NA NAscale_interval("c", "e_")#> [1] "m3"scale_interval("ceg", "egd'")#> [1] "M3"x <- "a, b, c d e f g# ac'e' a c' e'" pitch_diff(x)#> [1] NA 2 1 2 2 1 3 1 0 3 4pitch_diff(x, use_root = FALSE)#> [1] NA 2 1 2 2 1 3 NA NA 3 4scale_diff(x)#> [1] NA "M2" "m2" "M2" "M2" "m2" "m3" "m2" "P1" "m3" "M3"scale_diff(x, n = 2, trim = TRUE, use_root = FALSE)#> [1] "m3" "m3" "M3" "m3" "M3" NA "m2" NA "P5"# Lagged intervals respect rest timesteps. # All timestep position including rests are retained. # But the lag-n difference skips rest entries. x <- "a, c r r r r g" pitch_diff(x)#> [1] NA 3 NA NA NA NA 7scale_diff(x)#> [1] NA "m3" NA NA NA NA "P5"pitch_diff(x, n = 2)#> [1] NA NA NA NA NA NA 10scale_diff(x, n = 2)#> [1] NA NA NA NA NA NA "m7"pitch_diff(x, n = 2, trim = TRUE)#> [1] NA NA NA NA 10scale_diff(x, n = 2, trim = TRUE)#> [1] NA NA NA NA "m7"