从音乐xml解析器解析时,JFugue挂起

时间:2015-09-13 04:51:06

标签: jfugue

我正在尝试编写一个简单的解析器来读取MusicXML并进行回放。我正在使用JFugue 5.0.3。图书馆只是在中间的一半时间挂起。

我的代码: -

 public void play() throws ParserConfigurationException, ParsingException, IOException {
        MusicXmlParser_J parser_j = new MusicXmlParser_J();
        StaccatoParserListener listener = new StaccatoParserListener();
        parser_j.addParserListener(listener);
        parser_j.parse(musicXMLFile);
        Player player = new Player();
        final Pattern musicXMLPattern = listener.getPattern();
        player.play(musicXMLPattern);
}

尝试使用无用的错误消息构建MusicXML文件后,此代码失败: -

attempting to build file
Oops something went wrong. The error isConnection timed out

它有时会起作用,当它发挥作用时,就像魅力一样,在几毫秒之内。什么是JFugue尝试通过网络下载内容?一点调试显示它的工作原理是下载

对于从事这方面工作的人来说,几乎没有问题: -

  1. 为什么此代码不适用于MusicXMLParserListener类?此类因任意空指针异常而失败,因为它需要定义Staccato解析器。为什么?与MusicXML的两个不同的听众有什么交易 - MusicXMLParserListener_J和MusicXMLParserListener_R?请不要向消费者揭露破碎的东西。

  2. 我读过JFugue支持MusicXML,我希望这可以毫无问题地工作。

  3. JFugue是否有使用MusicXML的示例?

1 个答案:

答案 0 :(得分:1)

您看到的两个不同的解析器是JFugue 5.0+中的MusicXML功能尚未完全完成的结果(在JFugue下载页面上提到)。这些是由开源社区中的两个开发人员提供的两个实现。根据您的问题,我刚刚更新了JFugue发行版:我将其中一个解析器移出,并将另一个解析器重命名为MusicXmlParser。

事实证明,其他解析器MusicXmlParser_R是两者中最好的。当然,没有用户会对此有所了解。我对暴露不完整的能力表示歉意。为了记录,"哎呀,出了点问题"不是JFugue错误消息,而是"尝试构建文件"在MusicXmlParser_J中,现在已经不在代码中了。

以下代码来自test / org.jfugue.musicxml,演示了如何使用MusicXmlParser。

MusicXmlParser musicXmlParser = new MusicXmlParser();
StaccatoParserListener spl = new StaccatoParserListener();
musicXmlParser.addParserListener(spl);
musicXmlParser.parse(new File("src/test/resources/HelloWorldMusicXml.xml")); 

请注意,目前没有为JFugue 5.0实现MusicXmlParserListener。我已经更新了下载页面以明确这一点。

JFugue中的MusicXML功能完全由社区贡献。