当我尝试执行代码时,我正在使用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解析器现在期望看到速度,连接器(例如+
或_
)或什么都看不到。错误消息似乎确实令人误解,因此我将对此进行调查。