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

JFugue hangs while parsing from music xml parser

我正在尝试编写一个简单的解析器来读取 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 class?此 class 因任意空指针异常而失败,因为它期望定义 Staccato 解析器。为什么? MusicXML 的两个不同听众 - MusicXMLParserListener_J 和 MusicXMLParserListener_R 有什么关系?请不要将破损的东西暴露给消费者。

  2. 我听说 JFugue 支持 MusicXML,我希望它能正常工作。

是否有 JFugue 使用 MusicXML 的示例?

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

事实证明,other 解析器 MusicXmlParser_R 是两者中较好的。当然,没有用户会对此有任何想法。我很抱歉暴露了一个不完整的功能。郑重声明,"Oops, something went wrong" 不是 JFugue 错误消息,但 "attempting to build file" 在 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 功能完全由社区贡献。