transpose | R Documentation |
This function transposes pitches or keys
by various intervals or to target keys.
Inside the box, inputs and transpositions take place as tonalInterval
s or diatonicSet
s,
but any numeric or character string representation of pitches can be transposed as well.
This function is incorporated directly into tonalTransform, and thence, all pitch translation
functions, so you probably won't call it directly very often.
transpose(x, by, Key, to, real, relative, ...)
x |
***The input pitch(es) to transpose. *** Can be a |
by |
Transpose by this interval. Can be a |
Key |
Transpose from this key (to the Can be a For tonal and/or to transpositions, this is the "from" key. If this value is |
to |
Transpose to this key (from the Can be a |
real |
Should transposition be real (or tonal)? Defaults to Must be a singleon If |
relative |
Should transposition between keys be relative (or parallel)? Defaults to Must be a singleton Only relavent if using transposing between keys ( |
There are two distinct types of transposition (real and tonal). There are also two different approaches to specifying transpositions: "to" and "by". "To" transpositions can also be either parallel or relative.
There are two different types of transposition: real transposition and tonal transposition.
In real transposition, all inputs are transposed by the same specific interval.
For example, the pitches {C D E F G}
could be transposed up a major second to {C D E F# G}
.
In tonal transposition, inputs are transposed by generic intervals, within a key.
For example, the sequence {C D E F G}
, in the key of C major, could be translated up a generic second
to {D E F G A}
.
To choose between real and tonal transposition, use the real
argument:
real = TRUE
for real transposition, real = FALSE
for tonal transposition.
Tonal transposition is complicated by the presence of any alterations in the input pitches.
For instance, if we are given the pitches {C F# G D# E}`` in the key of C major, how should they by tonally transposed up a second, within C major? There is not one obvious, correct answer answer, which can be easily identified. The algorithm implemented by
humdrumR' is as follows:
Alterations/accidentals in the input are identified. (In this case, F# and D#).
The generic pitches are transposed within the key, resulting in {D G A E F}
.
Alterations in the input are added to the output unless the resulting pitches are interpreted as a comma
by a call to tintPartion, with a given enharmonic wrap value (the default is 12
).
In this example, adding the first accidental results in {G#}
which is not a comma.
However, the second accidental results in {E#}
which is a comma away from the natural {F}
.
Thus, this accidental is not added to the output, resulting in {E}
, not {E#}
.
The resulting output is {D G# A E F}
.
The size of enharmonicWrap
effectively determines how extreme accidentals are allowed.
The default value, 12
, assures that no output notes are enharmonically equivalent to notes in the key.
To further illustrate, here is the sequence {C F# G D# E, B- A A- G C# D, B D- C}
transposed
tonally within C major by all seven possible generic intervals, with enharmonicWrap = 12
:
There are two approaches to specifying transpositions, the by
and to
arguments.
The by
argument must be an interval, and the input is translated by that interval.
If the by
interval is specific but real = FALSE
, the input is treated as a generic interval,
and tranposition takes place within the key indicated by the Key
argument.
The to
argument translates an input to a desired key.
For example, if the input is in the key of E major but we want it transposed to G major, we could say to = '*E:'
.
If real = TRUE
, input is simply translated to the root of the to
key, with all the exact same intervals.
If real = FALSE
, the input is translated to the root of the new key, with its intervals changed to match the new key as well.
In either case, the result depends on what the input's key is, which is indicated by the standard Key
argument.
The Key
arguments is like the "from" key.
If Key = NULL
, the input key is interpreted as C major.
Consider the input notes {D B C A# B, D C# D E D}
in the key of the G major.
If we specify to = e:, real = TRUE
, the output will be {B G# A F## G#, B A# B C# B}
.
(Notice that even though the to
key is minor, the output is still clearly in E major).
If we specify to = e:, real = FALSE
, the output will instead be {B G A F# G, B A# B C B}
.
Building off the previous example, consider how the input key matters as well.
If we use the same input notes ({D B C A# B, D C# D E D}
) but the input Key
is C major, then:
If we specify to = e:, real = TRUE
, the output will be {F# D# E C## D#, F# E# F# G# F#}
.
If we specify to = e:, real = FALSE
, the output will instead be {F# D E C# D, F# E F# G F#}
.
If both by
and to
are specified, the to
transposition is applied first, followed by the by
transposition.
If real = FALSE
, the by
transposition happens within the to
key, not the Key
key.
When transposing to, we have diferent approaches about to determining the relationship between the
"from" key (Key
argument) and the "to" key (to
argument).
If we think of "parallel" relationships between keys, we match the roots of the keys regardless of modes.
For instance, C major and C minor are parallel keys.
If we instead think of "relative" relationships between keys, we match the modes of the keys, not the roots.
For instance, C major and A minor are relative keys.
This is similar to the distinction between "la-based minor" solfege (relative) vs "fixed-do" solfege (parallel).
When transposing using a to
argument, if relative = FALSE
the input key (Key
argument) is transposed to match the root
of the to
argument.
For example, if the input key is G minor and the to`` key is C major, the output is transposed to G minor. However, if
relative = TRUEthe input key is transposed to match the mode of the
tokey: A G minor input with a C major
towould be translated to A minor, the parallel minor of the
tokey. If the
Key(from key) and
to' (to key) arguments have the same mode, the parallel and relative transpositions
are the same.
As a note, real transposition by
and interval can be achieved more concisely using the +
and -
operators,
as long as at least one side of the operators is an actual tonalInterval
object.
humdrumR
preassigns all common tonalIntervals to objects in your global environment.
Thus, you can type commands like "c#" + M2
to get d#
, or c("C4", "E4", "C5") - m6
to get "E3" "G#3" "E4"
.
Other tonal transformations:
invert()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.