首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >音乐:这和弦里有什么?

音乐:这和弦里有什么?
EN

Code Golf用户
提问于 2014-03-24 15:43:57
回答 8查看 2.3K关注 0票数 42

输入

任何三进和弦的符号(参见http://en.wikipedia.org/wiki/Chord_(音乐)#三合会 )。

输出

构成给定和弦的音符。

示例

输入:AM输出:A C# E

输入:C#m输出:C# E G#

输入:Db+输出:C# F A

输入:C0输出:C D# F#

奖金

-50如果你也能处理第七和弦

-150人实际上演奏和弦的声音

-150用于使用可打印字符显示如何在钢琴上演奏和弦;例如AM

代码语言:javascript
复制
┌─┬─┬┬─┬─┬─┬─┬┬─┲┱─┬─┬─┲━┱┬─┲━┱─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ┃┃ │ │ ┃ ┃│ ┃ ┃ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ┃┃ │ │ ┃ ┃│ ┃ ┃ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ┃┃ │ │ ┃ ┃│ ┃ ┃ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┲┛┗┱┘ │ ┗┯┛└┲┛ ┃ └┬┘└┬┘└┬┘ │
│  │  │  │  │  ┃  ┃  │  │  ┃  ┃  │  │  │  │
└──┴──┴──┴──┴──┺━━┹──┴──┴──┺━━┹──┴──┴──┴──┘

-100用于使用可打印字符显示如何在吉他上演奏和弦;例如AM

代码语言:javascript
复制
x   o   o   o   o   o
┌───┬───┬───┬───┬───┐
│   │   │   │   │   │
├───┼───┼───┼───┼───┤
│   │   │   │   │   │
├───┼───┼───┼───┼───┤
│   │   █   █   █   │
├───┼───┼───┼───┼───┤
│   │   │   │   │   │

(见https://en.wikipedia.org/wiki/Box-drawing_字符)

规则

  • 结果必须是命令行程序或脚本.
  • 输入和输出可以是任何形式,只要它遵循音乐表示法的标准。
  • 吉他或钢琴表示法被认为是有效的当且仅当它包含三个(三进)或四个(第七)所需的音符,而没有其他的。同一音符可以在和弦中出现好几次。
  • 不允许外部库,除了声音生成(在这种情况下,#includeimport.指令不添加到字符计数中)。
  • 这是代码高尔夫,最短的代码获胜!

一点音乐理论.

在现代西方调性音乐中,每个八度音阶都是由十二个连续的音符组成的,常被注意到:

A A# B C C# D D# E F F# G G#

或者:

La La# Si Do Do# Re Re# Mi Fa Fa# Sol Sol#

在这个系统中,我们认为两个连续的音符(例如AA#,或EF)是由一个半音隔开的。同时,注释也是“循环”:G#后面的是A

和弦是由几个(2,3,4,有时更多)音符组成的,“一起听起来很好”。例如,三弦包含三个不同的注释,第七和弦包含四个不同的注释。

让我们将四个三弦定义为:

  • 大三音:包含和弦的根(在这个问题中,作为输入的音符),大调第三(比根高出4个半音),和根的完美第五个(比根高7个半音);这可以是0-4-7的符号。
  • 小三合会,象征0-3-7
  • 增强三位一体,符号0-4-8
  • 减少三合会,象征0-3-6

因此,例如,如果您想要使一个C大三位一体,注意到CCMCmaj,您将需要三个注意事项:

  • 0:根,在本例中是一个C
  • 4:小的三分之一,比根高4个半单位;那是一个E
  • 7:完美的第五,比根高7个半单位:一个G

这就是上面使用的0-4-70-3-70-4-80-3-6符号的含义!对于第七个和弦,使用以下模式:

今天到此为止!现在,用惊人的代码让我惊讶..。如果您有任何问题,请在下面添加一些评论。

EN

回答 8

Code Golf用户

发布于 2014-03-24 21:39:39

Python3 - 315 char

第一次出现在合作伙伴身上!现在只支持小调、大调、缩小和弦和加法和弦。

代码语言:javascript
复制
z=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"];y=[1,2,4,5,6]
def q(a):print(z[a%12])
a=input();k=(ord(a[0])+3)%7;j=k;m=4;s=0;f=7;
for i in y:
    if(k>=i):j+=1
if('#'in a):j+=1
if('b'in a):j-=1
if('m'in a or'0'in a):m=3
if('+'in a or"aug"in a):f=8
if('0'in a or"dim"in a):f=6;m=3
if('ma'in a):m=4
q(j);q(j+m);q(j+f);
票数 5
EN

Code Golf用户

发布于 2014-03-30 15:15:14

Arduino

输入/输出通过COM端口从Arduino发送/接收。用户可以通过终端或Arduino IDE中的串行监视器与此交互。正如你从我的平台选择中可能猜到的那样,我计划包括和弦的实际演奏(虽然我还没有这么做)。

我已经成功地解决了键盘奖金,我试图解决吉他,有限的成功。

和弦框有130个字节,这太长了,不值得。因此,我尝试了另一种方式,只是打印fret数字标签风格。目前,这是81字节的奖金81-100=-19。如果这个方法被认为是有效的,我可以尝试改进它。

使用的和弦都是D型,根在第二弦,第五和弦在第三弦,第三和弦在第一和第四弦。没有使用第5和第6字符串,我在和弦框的右边用X来标记这个字符串(左边可能比较常见,但是在右边标记的例子可以找到)。

因为程序认为F是最低音符(在键盘上的可压缩性,同时又避免了对这个和弦形状过高的烦扰),所以最高的和弦是E(在17 fret上有根)。参见输出示例。

在打高尔夫球方面,键盘更成功。出于上述原因,它是从the而不是C运行的.它必须通过逆时针旋转屏幕90%,当你可以清楚地看到黑色音符的轮廓,以及白色音符与---之间的界限。B和C之间的行可以用一些____扩展几个字节。

接下来我会试着演奏这些音符。这将是有趣的,因为,虽然我相信Arduino Uno有3个内部定时器,一次只能播放一个音符使用内置音调命令。有一个外部库函数,它使用所有的硬件定时器(这会搞乱串行,但无论如何在那个阶段都不需要它)。或者,我可以尝试在软音中产生音调。

如果我成功了,我会把球打得更低,但我不认为它会成为总冠军。

Ungolfed代码

代码语言:javascript
复制
String p="F#G#A#BC#D#E -Mm+",y,d[]=
{"    ","---|"},n="\n";

void setup() {
  Serial.begin(9600);
  Serial.setTimeout(99999);
}

void loop(){
  char x[9]; int r,t,f,i,c=1;
  Serial.readBytesUntil(13,x,9);
  Serial.println(x);  
  r=p.indexOf(x[0]);
  if (x[1]==35|x[1]==98){c=2;r+=x[1]==35?1:-1;}
  f=p.indexOf(x[c])/2;
  t=4-p.indexOf(x[c])%2;

  //chord box
  y=n;for(i=24;i--;)y+=d[1]+(i%4?"":" \n");
  y[89]=y[107]='X'; y[t*4-10]=y[t*4+52]=y[f*4+14]=y[28]='O';
  Serial.print("\t "+String(r+6)+y);
  
  f+=r;t+=r;

  //tab style
  Serial.println(String(t+1)+n+String(r+6)+n
  +String(f-2)+n+String(t+3)+"\nX\nX\n");
  
  f%=12;t%=12;

  //piano
  for(i=0;i<12;i++){
    c=0;
    y=String(p[i]);
    if(y=="#") {c=1;y=p[i-1]+y;}      
    Serial.println(d[c]+"__"+((r-i&&t-i&&f-i)?"":y));
  }  
}

示例输出的文本行间距越小,这看起来就越好。因此,它看起来很棒,当我实际上是编辑的帖子,但可怕的灰色框后发帖。相反,我发布了Arduino系列监视器的屏幕截图,它具有中间行距(因此显示质量)。

票数 5
EN

Code Golf用户

发布于 2014-04-01 13:05:31

Python 506(unicode as 1 Char)-150(声音)-150(键盘)= 206

对于声音播放,它使用pygame.midi。注意,pygame.midi.get_default_output_id()方法不能很好地工作。因此,您可以尝试将行o=Output(get_default_output_id())更改为o=Output(1)o=Output(2)等。通常正确的值在0到5之间。

代码语言:javascript
复制
c=input()
s='C D EF G A B'.index(c[0])+{'#':1,'b':-1,'':0}[c[1:-1]]
m='0mM+'.index(c[-1])
t=s+3+m//2
R=[list(x)for x in['┌─'+'─┬─'*13+'─┐']+['│'+'  │'*14]*5+['└─'+'─┴─'*13+'─┘']]
i=3
for d in[3,6,3,3,6]*2:q=slice(i-1,i+2);R[0][q]='┬─┬';R[1][q]=R[2][q]=R[3][q]='│ │';R[4][q]='└┬┘';i+=d
X=[2]+[1,2,1,2,3,1,2,1,2,1,2,3]*2
from pygame.midi import*
init()
o=Output(get_default_output_id())
for s in[s,t,t+3+m%2]:R[[5,3][s%12 in[1,3,6,8,10]]][sum(X[:s+1])]='o';o.note_on(s+60,127,1)
for r in R:print(''.join(r))

结果

代码语言:javascript
复制
goooolf> python chords2.py
CM
┌─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┬─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │
│ o│  │ o│  │ o│  │  │  │  │  │  │  │  │  │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
goooolf> python chords2.py
Cm
┌─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┬─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││o│ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │
│ o│  │  │  │ o│  │  │  │  │  │  │  │  │  │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
goooolf> python chords2.py
Dm
┌─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┬─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │
│  │ o│  │ o│  │ o│  │  │  │  │  │  │  │  │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
goooolf> python chords2.py
D+
┌─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┬─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │o││ ││o│ │ │ ││ │ │ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │
│  │ o│  │  │  │  │  │  │  │  │  │  │  │  │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
G+
┌─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┬─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││o│ │ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │
│  │  │  │  │ o│  │ o│  │  │  │  │  │  │  │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
goooolf> python chords2.py
Am
┌─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┬─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │
│  │  │  │  │  │ o│  │ o│  │ o│  │  │  │  │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
goooolf> python chords2.py
C#0
┌─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┬─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │o││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │
│  │  │ o│  │ o│  │  │  │  │  │  │  │  │  │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
goooolf> python chords2.py
EbM
┌─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┬─┬─┬┬─┬─┬─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ││ │ │ │ ││ │ │ │ ││ ││ │ │
│ │ ││o│ │ │ ││ ││o│ │ │ ││ │ │ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │ └┬┘└┬┘ │ └┬┘└┬┘└┬┘ │
│  │  │  │  │ o│  │  │  │  │  │  │  │  │  │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/24816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档