吉他初学者学习网站搭建系列(4)——如何查询和弦图

文章目录

背景

作为吉他初学者,如何根据和弦名快速查到和弦图是一个必不可少的功能。以往也许你会去翻和弦的书籍查询,像查新华字典那样,但是有了互联网后我们不必那样,只需要在网页上输入和弦名,就能查到和弦图了。

实现

ChordDb

ChordDb是一个js版的和弦数据库,虽然还有一些缺失,但是对于rookie已经足够了。有些人看这个库可能不知道怎么用,其实我们只需要拷贝lib/guitar.json到自己的工程目录即可。这个json文件收录了全部的和弦,把这个json打印出来,如下图:

可以看到,这个文件收录了2069个和弦,标准调,和弦根音12个,和弦后缀63个。

我们看一下大C和弦:

key: 根音

suffix: 后缀

positions: 指法

capo: 品柱

baseFret: 基本品

fingers: 一弦到六弦对应的手指0: 不按 1: 食指 2: 中指 3: 无名指 4: 小拇指

frets: 一弦到六弦按几品,-1: 不按

midi: MIDI音符代码

有了这些和弦的基本信息,我们还需要一个库来绘制和弦

vexchords

vexchords提供渲染和弦的能力。按以下代码渲染:

javascript 复制代码
   drawChord() {
      const realKey = this.key.replace('#', 'sharp'); // Tip: 升调符号在keys中表达为#,但是在chords中表达为sharp,这里需要统一替换为sharp
      const target = ChordDb.chords[realKey].find(item => item.suffix === this.suffix); // 找到选择的和弦
      this.target = target || {};
      const realSuffix = this.suffix.replaceAll(/(#|\/)/g,'');
      const domId = `#${realKey}_${realSuffix}_` // dom id,需要确保唯一
      this.$nextTick(() => {
        this.target.positions?.forEach((item, index) => {
          const chord = item.frets.map((it, ind) => {
            return [6 - ind, it === -1 ? 'x' : it, item.fingers[ind] || '']
          }) // frets中的索引从一弦到六弦,但是vexchords中的chord则是从六弦到一弦,-1替换成'x'
          const name = domId + String(index); // 多个指法都渲染出来
          this.curNodes.push(name);
          draw(name, { // 渲染方法
            chord,
            position: item.capo ? item.baseFret : 0
          })
        })
      })
    },

效果如下:

网址如下,欢迎试用:https://hougiser.gitee.io/music-score/ 😉

相关推荐
Alla T25 分钟前
【前端】缓存相关
前端·缓存
christine-rr36 分钟前
征文投稿:如何写一份实用的技术文档?——以软件配置为例
运维·前端·网络·数据库·软件构建
_骁38 分钟前
记两次谷歌浏览器升级引起的bug
前端
Lester_11011 小时前
嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析
笔记·stm32·单片机·学习·freertos
jackson凌1 小时前
【Java学习笔记】Math方法
java·笔记·学习
Humbunklung1 小时前
PySide6 GUI 学习笔记——常用类及控件使用方法(多行文本控件QTextEdit)
笔记·python·学习·pyqt
sealaugh321 小时前
aws(学习笔记第四十三课) s3_sns_sqs_lambda_chain
笔记·学习·aws
风之舞_yjf1 小时前
Vue基础(14)_列表过滤、列表排序
前端·javascript·vue.js
阿超爱嵌入式2 小时前
STM32学习之I2C(理论篇)
stm32·嵌入式硬件·学习
hao_wujing2 小时前
使用有限计算实现视频生成模型的高效训练
音视频