首页
/ 使用tabr包创作《刺客信条2》主题曲吉他谱教程

使用tabr包创作《刺客信条2》主题曲吉他谱教程

2025-06-01 10:45:56作者:侯霆垣

前言

本教程将展示如何使用R语言的tabr包来创作《刺客信条2》主题曲《Ezio's Family》的完整吉他谱。这个项目由Matthew Leonawicz改编,包含了两把吉他的编曲:一把主奏吉他(采用指弹风格)和一把节奏吉他。

准备工作

首先需要安装并加载tabr包:

library(tabr)

然后设置一些基本的元数据:

header <- list(
  title = "Ezio's family",
  composer = "Written by Jesper Kyd",
  subtitle = "Theme from Assassin's Creed 2",
  arranger = "Arranged by Matthew Leonawicz",
  copyright = "2009 Ubisoft Entertainment",
  tagline = paste("Arranged by Matthew Leonawicz", Sys.Date())
)

txt <- "Tune down full step: DGCFAD (Dm). Let guitar 1 ring."
outfile <- "jesper_kyd-ezios_family-custom_arrangement.pdf"

主奏吉他编曲

第一声部(旋律部分)

主奏吉他被分成两个声部,第一声部是使用手指弹奏的旋律部分。我们可以先定义一些常用的音符和琴弦序列:

s1 <- "1 3 2 3 1 2 3 2"  # 琴弦序列
s2 <- "1 3 2 3 2 3 1 2"
s3 <- "x 3 2 3 1 2 3 2"

x1 <- "e4 g b g g4 b g b a4 g b g b4 b g b"  # 音符序列
x2 <- gsub("b4", "g4", x1)

然后构建各个乐句:

p1a <- p(pc(x1, x2), pc(notate("8", txt), "8*31"), pn(s1, 4))
p1 <- p(pc(x1, x2), 8, pn(s1, 4))
p2 <- volta(p("e4 g b g b4 b g b a4 g b g b4 b g b", 8, pn(s1, 2)), 3)

第二声部(低音部分)

第二声部是使用拇指弹奏的低音部分:

p1 <- p("s*4", 1, "x")
p2 <- volta(p("e*2", 1, 5), 3, silent = TRUE)
x1 <- p("e e d d c c e2 g2 f#2", "1*7 2 2", "5 5 4 4 5 5 6*3")

合并声部

将两个声部合并成一个轨道:

track1a <- track(c(p1a, p2, p3, p4, p5, p6, p7, p8, p9, p10))
track1b <- track(c(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), voice = 2)

节奏吉他编曲

节奏吉他采用扫弦风格,使用字符串-品位的表示方法:

i <- "4 8 8"
i1 <- pn(i, 4)

p1a <- sfp("5*3 5*3 5321*3 5*3", "75000*3 7508*3 7005*3 75007*3", i1)
p1a2 <- sfp("5*3 5*3 5321*3 5*3", "75000*3 7508*3 7005*3 7508*3", i1)

和弦图表与标记

添加和弦图表和在谱面上方标记和弦:

chord_names <- c("e:m", "e:m7/d", "c:maj7", "c:maj9", "e:m", "g:5.9", "g:5.9/f#", "e:m5.9", "s", "a:sus2")
chord_positions <- c("x75ooo", "x55ooo", "x3545o", "x35435", "o22ooo", "3xooo5", "2xo233", "o22oo2", NA, "xo22oo")
chords <- chord_set(chord_positions, chord_names)

生成乐谱

最后将所有轨道合并并生成PDF乐谱:

trackbind(track1a, track1b, track2, id = c(1, 1, 2)) |>
  score(chords, chord_seq) |>
  tab(outfile, key = "em", time = "4/4", tempo = "4 = 120", header)

注意事项

  1. 本曲实际音高比记谱低一个全音(Dm调),采用了降调调弦法
  2. 当和弦中包含相同音高但不同弦时,乐谱显示会有重复音问题
  3. 滑音标记在某些情况下可能显示不准确
  4. 目前对add9和弦的支持不够完善

结语

通过这个教程,我们展示了如何使用tabr包创建复杂的吉他编曲。虽然过程需要耐心和精确度,但最终结果是一份专业级别的吉他谱。这种方法特别适合需要精确控制每个音符和技巧的复杂编曲。

登录后查看全文

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
104
185
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
462
378
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
55
127
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
14
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
278
515
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
90
246
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
348
247
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
684
83
arkanalyzerarkanalyzer
方舟分析器:面向ArkTS语言的静态程序分析框架
TypeScript
29
37
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
358
36