我正在使用 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("$0 $0 $0 $0 $1 $1 $0 $0 $2 $1 $0 $0");
DevLog.debug("generated1::"+cp1.getPattern());
for(Chord c:cp1.getChords()){
DevLog.debug("chord: "+c);
}
ChordProgression cp2=cp1.allChordsAs("$0i $1i $2i $3i $4i $3i $2i $1i");
DevLog.debug("generated2::"+cp2.getPattern());
player.play(cp2);
//player.play(cp.allChordsAs("$0q $0q $0q $0q $1q $1q $2q $0q"));
//player.play(cp.allChordsAs("$0 $0 $0 $0 $1 $1 $2 $0").eachChordAs("V0 $0s $1s $2s 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 生成1::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 线程“主”java.lang 中的异常.ArrayIndexOutOfBoundsException: 3 at org.jfugue.pattern.ReplacementFormatUtil.replaceDollarsWithCandidates(ReplacementFormatUtil.java:53) at org.jfugue.pattern.ReplacementFormatUtil.replaceDollarsWithCandidates(ReplacementFormatUtil.java:16) at 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 $3i $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" 返回至少 5 个和弦的 ChordProgression,但是我的代码刚刚证明它只返回 3 个和弦。
那么我怎样才能使样本工作呢?
提前致谢。