完整指南 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 个音符.)