[Open Sheet Music Display] 四:曲谱截取谱号异常修复

介绍

OSMD 版本: v1.2.0

OSMD 支持指定开始结束小节来显示对应区间的曲谱,但是发现一个问题就是当截取区间的前面小节包含高音 / 低音谱号时,截取区间的第一小节的谱号显示就会出错

详情

这是正常的解析,从第 5 小节到第 12 小节


image.png

这是错误的解析,从第 9 小节到第 12 小节


image.png

可以看到第 9 小节的左手谱号显示的还是低音谱号

解决办法

这个直接看我在 issue 中的回答把,比较详细了:Wrong key signature(After setting drawFromMeasureNumber) #1079

我这里大概说一下处理方式

  1. 通过 sourceMeasures[measureIndex].lastInstructionsStaffEntries[i].instructions 能够获取到对应小节结尾是否存在谱号信息

  2. 通过 sourceMeasures[measureIndex].verticalSourceStaffEntryContainers[i],staffEntries[j].instructions 能够获取到对应小姐中间是否存在谱号信息

  3. 在调用 osmd.load(url) 之后,osmd.render() 之前,通过上面两个步骤检查是否需要改变谱号

  4. 改变谱号,通过 sourceMeasures[measureIndex].FirstInstructionsStaffEntries.instructions 能够获取到对应小节开头的谱号信息,通过修改 clefTypeline 达到修改谱号的目的

具体对应的值可查看官方的文档:https://opensheetmusicdisplay.github.io/classdoc/enums/clefenum.html

结尾

这应该是我最后一篇文章了,后面应该不会再更了,有缘再见!

你可能感兴趣的:([Open Sheet Music Display] 四:曲谱截取谱号异常修复)