Échelle à partir de la touche et du mode

10

La plupart d'entre vous connaissent probablement l'échelle en do majeur:

C D E F G A B C

La gamme majeure se caractérise par les intervalles entre les notes adjacentes, mesurés en demi - tons :

2 2 1 2 2 2 1

A partir de ces intervalles, nous pouvons construire n'importe quelle gamme majeure à partir de n'importe quelle note (la clé de la gamme). Les 12 notes de notre système d'accord de tempérament égal à 12 tons sont:

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

de manière équivalente (en remplaçant certains équivalents enharmoniques ):

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

avec un demi-ton entre chaque paire de notes adjacentes.

Chaque gamme doit avoir les sept notes dans l'ordre, en commençant par la clé. Sinon, vous pourriez avoir deux notes sur la même ligne du pentagramme, ce qui serait déroutant. Donc, en G # majeur / ionien, vous avez F ## au lieu de G; les musiciens vont juste regarder où dans le pentagramme se trouve la note, ils ont déjà appris les accidents pour chaque gamme. En effet, en G # majeur , F ## est représenté dans la ligne de F ## sans accident, les accidentels sont dans la signature de clé - mais puisque cette signature de clé nécessiterait 2 tranchants pour F, généralement cela est noté comme Ab majeur.

En décalant les 2 2 1 2 2 2 1intervalles, nous arrivons à sept modes différents de l'échelle diatonique:

  • Ionienne : 2 2 1 2 2 2 1- correspond à l'échelle majeure
  • Dorian :2 1 2 2 2 1 2
  • Phrygien :1 2 2 2 1 2 2
  • Lydian :2 2 2 1 2 2 1
  • Mixolydian :2 2 1 2 2 1 2
  • Éolienne : 2 1 2 2 1 2 2- correspond à la gamme mineure naturelle et à la gamme mineure mélodique en descendant (en montant, la gamme mineure mélodique a augmenté de 6e et 7e degrés. Il y a aussi une gamme mineure harmonique, avec un 7e degré élevé par rapport au naturel mineur).
  • Locrian :1 2 2 1 2 2 2

Donc, le défi est d'écrire un programme qui prend en entrée (via stdin ) une clé et un mode et sort (via stdout ) l'échelle correspondante. Quelques cas de test ( 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

Autres références:
Combien y a-t-il de clés (majeures et mineures)? Pourquoi?

ninjalj
la source
4
Les exemples comportent une notation qui n'est pas décrite ci-dessus - appartements et doubles objets tranchants. Est-il acceptable de produire des équivalents en utilisant uniquement les notes de base et les majors simples? (Pour ce que ça vaut, ma préférence serait que vous disiez "Non" et développiez un peu les spécifications - on dirait que cette question pourrait avoir un peu de profondeur cachée).
Peter Taylor
@PeterTaylor: D'accord. J'espère que le montage est suffisant. Je m'attends à ce que la sortie soit telle qu'indiquée, avec les sept noms de note et leurs accidents correspondants. Il s'agit d'un programme relativement important.
ninjalj

Réponses:

7

GolfScript, 96 caractères

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

Solution Golfscript testable en ligne .

Remarque: Comme dans les exemples, la clé doit être en majuscules tandis que le mode doit être indiqué en minuscules.

Exemples:

>C lydian
C D E F# G A B

>C mixolydian
C D E F G A Bb
Howard
la source