Шкала від клавіш та режиму


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 # мажор / іон, у вас F ## замість G; музиканти просто подивляться, де в пентаграмі є нота, вони вже дізналися випадковість для кожної шкали. Дійсно, у G # мажор F ## представлений у рядку F ## без випадкових випадків, випадкові випадки є в підписі ключа, але оскільки цей підпис ключа потребує 2 різких знаків для F, зазвичай це позначається як 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
  • Міксолійський :2 2 1 2 2 1 2
  • Еоловий : 2 1 2 2 1 2 2- відповідає природній мінорній шкалі і мелодичній мінорній шкалі при спаді (при висхідній мелодійній мінорній шкалі піднявся 6-й і 7-й градуси. Існує також гармонічна мінорна шкала, піднята 7-ю ступінь порівняно з природною неповнолітній).
  • Локар :1 2 2 1 2 2 2

Отже, завдання полягає в тому, щоб написати програму, яка приймає за вхід (через stdin ) ключ і режим і виводить (через stdout ) відповідну шкалу. Деякі тестові випадки ( 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

Подальші посилання:
Скільки (основних та другорядних) клавіш є? Чому?


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.