我一直想写一个音乐程序,但是我对编程并不了解太多,所以可能不会发生。该程序的最初目标是用字母名称表示吉他和弦(例如:CMaj = CEG),并且可能有几种不同类型的和弦(大,小,小等),为了使之最简单,我我认为我将从C大调开始,因为那里没有尖锐或平坦的地方。我的第一个和弦可能是C大调,它是音阶(C D E F G A B)的1、3和5。我的问题是,使用字符串和字符(或其他某种方式,我有点猜测),有没有一种方法可以将C表示为String(?)C,其中C = 1,D = 2,E = 3。 。等等。这样,当程序输入大和弦时,它要求相应音阶的1、3和5?
因此,基本上,用户会选择和弦C Maj,将其转换为1、3、5,然后将音阶进行匹配,程序会调用该音阶的这3个特定间隔。
任何帮助将不胜感激,或以其他方式完全考虑这一点。
利用我所掌握的知识,我使用了Oracles网站,找到了他们的枚举示例,并将其组合在一起:
public enum Chord {
CHORD, MAJOR, MINOR, DIMINISHED, BASS, BASS2
}
public enum Scales {
C, D, E, F, G, A
}
public class EnumTest {
Chord chord;
public EnumTest(Chord chord) {
this.chord = chord;
}
public void tellItLikeItIs() {
switch (chord) {
case MAJOR: System.out.println("C, E, G");
break;
case MINOR: System.out.println("C, Eb, G");
break;
default: System.out.println("I screwed up");
break;
}
}
public static void main(String[] args) {
EnumTest firstDay = new EnumTest(Chord.MAJOR);
firstDay.tellItLikeItIs();
EnumTest thirdDay = new EnumTest(Chord.MINOR);
thirdDay.tellItLikeItIs();
}
}
使用Olivers示例,我仍然不明白如何在我制作C大调和弦时指定想要Scales枚举的1、3和5th值。我喜欢使用C中的半音并建立每个和弦的想法,但我不知道如何将#放入Scales类(非法字符)。因此,基本上我的问题是如何获得Chord类从Scales类获取比例度并将其插入EnumTest类?
(如果还有其他地方,我可以去问一些愚蠢的问题而又不打扰别人,我可以尝试在那里问= p)
最佳答案
基本上,音符,和弦和和弦进行过程是枚举的组合。
我会去的:
首先,请注意一个枚举。用半音而不是音符思考要容易得多。
枚举注{
C(1),C#(2),D(3),D#(4),E(5),F(6),F#(7),G(8),G#(8),A(9), A#(10),B(11)}
与mishaddof建议的Note.ordinal()实现
其次,我将有一个Chord枚举,其中包含所有可能的Chord Type,它给出了要添加到根音中的半音的偏移量。例如:
枚举Chord {
主要(4,7),次要(3,6)}
查找CMaj就像获取C音符,然后获取位于音符枚举中4(E)和7(G)半音的音符一样简单。对于G#Maj(8),其C(8 + 4 = 12(-11)= 1,然后D#(8 + 7 = 15-11 = 4)。对于Dmin,D(3),F(3 + 3 = 6)和A#(3 + 7 = 9)