完整指南 v5 中的 jFugue ChordProgression 示例不起作用
jFugue ChordProgression sample from the complete guide v5 doesn't work
我正在使用 jFugue 5.0.9。我的代码是购买的 jFugue 完整指南中示例的修改版本(它也不起作用。:#)。这是代码:
private void chordProgression2() {
ChordProgression cp = new ChordProgression("I IV V");
for(Chord c:cp.getChords()){
DevLog.debug("chord: "+c);
}
Player player = new Player();
//-------------------------
ChordProgression cp1= cp.eachChordAs("[=10=] [=10=] [=10=] [=10=] [=10=] [=10=] [=10=] [=10=]");
DevLog.debug("generated1::"+cp1.getPattern());
for(Chord c:cp1.getChords()){
DevLog.debug("chord: "+c);
}
ChordProgression cp2=cp1.allChordsAs("[=10=]i i i i i i i i");
DevLog.debug("generated2::"+cp2.getPattern());
player.play(cp2);
//player.play(cp.allChordsAs("[=10=]q [=10=]q [=10=]q [=10=]q q q q [=10=]q"));
//player.play(cp.allChordsAs("[=10=] [=10=] [=10=] [=10=] [=10=]").eachChordAs("V0 [=10=]s s s Rs V1 $!q"));
}
结果:
2017-06-29 17:26:24.986 1个D和弦:C4MAJ
2017-06-29 17:26:25.044 1个D和弦:F4MAJ
2017-06-29 17:26:25.044 1个D和弦:G4MAJ
2017-06-29 17:26:26.087 1 D generated1::C4 C4 C4 C4 E4 E4 C4 C4 G4 E4 C4 C4 F4 F4 F4 F4 A4 A4 F4 F4 C5 A4 F4 F4 G4 G4 G4 G4 B4 B4 G4 G4 D5 B4 G4 G4
2017-06-29 17:26:26.088 1个D和弦:C4MAJ
2017-06-29 17:26:26.088 1个D和弦:F4MAJ
2017-06-29 17:26:26.088 1个D和弦:G4MAJ
线程 "main" java.lang.ArrayIndexOutOfBoundsException 中的异常:3
在 org.jfugue.pattern.ReplacementFormatUtil.replaceDollarsWithCandidates(ReplacementFormatUtil.java:53)
在 org.jfugue.pattern.ReplacementFormatUtil.replaceDollarsWithCandidates(ReplacementFormatUtil.java:16)
在 org.jfugue.theory.ChordProgression.getPattern(ChordProgression.java:90)
在 mozzart.test.jfugueHelloWorld.HelloWorld.chordProgression2(HelloWorld.java:147)
在 mozzart.test.jfugueHelloWorld.HelloWorld.main(HelloWorld.java:40)
这是指南中的原始样本
ChordProgression cp = new ChordProgression("I IV V") .eachChordAs("$0 $0 $0 $0 $1 $1 $0 $0 $2 $1 $0 $0") .allChordAs("$0i $1i $2i $3i $4i $3我 $2i $1i");
模式模式 = cp.getPattern();
在指南中:.allChordAs 一定是打字错误,因为它应该是 .allChordsAs。 (和弦后的 s)。它假设 new ChordProgression("I IV V") .eachChordAs("$0 $0 $0 $0 $1 $1 $0 $0 $2 $1 $0 $0" 到 return 至少 5 个和弦的 ChordProgression,但是我的代码证明了这一点 return只有3个和弦。
那么我怎样才能使示例工作?
提前致谢。
感谢您指出这一点 - 书中的示例中存在错误,我必须加以修正。
你是对的,它应该说 "allChordsAs"(在 'Chord' 之后有一个 's')。另一个问题 - 导致 ArrayIndexOutOfBounds 错误的问题 - 是 $3 和 $4。
I、IV、V合起来只有三个和弦;可以使用 $0、$1 和 $2 访问它们。找不到 $3 和 $4 的和弦,因此您遇到了越界异常。您的 ChordProgression 中需要 5 个和弦,费用为 3 美元和 4 美元。
因此,您可以:
1. 从 allChordsAs 中删除 $3 和 $4,或者...
2. 在 ChordProgression
中再添加两个和弦
(如你所知,eachChordAs 中的索引值指的是和弦中的各个音符。I、IV 和 V 都是大和弦,每个和弦都有 3 个音符。其他和弦,如七和弦,有 4 个音符.)
我正在使用 jFugue 5.0.9。我的代码是购买的 jFugue 完整指南中示例的修改版本(它也不起作用。:#)。这是代码:
private void chordProgression2() {
ChordProgression cp = new ChordProgression("I IV V");
for(Chord c:cp.getChords()){
DevLog.debug("chord: "+c);
}
Player player = new Player();
//-------------------------
ChordProgression cp1= cp.eachChordAs("[=10=] [=10=] [=10=] [=10=] [=10=] [=10=] [=10=] [=10=]");
DevLog.debug("generated1::"+cp1.getPattern());
for(Chord c:cp1.getChords()){
DevLog.debug("chord: "+c);
}
ChordProgression cp2=cp1.allChordsAs("[=10=]i i i i i i i i");
DevLog.debug("generated2::"+cp2.getPattern());
player.play(cp2);
//player.play(cp.allChordsAs("[=10=]q [=10=]q [=10=]q [=10=]q q q q [=10=]q"));
//player.play(cp.allChordsAs("[=10=] [=10=] [=10=] [=10=] [=10=]").eachChordAs("V0 [=10=]s s s Rs V1 $!q"));
}
结果:
2017-06-29 17:26:24.986 1个D和弦:C4MAJ 2017-06-29 17:26:25.044 1个D和弦:F4MAJ 2017-06-29 17:26:25.044 1个D和弦:G4MAJ 2017-06-29 17:26:26.087 1 D generated1::C4 C4 C4 C4 E4 E4 C4 C4 G4 E4 C4 C4 F4 F4 F4 F4 A4 A4 F4 F4 C5 A4 F4 F4 G4 G4 G4 G4 B4 B4 G4 G4 D5 B4 G4 G4 2017-06-29 17:26:26.088 1个D和弦:C4MAJ 2017-06-29 17:26:26.088 1个D和弦:F4MAJ 2017-06-29 17:26:26.088 1个D和弦:G4MAJ 线程 "main" java.lang.ArrayIndexOutOfBoundsException 中的异常:3 在 org.jfugue.pattern.ReplacementFormatUtil.replaceDollarsWithCandidates(ReplacementFormatUtil.java:53) 在 org.jfugue.pattern.ReplacementFormatUtil.replaceDollarsWithCandidates(ReplacementFormatUtil.java:16) 在 org.jfugue.theory.ChordProgression.getPattern(ChordProgression.java:90) 在 mozzart.test.jfugueHelloWorld.HelloWorld.chordProgression2(HelloWorld.java:147) 在 mozzart.test.jfugueHelloWorld.HelloWorld.main(HelloWorld.java:40)
这是指南中的原始样本
ChordProgression cp = new ChordProgression("I IV V") .eachChordAs("$0 $0 $0 $0 $1 $1 $0 $0 $2 $1 $0 $0") .allChordAs("$0i $1i $2i $3i $4i $3我 $2i $1i"); 模式模式 = cp.getPattern();
在指南中:.allChordAs 一定是打字错误,因为它应该是 .allChordsAs。 (和弦后的 s)。它假设 new ChordProgression("I IV V") .eachChordAs("$0 $0 $0 $0 $1 $1 $0 $0 $2 $1 $0 $0" 到 return 至少 5 个和弦的 ChordProgression,但是我的代码证明了这一点 return只有3个和弦。
那么我怎样才能使示例工作?
提前致谢。
感谢您指出这一点 - 书中的示例中存在错误,我必须加以修正。
你是对的,它应该说 "allChordsAs"(在 'Chord' 之后有一个 's')。另一个问题 - 导致 ArrayIndexOutOfBounds 错误的问题 - 是 $3 和 $4。
I、IV、V合起来只有三个和弦;可以使用 $0、$1 和 $2 访问它们。找不到 $3 和 $4 的和弦,因此您遇到了越界异常。您的 ChordProgression 中需要 5 个和弦,费用为 3 美元和 4 美元。
因此,您可以: 1. 从 allChordsAs 中删除 $3 和 $4,或者... 2. 在 ChordProgression
中再添加两个和弦(如你所知,eachChordAs 中的索引值指的是和弦中的各个音符。I、IV 和 V 都是大和弦,每个和弦都有 3 个音符。其他和弦,如七和弦,有 4 个音符.)