0

我正在尝试编写一个简单的解析器来读取 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,我希望它可以正常工作。

有 JFugue 使用 MusicXML 的例子吗?

4

1 回答 1

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 功能完全由社区贡献。

于 2015-09-14T12:27:58.127 回答