For*_*vin 6 javascript node.js guitar music-notation
我想计算用不同的"指法"(例如开弦,和弦和弦)演奏一个特定的和弦进行是多么有趣.
例如,如果我们有和弦进行G D Em C.对于大多数人来说,最舒适的玩法可能就像开放式和弦一样:
如果我们的和弦进程包括一个在标准调音中无法作为开放和弦的和弦,那就不再那么简单了.
在那种情况下,我们有
C#m 这是在Am形状的第4个音品上演奏的. G# 在第一个G形的音品上.我选择的图表显示了一种非常不舒服的方式来"指"和弦:以G形状演奏的和弦通常非常不舒服; 许多"跳跃"(开=>第4个烦恼=>第1个烦恼=>打开)
A(在我看来)更舒适的方式是:
可以说,打开一个开放可能更容易A.特别是如果序列连续多次播放.
我想说的是,在计算最舒适的指法时,有很多因素需要考虑.并且有些情况归结为个人偏好.
但我认为在某些情况下,大多数吉他手会同意某些指法会更舒适.
我不确定我要求的是什么.我目前拥有的是一个包含手指位置的吉他和弦大库.
我会说我的问题是:我需要一种公式,我需要合理的数字来表示大多数吉他手可以达成一致的公式中的因素.(例如,G形barre比Em形状的barre舒适;超过15个音品的和弦开关不如弦乐开关超过2个音品;等等.)
公平警告:我不是吉他手:)
也许您可以遍历和弦列表并为每个和弦分配一种“分数”,从而允许您按从最高“分数”到最低“分数”的顺序对列表进行排序。例如,如果给定的和弦具有 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);
Run Code Online (Sandbox Code Playgroud)
您的算法可能从基础开始,但当您想到对和弦进行数字排名的方法时,您的结果将变得更有意义。这听起来是一个很棒的项目,所以我希望它对你来说一切顺利!
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |