吉他初学者学习网站搭建系列(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/ 😉

相关推荐
dayouziei2 小时前
java的类加载机制的学习
java·学习
逐·風3 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫3 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦4 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子4 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山5 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享5 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习
晨曦_子画6 小时前
3种最难学习和最容易学习的 3 种编程语言
学习
城南vision6 小时前
Docker学习—Docker核心概念总结
java·学习·docker