JFugue:获取音乐字符串持续时间

JFugue: Get music string duration

给定音乐字符串 Aq Aq Bi Bi Ci Ci JFugue 中是否有一个对象可以检索其持续时间(作为双精度或作为字符串)?

例如:

double musicStringDuration = new DurationMapper().getDoubleMSDuration("Aq Aq Bi Bi Ci Ci");
System.out.println(musicStringDuration); \ prints 1.0

JFugue 的 org.jfugue.tools 包包含几个工具,其中一个会告诉您每个声部的总持续时间(无论这些声部是像您所用的 Staccato Strings 还是您导入的音乐的 MIDI 通道) ,或 JFugue 可以解析的任何其他内容——并且很容易编写新的解析器)。 ComputeDurationForEachTrackTool(和另一个工具,GetInstrumentsUsedTool)是 ParserListener,在 JFugue 中有一个常见的模式来使用 Parser Listener:

*Some*Parser parser = new *Some*Parser();
*Another*ParserListener listener = new *Another*ParserListener();
parser.addParserListener(listener);
parser.parse(*whatever the parser takes*);
*Type* *value* = listener.*method*();

特别针对您的情况,您将拥有:

StaccatoParser parser = new StaccatoParser();
ComputeDurationForEachTrackTool tool = new ComputeDurationForEachTrackTool();
parser.addParserListener(tool);
parser.parse("Aq Aq Bi Bi Ci Ci");
double[] durationsOfEachVoice = tool.getDurations();

虽然这比您在问题中建议的语句长,但它非常强大,因为它提供了一种将 any 解析器连接到 any[ 的方法=29=]解析器侦听器或工具。

您会在 durationsOfEachVoice[0] 中找到 1.0。

实际上,您会在其中找到2.0,这是出乎意料的。但我只是 运行 对其进行了测试,四分音符返回 0.5,八分音符返回 0.25。听起来像是 JFugue 版本 6 的修复!与此同时,请除以 2.0 并接受我的歉意。