持久性值中的JFugue解析器异常,在共享相同持续时间的情况下#39;

时间:2015-02-19 05:03:32

标签: java midi javax.sound.midi jfugue

当我尝试执行代码

时,我正在使用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);

我得到一个Parser异常,该字符被解析为音符速度,无法识别:: 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没有任何问题。

1 个答案:

答案 0 :(得分:1)

问题在于:

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

当JFugue解析括号中的元素时,它会将括号后面的内容添加到括号中的每个元素。在这种情况下,JFugue解析器将/.5添加到每个microtone元素,给出:

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

查看第一个令牌。 m392.4/0.25/0.5无效;它包含两个持续时间,而JFugue不知道如何解释这个。在成功解析第一个持续时间(/0.25)之后,JFugue解析器现在期望看到速度,连接器(如+_),或者什么都没有。错误信息似乎有误导性,所以我会调查一下。