Как я могу транспонировать музыкальные аккорды, используя 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';

Ответы на вопрос(7)

Ваш ответ на вопрос