Масштаб от ключа и режима

10

Большинство из вас, вероятно, знают мажорную шкалу:

C D E F G A B C

Основная шкала характеризуется интервалами между соседними нотами, которые измеряются в полутонах :

2 2 1 2 2 2 1

Из этих интервалов мы можем построить любую крупную шкалу, начиная с любой ноты ( ключ шкалы). 12 нот в нашей 12-тональной системе настройки:

C C♯ D D♯ E F F♯ G G♯ A A♯ B

эквивалентно (заменяя некоторые энгармонические эквиваленты ):

C D♭ D E♭ E F G♭ G Ab A B♭ B

с полутоном между каждой парой смежных нот.

Каждая шкала должна иметь семь нот по порядку, начиная с ключа. В противном случае вы могли бы иметь две заметки в одной строке пентаграммы, что может привести к путанице. Итак, в G # major / ionian у вас есть F ## вместо G; Музыканты просто посмотрят, где в пентаграмме записка, они уже выучили случайности для каждой шкалы. Действительно, в G # major F ## представляется в строке F ## без случайных ошибок, случайные числа находятся в ключевой сигнатуре - но поскольку для этой ключевой сигнатуры для F потребовалось бы 2 резких нажатия, обычно это обозначается как Ab major.

Сдвигая 2 2 1 2 2 2 1интервалы, мы приходим к семи различным режимам диатонической шкалы:

  • Ионический : 2 2 1 2 2 2 1- соответствует мажорной шкале
  • Дориан :2 1 2 2 2 1 2
  • Фригийский :1 2 2 2 1 2 2
  • Лидиан :2 2 2 1 2 2 1
  • Mixolydian :2 2 1 2 2 1 2
  • Aeolian : 2 1 2 2 1 2 2- соответствует естественной минорной шкале и мелодической минорной шкале при спуске (при подъеме мелодическая минорная шкала поднялась на 6-ю и 7-ю ступени. Существует также гармоническая минорная шкала с повышенной 7-й ступенью по сравнению с естественной незначительный).
  • Locrian :1 2 2 1 2 2 2

Таким образом, задача состоит в том, чтобы написать программу , которая принимает в качестве входных данных (через стандартный ввод ) ключ и режим и выходы (через стандартный вывод ) соответствующую шкалу. Некоторые тестовые случаи ( stdin ( key mode) => stdout ( scale)):

Input:              Output:
C mixolydian   =>   C D E F G A Bb
F mixolydian   =>   F G A Bb C D Eb
G mixolydian   =>   G A B C D E F
G# ionian      =>   G# A# B# C# D# E# F##
Bb aeolian     =>   Bb C Db Eb F Gb Ab

Дальнейшие ссылки:
Сколько (главных и второстепенных) ключей существует? Почему?

ninjalj
источник
4
В примерах используются обозначения, которые не описаны выше - квартиры и двойные острые предметы. Допустимо ли выводить эквиваленты, используя только базовые ноты и простые майоры? (Что бы это ни стоило, я бы предпочел, чтобы вы сказали «Нет» и немного расширили спецификацию - похоже, у этого вопроса может быть немного скрытой глубины).
Питер Тейлор
@PeterTaylor: Верно. Я надеюсь, что редактирование достаточно. Я ожидаю, что результат будет таким, как показано, с семью именами нот и их соответствующими случайностями. Это относительно большая программа.
ниндзя

Ответы:

7

GolfScript, 96 символов

" "/~5<{+}*7%"v]nwm[{"=2*2base(;\(" #"@?]{.1>))["b""""#"..+]=+\[~@(@+@(7%65+\1$7%4%0>-]}7*;]" "*

Решение Golfscript, которое можно протестировать онлайн .

Примечание. Как и в примерах, ключ должен быть в верхнем регистре, а режим - в нижнем.

Примеры:

>C lydian
C D E F# G A B

>C mixolydian
C D E F G A Bb
Говард
источник