相关:音乐:这和弦里有什么?,弹奏笔记,生成吉他弹片?,将数字对转换为吉他音符
给定吉他指法,输出它代表的和弦。您可以使用标准输入和输出,也可以编写返回字符串的函数。
输入的指法将分类为以下和弦之一,表示如下(如果根音为C):
- 大三合会:
C
- 小三合会:
Cm
- (主要)第七名:
C7
- 小七:
Cm7
和弦可能颠倒了,因此您不能依靠最低音为根。您也不能依靠这是现实世界中的简单指法。更一般而言,程序的输出必须忽略音高的八度,并将与同一音符(即A
)相对应的所有音高均视为相等。
这是code-golf,因此以字节为单位的最短代码获胜。
输入格式
输入是一系列由6个值组成的值,这些值针对标准调音(EADGBE)中的6弦吉他的每个弦指示将在哪个弦上弹奏。这也可能表明该字符串根本没有播放。“零”品格也称为打开位置,品格号从那里开始递增计数。假设吉他有21个品格位置,因此最高品位是20号。
例如,输入X 3 2 0 1 0
意味着将一根手指放在吉他脖子顶部的以下位置:
(6th) |---|---|---|---|---
|-X-|---|---|---|---
|---|---|---|---|---
|---|-X-|---|---|---
|---|---|-X-|---|---
(1st) |---|---|---|---|---
并弹奏第二至第六弦。它对应于以下ASCII标签:
e |-0-|
B |-1-|
G |-0-|
D |-2-|
A |-3-|
E |---|
您可以灵活选择所需的输入类型:每个品格位置可以表示为字符串或数字。未弹奏的吉他弦通常用指示X
,但-1
如果您更方便(例如,使用数字),则可以选择其他前哨值。可以将6个品格位置序列输入为任何列表,数组或序列类型,单个以空格分隔的字符串或作为标准输入-再次选择。
您可以依赖与上述4种和弦类型之一对应的输入。
请在您的帖子中说明您的解决方案采用哪种输入形式。
输出格式
您必须将描述指法所用的和弦的字符串返回或打印到标准输出。此字符串由串联在一起的两个部分组成。资本化问题。允许尾随空格。
第一部分表示根音的一个A
,A#
/ Bb
,B
,C
,C#
/ Db
,D
,D#
/ Eb
,E
,F
,F#
/ Gb
,G
或G#
/ Ab
。(我使用#
的,而不是♯
和,b
而不是♭
,以避免需要的Unicode。),其可以在没有尖锐的或平坦的表达必须没有它们被表达根音音符(从未输出B#
,Fb
或Dbb
); 那些不能用单个尖锐或扁平符号表示的字符(即C#
或Db
,但永不B##
)。换句话说,您必须最大程度地减少便笺名称中的意外(竖琴或扁琴)数量。
第二部分指示和弦的类型,m
对于大三重奏,小三重奏,7
占优势的七分之一或m7
次要的七分之一为空。因此,G G
主音的输出简单为,而D♯次音的第七个输出为D#m7
或Ebm7
。最后的测试案例中可以找到更多示例。
理论与提示
音符
色度标度每个八度有12个音高。当调到相同的气质时,这些音调中的每个音调均与其相邻音调1相等。相距12 个半音(八度)的音高被视为同一音符。这意味着我们可以把笔记像整数模12,从0到11七这些被赋予字母名称2从A到G这是不够的,命名所有的12个音调,但增加记号修补程序:添加♯(尖锐)到音符会使它高半个半音,而加上♭(平整)会使它低半个半音。
和弦
和弦是2个或更多音符一起演奏。和弦的类型取决于音符之间的关系,这可以由音符之间的距离来确定。如前所述,和弦具有根音。在这些示例中,我们将根音符视为0,但这是任意的,在此挑战中,最重要的是模运算中音符之间的距离。答案总是会有一个独特的和弦类型,即三和弦或第七和弦。根音不会始终是最低音高。选择根音,以便可以将和弦描述为以下四种和弦类型之一:
- 一个主要的三合会是带有音符的和弦
0 4 7
。 - 一个小调三是与音符的共鸣
0 3 7
。 - 一个占主导地位(或主/次)七和弦有笔记
0 4 7 10
。 - 一个未成年人(或次/次),七和弦有笔记
0 3 7 10
。3
吉他调音
6弦吉他的标准调音从最低弦开始以E开始,然后以5、5、5、4的间隔敲击音符,然后以5个半音上升。将最低的E设为0,这意味着将吉他的所有琴弦都弹奏会给您编号的音高0 5 10 15 19 24
,其模12等于0 5 10 3 7 0
或音符E A D G B E
。
工作的例子
如果输入为0 2 2 0 0 0
,则对应于音符E B E G B E
,因此仅对应E,B和G。它们形成和弦Em
,可以通过将它们的根编号为E看到它们,从而得到和弦0 3 7
。(对于X 2 X 0 X 0
或,结果将相同12 14 14 12 12 12
。)
如果输入为4 4 6 4 6 4
,则以C♯的根编号为7 0 7 10 4 7
或0 4 7 10
,则答案为C#7
(或Db7
)。如果不是4 4 6 4 5 4
,则编号将为7 0 7 10 3 7
或0 3 7 10
,即C#m7
(或Dbm7
)。
测试用例
X 3 2 0 1 0 ---> C
0 2 2 0 0 0 ---> Em
X 2 X 0 X 0 ---> Em
4 4 6 4 6 4 ---> C#7 (or Db7)
4 4 6 4 5 4 ---> C#m7 (or Dbm7)
0 2 2 1 0 0 ---> E
0 0 2 2 2 0 ---> A
X X 4 3 2 2 ---> F# (or Gb)
3 2 0 0 0 1 ---> G7
X X 0 2 1 1 ---> Dm7
3 3 5 5 5 3 ---> C
4 6 6 5 4 4 ---> G# (or Ab)
2 2 4 4 4 5 ---> B7
0 7 5 5 5 5 ---> Am7
7 6 4 4 X X ---> B
8 6 1 X 1 3 ---> Cm
8 8 10 10 9 8 --> Fm
0 19 5 16 8 7 --> Em
6 20 0 3 11 6 --> A# (or Bb)
X 14 9 1 16 X --> G#m (or Abm)
12 14 14 12 12 12 --> Em
15 14 12 12 12 15 --> G
20 X 20 20 20 20 --> Cm7
X 13 18 10 11 10 --> A#7 (or Bb7)
1以其频率的对数
2或以solfège命名,如do,re,mi。在此挑战中,使用字母名称。
3这也可以称为大六和弦,带有不同的根音选择。在此挑战中,以它的次要第七名称命名。