首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VexFlow JavaScript -有什么方法可以用rest(r/4)修复多个声音而不与音符(c/5)重叠?

VexFlow JavaScript -有什么方法可以用rest(r/4)修复多个声音而不与音符(c/5)重叠?
EN

Stack Overflow用户
提问于 2018-08-22 09:47:59
回答 1查看 170关注 0票数 0

如何使rest不高或低(不要更改键"r/4")。链接演示:JSFindle

下面是代码演示:

代码语言:javascript
复制
// Create the notes

  new VF.StaveNote({ keys: ["c/4", "e/4", "g/4"], duration: "q" })

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-13 09:59:32

现在还不清楚你想做什么,但是看看JSFiddle,你在同一个音阶上有两个声音,第一个声音的其他声音和第二个音符的音符重叠。

有一个声音用下面的代码创建其余的代码:

代码语言:javascript
复制
  new VF.StaveNote({ keys: ["r/4"], duration: "qr" }),

另一个声音在与其他声音相同的位置有一个音符:

代码语言:javascript
复制
  new VF.StaveNote({ keys: ["c/5"], duration: "h" })

假设第二个声音中的音符在你想要的位置,你可以控制第一个声音中其他音符的垂直位置,这样它就不会重叠。您可以通过使用一个便笺字母来实现这一点,该字母指示希望其余部分出现在墙壁上的高度。例如,替换此代码:

代码语言:javascript
复制
  new VF.StaveNote({ keys: ["r/4"], duration: "qr" }),

使用此代码:

代码语言:javascript
复制
  new VF.StaveNote({ keys: ["c/4"], duration: "qr" }),

您的rest将出现在当前与之重叠的C4下面的C5注释中。

如果不想更改键"r/4",可以更改键"c/4“以避免重叠。

如果你真的想让剩下的和笔记出现在同一高度上,而不是重叠,我想你最终会得到一些音乐无法读懂的东西,但你可以通过从StaveNote派生出自己的类并重写getAbsoluteX来完全控制它的位置(不管是音符还是其他):

代码语言:javascript
复制
class FixedStaveNote extends VF.StaveNote {
    getAbsoluteX() {
        return 72;
    }
};

(您需要对重叠的StaveNotes执行此操作,并返回不同的值。如果您只对第一个格式化程序执行此操作,则格式化程序将对齐第二个格式化程序)。

最后,如果您想在不更改键"r/4“的情况下控制其余部分的垂直位置,则可以重写calculateKeyProps:

代码语言:javascript
复制
class FixedStaveNote extends VF.StaveNote {
  calculateKeyProps() {
    super.calculateKeyProps();

    for (let i = 0; i < this.keyProps.length; ++i) {
      const props = this.keyProps[i];
      if (props.key === 'R') {
        props.line = 0;
      }
    }
  }
}

这将改变其余部分将出现在其中的stave行。

下面是一个更新的JSFiddle,使用calculateKeyProps的覆盖没有重叠。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51964107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档