Skala dari tombol dan mode

10

Sebagian besar dari Anda mungkin tahu skala C mayor:

C D E F G A B C

Skala utama dicirikan oleh interval antara not yang berdekatan, yang diukur dalam semitone adalah:

2 2 1 2 2 2 1

Dari interval ini, kita dapat membangun skala besar yang dimulai dengan nada apa pun ( kunci skala). 12 catatan dalam sistem tuning temperamen setara 12-nada kami adalah:

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

ekuivalen (menggantikan beberapa setara enharmonik ):

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

dengan semitone antara setiap pasangan not yang berdekatan.

Setiap skala harus memiliki tujuh catatan secara berurutan, mulai dari kunci. Kalau tidak, Anda bisa memiliki dua catatan di baris pentagram yang sama, yang akan membingungkan. Jadi, dalam G # major / ionian, Anda memiliki F ## daripada G; musisi hanya akan melihat di mana di pentagram adalah catatan, mereka sudah mempelajari kecelakaan untuk setiap skala. Memang, dalam G # mayor , F ## diwakili dalam garis F ## tanpa disengaja, kebetulan berada di tanda tangan kunci - tetapi karena tanda tangan kunci itu membutuhkan 2 benda tajam untuk F, biasanya ini dinotasikan sebagai Ab mayor.

Menggeser 2 2 1 2 2 2 1interval, kita sampai pada tujuh mode berbeda dari skala diatonis:

  • Ionia : 2 2 1 2 2 2 1- sesuai dengan skala utama
  • Dorian :2 1 2 2 2 1 2
  • Frigia :1 2 2 2 1 2 2
  • Lidia :2 2 2 1 2 2 1
  • Mixolydian :2 2 1 2 2 1 2
  • Aeolian : 2 1 2 2 1 2 2- sesuai dengan skala minor alami, dan skala minor melodi ketika turun (ketika naik, skala minor melodi telah naik derajat 6 dan 7. Ada juga skala minor harmonik, dengan kenaikan derajat ke-7 dibandingkan dengan alami minor).
  • Orang lokal :1 2 2 1 2 2 2

Jadi, tantangannya adalah untuk menulis program yang mengambil sebagai input (via stdin ) kunci dan mode dan output (melalui stdout ) skala yang sesuai. Beberapa test case ( 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

Referensi lebih lanjut: Ada
berapa kunci (utama dan kecil) yang ada? Mengapa?

ninjalj
sumber
4
Contoh fitur notasi yang tidak dijelaskan di atas - flat dan double-sharps. Apakah dapat diterima untuk setara output hanya menggunakan catatan dasar dan jurusan sederhana? (Untuk apa nilainya, preferensi saya adalah Anda mengatakan "Tidak" dan perluas spesifikasi sedikit - sepertinya pertanyaan ini bisa memiliki kedalaman tersembunyi yang cukup banyak).
Peter Taylor
@PeterTaylor: Benar. Saya harap hasil edit sudah cukup. Saya perkirakan hasilnya akan seperti yang ditunjukkan, dengan tujuh nama catatan dan kebetulan yang terkait. Ini adalah program yang relatif besar.
ninjalj

Jawaban:

7

GolfScript, 96 karakter

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

Solusi Golfscript yang dapat diuji secara online .

Catatan: Seperti dalam contoh, tombol harus huruf besar sedangkan mode harus diberikan dalam huruf kecil.

Contoh:

>C lydian
C D E F# G A B

>C mixolydian
C D E F G A Bb
Howard
sumber