0

我正在使用 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 个和弦。

那么我怎样才能使样本工作呢?

提前致谢。

4

1 回答 1

0

感谢您指出这一点 - 书中的示例中有一个错误,我必须修复它。

你是对的,它应该说“allChordsAs”(在“Chord”之后有一个“s”)。另一个问题 - 导致 ArrayIndexOutOfBounds 错误的问题 - 是 $3 和 $4。

I、IV 和 V 加在一起只是三个和弦;可以使用 $0、$1 和 $2 访问它们。没有找到 $3 和 $4 的和弦,所以你得到了越界异常。您需要 3 美元和 4 美元的 ChordProgression 中的 5 个和弦才能工作。

因此,您可以: 1. 从 allChordsAs 中删除 $3 和 $4,或者... 2. 在 ChordProgression 中再添加两个和弦

(你知道,每个ChordAs 中的索引值指的是和弦中的单个音符。I、IV 和 V 都是大和弦,每个都有 3 个音符。其他和弦,如七度和弦,有 4 个音符。)

于 2017-06-30T04:43:47.163 回答