Как я могу транспонировать музыкальные аккорды, используя JavaScript?
Мне было интересно, как можно было бы создать функцию javascript для транспонирования музыкальных аккордов.
Поскольку я не ожидаю, что все будут музыкантами, я попытаюсь объяснить, как это работает в теории музыки. Я надеюсь, что я ничего не забуду. Если да, музыканты, пожалуйста, поправьте меня.
1) Простые аккорды
Простые аккорды почти так же просты, как алфавит, и это выглядит так:
C, C #, D, D #, E, F, F #, G, G #, A, A # B
От B он снова возвращается к C. Поэтому, если исходный аккордE
и мы хотим транспонировать +1, результирующий аккордF
, Если мы транспонируем +4, результирующий аккордG#
.
2) Расширенные аккорды
Они работают почти как простые аккорды, но содержат еще несколько символов, которые можно смело игнорировать при транспонировании. Например:
Cmi, C # 7, Dsus7, Emi, Fsus4, F # mi, G ...
Опять же, как с простыми аккордами, если мы транспонируемDsus7
+ 3 =Fsus7
3) Некорневой бас
Проблема возникает, когда бас играет тембр, отличный от тона основного аккорда. Это отмечено косой чертой после аккорда и также должно быть транспонировано. Примеры:
C / G, Dmi / A, F # sus7 / A #
Как и в примерах 1 и 2, все то же самое, но часть после косой черты тоже нуждается в транспонировании:
C/G
+ 5 =F/C
F#sus7/A#
+ 1 =Gsus7/B
Я думаю, что это все, если я что-то забыл.
Итак, представьте, что у вас есть переменная javascript с именемchord
и значение транспонированияtranspose
, Какой код будет транспонировать аккорд?
Пример:
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';