0

我正在尝试使用 jfugue 连续播放大约 200 个音高。所有的音符都在播放,但它是波涛汹涌的。是否有可能让音符以流畅的方式演奏,就像乐器连唱两个音符一样?

4

1 回答 1

2

如果您的音高跨越多个八度音阶,则您必然需要为这些音符触发新的 MIDI Note On 事件。(如果您的 200 个音高彼此相差一个半音,则可以使用音高轮)。由于您需要触发新的音符,因此您会听到音符的开和关,除非您可以设置音符开/音符关速度以使其不明显。您也可以选择一种适合流畅演奏的乐器(例如,可能是长笛,但不是钢琴)。

如果您不想自己列出这 200 个音高中的每一个,您可以编写一个新的 JFugue 函数,例如“:SLUR”,它可能会获取起始音符值、结束音符值、总持续时间和在此期间听到的步骤。您的函数可能会在两个音符之间创建所有微音。然后你可以调用微音预处理器将微音变成音高轮和音符事件。

一旦将 SlurFunction 添加到预处理器上下文(请参阅 StaccatoParser.java),您就可以说:

// Start with Note 20, end at Note 80, 
// play for 2.5 * whole durations, and hear 20 steps in between. 
// (Be sure there are no spaces in your function call)
new Player().play(":SLUR(20,80,2.5,20)"); 

在 JFugue 中编写一个新函数很强大,但绝对是一个高级特性。如果您有兴趣,请参阅源代码中的 TrillFunction 示例。

于 2017-06-02T03:58:58.570 回答