ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Audiveris 小节重复记号(Bar Repeat)识别、编辑与 MusicXML 导出实战指南

Audiveris 小节重复记号(Bar Repeat)识别、编辑与 MusicXML 导出实战指南 桌面应用计算机视觉图像处理OCR【免费下载链接】audiverisLatest generation of Audiveris OMR engine项目地址https://gitcode.com/gh_mirrors/au/audiveris点击查看免费下载小节重复记号bar repeat是乐谱中常见的一类缩写记号用于指示前面已写出的若干小节必须原样重复。本文以 Audiveris OMR 引擎为对象系统讲解该引擎自 release 5.3 起对 1、2、4 斜杠小节重复记号及其上方可选小节计数的识别模型、形状面板手工编辑流程以及 MusicXML 导出时的具体行为并结合仓库源码给出可验证的实现依据。读完本文你将能够在 Audiveris 中正确识别、修正并导出包含小节重复记号的乐谱。小节重复记号在整页乐谱中的真实分布示例图片源自 bar_repeats.png一、什么是小节重复记号在乐谱记谱法中**小节重复记号bar repeat / measure repeat**表示其前方已经写出的若干小节必须被原样重复。它通常以带斜杠的记号形态出现在小节内部或小节线上方记号的斜杠数量1、2 或 4决定了要重复的前置小节数量记号上方可选的小节计数如数字2进一步明确重复范围在规范记谱中应与斜杠数量一致。在 Audiveris 的源码中这一语义被直接固化在形状定义里。打开 Shape.java 可以看到三个核心逻辑形状REPEAT_ONE_BAR(Repeat last bar), REPEAT_TWO_BARS(Repeat last two bars), REPEAT_FOUR_BARS(Repeat last four bars),对应的斜杠数量由 Shape.getSlashCount() 统一返回public int getSlashCount () { return switch (this) { case REPEAT_ONE_BAR - 1; case REPEAT_TWO_BARS - 2; case REPEAT_FOUR_BARS - 4; default - 0; }; }可见斜杠数 重复小节数这一对应关系是引擎识别与导出的基础约定。二、示例解读一个、两个与四个小节重复先看上文整页示例bar_repeats.png所描述的场景全曲包含两个系统system第一个系统有 4 个小节#1、#2、#3、#4第二个系统有 3 个小节#5、#6、#7第一个系统中小节 #2 和 #3 内部各有一个单小节重复记号one-bar repeat其含义是重复小节 #1 两次即 #2 重复 #1、#3 再重复 #1第二个系统中小节 #6 与 #7 之间的小节线上方出现一个两小节重复记号two-bar repeat表示重复其前方两个小节#4 和 #5即 #6、#7 的内容分别等于 #4、#5同理还可能遇到四小节重复记号four-bar repeat用于重复前方四个小节。也就是说一个重复记号实际吃掉了斜杠数量个物理小节这些小节在谱面上不必再写出完整音符但在导出的结果中会被展开成真实内容详见第五节。三、识别模型从形状到符号解释3.1 识别能力release 5.3 起根据官方文档Audiveris OMR 引擎自 release 5.3 起能够自动识别两类信息重复记号本身支持 1、2 或 4 条斜杠三种形态记号上方的可选小节计数该计数应与其斜杠数量一致。文档中的bar_repeat_2.png展示了带计数与不带计数的典型形态单小节重复记号的两种形态是否携带上方小节计数图片源自 bar_repeat_2.png3.2 形状集合的归属在 ShapeSet.java 中三个重复记号形状被归入RepeatBars列表/** Repeat bars. */ public static final ListShape RepeatBars Arrays.asList( REPEAT_ONE_BAR, REPEAT_TWO_BARS, REPEAT_FOUR_BARS);而 Barlines 形状集合即形状面板中的Barlines组则把常规小节线、反复号左右反复/背靠背反复、花括号、括号、反复点REPEAT_DOT与上述RepeatBars全部收纳在一起这正是文档所述三个符号位于Barlines集合中的源码出处。用于标注重复小节数的计数形状则定义在 MeasureCounts 列表中包含自定义数字NUMBER_CUSTOM以及TIME_ONETIME_EIGHT等时间样式数字Times 集合由MeasureCounts、TIME_CUSTOM自定义与WholeTimes组成对应文档所述小节计数可从Times集合中选取。3.3 符号解释Inter与关系建模自动识别时InterFactory.java 会将识别出的三个形状统一实例化为MeasureRepeatInter// Measure repeat signs case REPEAT_ONE_BAR: case REPEAT_TWO_BARS: case REPEAT_FOUR_BARS: return MeasureRepeatInter.create(glyph, shape, grade, closestStaff); // Staff is OKMeasureRepeatInter.java 是这一功能的符号解释核心类其关键设计包括JAXB 根元素名称为measure-repeat可直接序列化进工程文件实例被added()后自动登记到所在MeasureStack小节栈remove()时同步从栈中移除保证与节奏/小节体系联动支持手动创建的构造函数glyph为 null 的 ghost 对象供形状面板拖放使用编辑器为HorizontalEditor拖放时通过deriveOnStaffMiddleLine将其定位到谱表中线便于对齐。小节重复记号与其上方计数之间的关联由 MeasureRepeatCountRelation.java 建模其 JAXB 名称为measure-repeat-count是Support类型的单源单目标关系源码注释明确说明重复记号本身并不强制要求计数因为斜杠数已经表达了重复次数计数仅作为补充信息。在小节层面Measure.java 用LinkedHashSetMeasureRepeatInter repeatSigns保存本小节内的重复记号并对外提供只读视图 getMeasureRepeats()。值得一提的是旧版本中曾使用SimileMarkInter同前记号表达此类语义现已被repeatSigns取代并在加载旧工程时通过 SimileMarkInter.replace() 自动迁移体现了模型演进脉络。四、手工编辑从形状面板分配与拖放当自动识别不理想例如记号被误判、位置偏移时可以手动处理重复记号本身从形状面板的Barlines集合中选择REPEAT_ONE_BAR、REPEAT_TWO_BARS或REPEAT_FOUR_BARS三个符号之一手动分配assign或直接拖放到目标位置。面板形态见下图Barlines形状面板中的小节重复记号与相关符号图片源自 bar_repeat_palette.png小节计数可选从形状面板的Times集合中选取。两种途径选择Parts数字中的预定义项如TIME_ONETIME_EIGHT等现成数字形状或选择自定义0项NUMBER_CUSTOM/TIME_CUSTOM再手动输入所需数值。注Times面板截图见仓库中的 time_palette.png。计数并非必需——如前所述斜杠数已隐含重复次数计数应与其保持一致。拖放/编辑过程由MeasureRepeatInter的getEditor()返回HorizontalEditor与deriveFrom()定位到谱表中线共同驱动可参考 MeasureRepeatInter.java。若计数与记号建立了关联MeasureRepeatCountRelation会在关系增删时对其执行异常检查checkAbnormal帮助及时发现不一致。五、MusicXML 输出行为5.1 导出逻辑Audiveris 的 MusicXML 导出器在 PartwiseBuilder.java 中处理小节重复记号其核心流程是若当前小节带有重复记号repeats非空取记号形状的斜杠数slashes在小节属性中插入measure-repeat元素写入slashes与typestartfinal MeasureStyle measureStyle factory.createMeasureStyle(); final MeasureRepeat repeat factory.createMeasureRepeat(); repeat.setSlashes(new BigInteger( slashes)); repeat.setType(StartStop.START); measureStyle.setMeasureRepeat(repeat); getAttributes().getMeasureStyle().add(measureStyle);随后向前回溯slashes个不含重复记号的前置小节getPrecedingInScore()逐级前移若中途遇到另一个重复记号且尚未收集到内容则记录告警Abnormal measure sequence before repeat sign并安全终止将回溯到的小节按逻辑内容逐一复制展开每个斜杠对应一个小节展开小节的编号形如stack.getScoreId(...) (i 1)例如41、42。源码中// TODO: take into account the number symbol if any above the measure repeat sign表明当前版本导出时以斜杠数为准复制展开小节记号上方的小节计数暂未参与展开计算这一点在实际使用时需要注意。5.2 显示与播放的已知差异文档明确记录了在不同软件中观察到的行为差异这是导出后验证的重要参考显示方面使用Finale版本 27读取时重复记号按预期显示使用MuseScore版本 3.6.2读取时重复记号本身不显示但被重复的小节如同被物理复制一样完整呈现播放方面无论 Finale 还是 MuseScore重复小节都能正确发声即播放效果符合乐谱意图。换言之Audiveris 导出的 MusicXML 在语义上是正确的播放无误差异主要出现在部分阅读器对measure-repeat元素的可视化支持程度不同。六、小结小节重复记号是 Audiveris 自 release 5.3 起完整支持的记谱元素其技术链路清晰可查环节载体说明形状定义Shape.javaREPEAT_ONE_BAR/REPEAT_TWO_BARS/REPEAT_FOUR_BARS斜杠计数Shape.getSlashCount()返回 1、2、4面板分组ShapeSet.javaBarlines集合含RepeatBars与Times集合自动识别InterFactory.java实例化MeasureRepeatInter符号解释MeasureRepeatInter.java与小节栈联动、支持手动编辑计数关系MeasureRepeatCountRelation.java记号与计数的一对一关联MusicXML 导出PartwiseBuilder.java写入measure-repeat并复制展开前置小节实操建议识别完成后先核对记号斜杠数是否符合预期如需要计数标注从Times集合选取预定义数字或自定义值导出 MusicXML 后在 Finale 中检查记号显示在 MuseScore 中核对小节是否被正确展开并以播放验证语义完整性。赞分享桌面应用计算机视觉图像处理OCR【免费下载链接】audiverisLatest generation of Audiveris OMR engine项目地址https://gitcode.com/gh_mirrors/au/audiveris点击查看免费下载相关推荐Audiveris 节拍器标记Metronome Mark全解析自动识别、手动编辑与 MusicXML 导出Audiveris 节拍器标记Metronome Mark全解析自动识别、手动编辑与 MusicXML 导出 导读节拍器标记Metronome Mar桌面应用计算机视觉图像处理OCRAudiveris 多小节休止符Multi-Measure Rest识别与编辑实战指南Audiveris 多小节休止符Multi Measure Rest识别与编辑实战指南 本文基于 Audiveris 官方文档 multi_rest.md桌面应用计算机视觉图像处理OCRAudiveris 指法与拨弦标注Fingering Plucking识别、手动插入与 MusicXML 导出实战指南Audiveris 指法与拨弦标注Fingering Plucking识别、手动插入与 MusicXML 导出实战指南 本篇技术指南聚焦 Audiver桌面应用计算机视觉图像处理OCR上一篇终极Yuzu模拟器下载指南三步获取最佳版本体验下一篇ng-zorro-antd Tree View 教程使用 nzChildrenAccessor 实现基本的选中、禁用与展开创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表