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 并接受我的歉意。
给定音乐字符串 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 并接受我的歉意。