Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFugue音符转换不正常_Java_Jfugue - Fatal编程技术网

Java JFugue音符转换不正常

Java JFugue音符转换不正常,java,jfugue,Java,Jfugue,我试图转置一个音符,但它返回的结果不是它应该的结果。你能检查一下我的密码并告诉我哪里错了吗 public int changeTone(String chord) { int changeTone = 0; switch(chord) { case "I": changeTone = 0; break; case "II": change

我试图转置一个音符,但它返回的结果不是它应该的结果。你能检查一下我的密码并告诉我哪里错了吗

public int changeTone(String chord) {
            int changeTone = 0;
            switch(chord) {
            case "I":
            changeTone = 0;
            break;
        case "II":
            changeTone = 1;
            break;
        case "III":
            changeTone = 2;
            break;
        case "IV":
            changeTone = 3;
            break;
        case "V":
            changeTone = 4;
            break;
        case "VI":
            changeTone = 5;
            break;
        case "VII":
            changeTone = 6;
            break;
        case "i":
            changeTone = 0;
            break;
        case "ii":
            changeTone = 2;
            break;
        case "iii":
            changeTone = 4;
            break;
        case "iv":
            changeTone = 5;
            break;
        case "v":
            canviDeTo = 7;
            break;
        case "vi":
            changeTone = 9;
            break;
        case "vii":
            changeTone = 11;
            break;
        default:
            System.out.println("Vaya"); 
            break;

        }
        return changeTone ;
    }

public String getChord(int interval) {
    String chord = "";

    switch(interval) {
            case "0":
                chord = "C";
                break;
            case "2":
                chord = "D";
                break;
            case "4":
                chord = "E";
                break;
            case "5":
                chord = "F";
                break;
            case "7":
                chord = "G";
                break;
            case "9":
                chord = "A";
                break;
            case "11":
                chord = "B";
}
return chord;
}

public String WriteChord(String chords, String tone) {
    String finalChord;
    String[] chordArray = chords.split("-");
    for(int i=0; i < chordArray.length; i++){
        String chord = chordArray[i];
        int interval = changeTone(chord);
        chord = getChord(interval);
        Note note = new Note(chord);
        finalChord += note.changeValue(interval).toString() += "-";
    }
return finalChord;
public int changeTone(弦和弦){
int changeTone=0;
开关(和弦){
案例“一”:
变音=0;
打破
案例“二”:
变音=1;
打破
案例“三”:
变音=2;
打破
案例“四”:
变音=3;
打破
案例“V”:
变音=4;
打破
案例“六”:
变音=5;
打破
案例“七”:
变音=6;
打破
案例“一”:
变音=0;
打破
案例“二”:
变音=2;
打破
案例“三”:
变音=4;
打破
案例“四”:
变音=5;
打破
案例“v”:
canviDeTo=7;
打破
案例“六”:
变音=9;
打破
案例“七”:
变音=11;
打破
违约:
系统输出.println(“Vaya”);
打破
}
返回交换音;
}
公共字符串getChord(整数间隔){
弦=”;
开关(间隔){
案例“0”:
chord=“C”;
打破
案例“2”:
chord=“D”;
打破
案例“4”:
chord=“E”;
打破
案例“5”:
chord=“F”;
打破
案例“7”:
chord=“G”;
打破
案例“9”:
chord=“A”;
打破
案例“11”:
chord=“B”;
}
回音和弦;
}
公共字符串writecord(弦和弦、弦音){
字符串finalChord;
String[]chordArray=和弦.split(“-”);
对于(int i=0;i
}


好的,那么它试图做的是改变给定和弦以间隔进行的值。类似于I-III-IV-IV。用户将选择一个音调(音调,I音符),和弦将以音符作为参考进行更改。因此,例如,运行代码应执行以下操作:

  • 用户选择一个音调,说“E”
  • 该代码生成一个和弦级数,如“I-III-IV-IV”
  • 代码获取I和III、I和IV以及I和IV之间的间隔
  • 首音符“E”随时间间隔改变其值
预期产出为: E-G#-A#-A# 实际输出为: C-G#-G#-Bb

为什么这样不行?我已经简化了我的代码,所以如果您需要更多,请告诉我!提前谢谢


编辑:我已经更正了代码并添加了预期/获得的输出

JFugue已经支持音程和和弦进行。我希望以下代码满足您的需要:

import org.jfugue.theory.ChordProgression;

public static void main(String[] args) {
    ChordProgression cp = new ChordProgression("I-III-IV-iv").setKey("E");
    System.out.println(cp);
}
此代码的输出为:

E4MAJ G#4MAJ A4MAJ A4MIN
您可以在播放器中直接播放:

Player player = new Player();  // Don't forget to import org.jfugue.player.Player
player.play(cp);
如果由于四分之一音符的默认持续时间,这对您来说有点太快,您可以将每个和弦播放更长的时间,比如说整个音符:

player.play(cp.eachChordAs("$!w"));
如果您只需要根,在本例中是[E,G#,A,A](如果您发现我的音乐理论有错误,请告诉我),您可以使用:

cp.eachChordAs("$0");

中有几个和弦推进示例,您展示的代码没有编译…它只是其中的一部分,这部分没有主函数或任何东西,那么该部分就没有编译;IE:public-getChord(int-interval){我的错,应该是public-String-getChord(int-interval)。。。