簡體   English   中英

制作一串字母和數字?

[英]Make a string of letters and numbers?

我一直想寫一個音樂程序,但是我對編程並不了解太多,因此可能不會發生。 該程序的目標首先是用字母名稱表示吉他和弦(例如:CMaj = CEG),並且可能有幾種不同類型的和弦(大,小,小等),為了使之最簡單,我我認為我將從C大調開始,因為那里沒有尖銳或平坦的地方。 我的第一個和弦可能是C大調,它是音階的第一,第三和第五( C D E F G AB)。 我的問題是,使用字符串和字符(或其他某種方式,我有點猜測),有沒有一種方法可以將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和5值。 我喜歡使用C的半音並建立每個和弦的想法,但我不知道如何將#放入Scales類(非法字符)。因此,基本上我的問題是如何獲得Chord類從Scales類獲取比例度並將其插入EnumTest類?

(如果還有其他地方,我可以去問一些愚蠢的問題而又不打擾別人,我可以嘗試在那里問= p)

如果您需要有限的一組值並且功能將某些參數綁定到這些值,請使用Enums

我首先看這個問題:

enum Note {
 C, D, E, F, G, A, B
}

class Chord {
   List<Note> notes;
}

在這種情況下,音符列表包含插入順序中和弦的音符。 如果您不關心順序,並且我想和弦不能包含類似的音符,請使用Set作為音符持有人。

另外,如果您需要代碼,請使用Note.ordinal()來返回筆記的代碼。

基本上,音符,和弦和和弦進行過程是枚舉的組合。

我會去的:

首先,請注意一個枚舉。 用半音而不是音符思考要容易得多。

枚舉注{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 {MAJOR(4,7),MINOR(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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM