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 パーサーが定義されていることを想定しているため、任意の null ポインター例外で失敗します。なんで?そして、MusicXML の 2 つの異なるリスナー (MusicXMLParserListener_J と MusicXMLParserListener_R) はどうなるのでしょう? 壊れたものを消費者に公開しないでください。

  2. JFugue が MusicXML をサポートしていることを読んだことがあり、これが問題なく動作することを期待していました。

JFugue が MusicXML を使用している例はありますか?

4

1 に答える 1

1

表示される 2 つの異なるパーサーは、JFugue 5.0+ の MusicXML 機能がまだ完全に完成していないためです (JFugue ダウンロード ページに記載されています)。これらは、オープン ソース コミュニティの 2 人の開発者によって提供された 2 つの実装です。あなたの問題に基づいて、JFugue ディストリビューションを更新しました。パーサーの 1 つを移動し、もう 1 つのパーサーの名前を単に MusicXmlParser に変更しました。

もう 1 つのパーサーである 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 に答える