Your mission is to create a function for transposing music chords.
Copied from SO with permission of the original asker, I just really wanted to see what you guys could do with this one:
Since I don't expect everyone to be a musician here, I'll try to explain how it works in music theory. I hope I don't forget something. If yes, musicians, please, correct me.
1) The simple chords
The simple chords are almost as simple as an alphabet and it goes like this:
C, C#, D, D#, E, F, F#, G, G#, A, A# B
From B it loops all over again to C. Therefore, If the original chord is
E and we want to transpose +1, the resulting chord is
F. If we transpose +4, the resulting chord is
2) Expanded chords
They work almost like the simple chords, but contain a few more characters, which can safely be ignored when transposing. For example:
Cmi, C#7, Dsus7, Emi, Fsus4, F#mi, G ...
So again, as with the simple chords, if we transpose
Dsus7 + 3 =
3) Non-root bass tone
A problem arises when the bass plays a different tone than the chord root tone. This is marked by a slash after the chord and also needs to be transposed. Examples:
C/G, Dmi/A, F#sus7/A#
As with examples 1 and 2, everything is the same, but the part after the slash needs transpose too, therefore:
C/G + 5 =
F#sus7/A# + 1 =
I think this should be all, unless I forgot something.
chord and the transpose value
transpose. What code would transpose the chord?
var chord = 'F#sus7/C#'; var transpose = 3; // remember this value also may be negative, like "-4" ... code here ... var result; // expected result = 'Asus7/E';