首页 文章

在和弦进程中计算吉他和弦的最舒适的手指位置

提问于
浏览
3

我想计算用不同的“指法”(例如开弦,和弦和弦)演奏特定和弦进行是多么有趣 .

例如,如果我们有和弦进展 G D Em C . 对于大多数人来说,最舒适的玩法可能就像开放的和弦一样:

G

D

Em

C

如果我们的和弦进程包括一个在标准调音中不能作为开放和弦的和弦,那就不再那么简单了 .

例如 E C#m G# A

E

C#m

G#

A

在那种情况下,我们有

  • C#m 在Am形状的第4个音品上播放 .

  • G# 在G形的第一个音品上 .

我选择的图表显示了一种非常不舒服的方式来“指”和弦:以G形状演奏的和弦通常非常不舒服;许多“跳跃”(开=>第4个烦恼=>第1个烦恼=>打开)

A(在我看来)更舒适的方式是:

E

C#m

G# 2

A 2

可以说,打开 A 可能更容易 . 特别是如果序列连续多次播放 .

我想说的是,在计算最舒适的指法时,有许多因素需要考虑 . 并且有些情况归结为个人偏好 .
但我认为有些情况下大多数吉他手会同意某些指法会更舒服 .

我'm not exactly sure what I'米要求 . 我现在拥有的是a big library of guitar chords that includes finger positions .

我会说我的问题是:我需要一种公式,我需要合理的数字来表示大多数吉他手可以达成一致的公式中的因素 . (例如,G形barre比Em形状的barre更不舒服;超过15个音品的和弦开关不如弦乐开关超过2个音品;等等 . )

1 回答

  • 0

    Fair warning: I am not a guitarist :)

    也许你可以通过和弦列表进行迭代并为每个和分配一种“得分”,允许你从最高“得分”到最低订单 . 例如,如果给定的和弦有一个G形条纹,则在其得分上加10,但如果它有一个Em形状,则只加5 . 或者,如果它有超过15个音符的和弦开关,则减去15个点,但只减去如果涉及2个烦恼等2分

    换句话说,每个和弦都被赋予了具有理想品质的分数,而最舒适的和弦最终得分最多 .

    一点伪代码:

    // I saw that your library has `chords` as an object, so I will try to work with that
    var chords = {/*...*/};
    
    for (chord of chords) {
      chord.points = 0;
    
      // This is where you investigate the chord, awarding points for desirable qualities.
    
      // I suppose the chord's can be somehow determined from the fingering, but your the guitarist, not me! :)
    
      if (chord.shape == 'G') {
        chord.points += 10;
      } else if (chord.shape == "Em") {
        chord.points += 5;
      }
    
      chord.points -= chord.numberOfFrets;
      // or, if # of frets should be weighted more heavily,
      chord.points -= 100 * chord.numberOfFrets;
    
    }
    
    // now we can rank the chords by score
    
    var rankedChords = Object.keys(chords).sort((a,b) => chords[a].score - chords[b].score);
    

    你的算法可能从基础开始,但是当你想到用数字排序和弦的方法时,你的结果会变得更有意义 . 这听起来像一个整洁的项目,所以我希望它适合你!

相关问题