首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFugue注释更改不能正常工作

JFugue注释更改不能正常工作
EN

Stack Overflow用户
提问于 2018-11-06 09:56:45
回答 1查看 174关注 0票数 0

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

代码语言:javascript
复制
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;

}

好的,这是要做的是改变一个和弦的值给定一个和弦的进度与间隔。就像III iv-iv。用户将选择一个音调(调性,我音符),和弦将被改变,以音符作为参考。因此,例如,运行代码应该执行以下操作:

  • 用户选择一个声调,说"E“。
  • 代码生成一个和弦级数,例如“III iv-iv”。
  • 代码得到I和III、I和IV、I和iv之间的间隔。
  • 初始注"E“随时间间隔改变其值。

预期输出为:E#-A#-A#-A#实际输出为:C#-G#-Bb

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

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

EN

回答 1

Stack Overflow用户

发布于 2018-11-13 03:32:26

JFugue已经有了对音程和和弦进度的支持。我希望下面的代码能够满足您的需要:

代码语言:javascript
复制
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);
}

此代码的输出是:

代码语言:javascript
复制
E4MAJ G#4MAJ A4MAJ A4MIN

你可以直接在玩家中玩这个游戏:

代码语言:javascript
复制
Player player = new Player();  // Don't forget to import org.jfugue.player.Player
player.play(cp);

如果这对你来说有点太快了,因为一个季度音符的默认持续时间,你可以把每个和弦作为一个更长的音符来演奏,比如说一个完整的音符:

代码语言:javascript
复制
player.play(cp.eachChordAs("$!w"));

如果您只想要根,在本例中是E、G#、A、A(如果您发现我的音乐理论有错误,请告诉我),您可以使用:

代码语言:javascript
复制
cp.eachChordAs("$0");

http://www.jfugue.org/examples.html中有几个Chord级数示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53169518

复制
相关文章

相似问题

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