从按键和模式缩放


10

你们大多数人可能都知道C大尺度:

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#大调中,F ##在F ##的行中没有偶然出现,偶然出现在密钥签名中-但由于该密钥签名需要F的两个尖锐字符,因此通常将其标记为Ab Major。

改变2 2 1 2 2 2 1间隔,我们得出全音阶的七个不同模式

  • 爱奥尼亚语2 2 1 2 2 2 1-对应主要比例
  • 多利安2 1 2 2 2 1 2
  • Phrygian1 2 2 2 1 2 2
  • 吕底安2 2 2 1 2 2 1
  • Mixolydian2 2 1 2 2 1 2
  • 风神2 1 2 2 1 2 2-对应于自然的次要音阶,当下降时对应于旋律的次音阶(上升时,旋律的次音阶上升了6度和7度。还有一个谐和的次音阶,与自然的相比上升了7度次要)。
  • Locrian1 2 2 1 2 2 2

因此,挑战在于编写一个程序,该程序将键和模式作为输入(通过stdin)作为输入,并输出(通过stdout)相应的比例。一些测试用例(stdinkey mode)=> stdoutscale)):

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
示例中的特征符号没有在上面进行描述-单位和双重利器。仅使用基音和简单专业输出等值的文字是否可以接受?(对于它的价值,我希望您说“ No”并稍微扩展一下规格-看来这个问题可能有很多隐藏的深度)。
彼得·泰勒

@PeterTaylor:对。我希望编辑足够。我希望输出显示为七个音符名称及其对应的偶然字符。这是一个相对较大的程序。
ninjalj 2012年

Answers:


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.