当我尝试执行代码时,我正在使用JFugue

Player myPlayer = new Player();
myPlayer.play( ":DEFAULT(duration=.25)");
Pattern test=new Pattern(" m327.0  m348.8  ( m392.4/0.25  m413.393 m392.4 )/0.5 m348.8 ");
myPlayer.play(test);


我收到解析器异常,无法识别作为音符速度解析的字符:: 0

当我从')/0.5'中删除0时,它可以正常工作

Pattern test=new Pattern(" m327.0  m348.8  ( m392.4/0.25  m413.393 m392.4 )/.5 m348.8 ");


对于所有大于或等于1的值(例如:')/1.5'),都显示相同的例外情况
但是,我注意到m392.4 / 0.25可以正常工作。

最佳答案

问题在这里:

( m392.4/0.25  m413.393 m392.4 )/.5


当JFugue解析括号中的元素时,它将在括号后立即添加任何内容到括号中的每个元素。在这种情况下,JFugue解析器将/.5添加到每个微音元素,从而得到:

m392.4/0.25/0.5 m413.393/0.5 m392.4/0.5


看那个第一个记号。 m392.4/0.25/0.5无效;它包含两个持续时间,而JFugue不知道该如何解释。在成功解析了第一个持续时间(/0.25)之后,JFugue解析器现在期望看到速度,连接器(例如+_)或什么都看不到。错误消息似乎确实令人误解,因此我将对此进行调查。

10-02 09:31