gpt4 book ai didi

java - JFugue 音符更改无法正常工作

转载 作者:行者123 更新时间:2023-12-02 10:37:32 25 4
gpt4 key购买 nike

我正在尝试转置音符,但它返回的结果不是应有的结果。您能检查一下我的代码并告诉我哪里错了吗?

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;

}

<小时/>

好的,所以这试图做的是改变和弦的值给定和弦进行和音程。就像 I-III-IV-iv 一样。用户将选择一个音调(我注意到的是主音),并且将以该音符作为引用来更改和弦。因此,例如,运行代码应执行以下操作:

  • 用户选择一个语气,说“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");

http://www.jfugue.org/examples.html 有几个和弦进行示例

关于java - JFugue 音符更改无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53169518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com