bass-tab 是做什么的?
将来源实际展示的内容转换为歌曲数据文件,然后渲染紧凑的贝斯制表符(.tab)和一份可打印的伴奏图表PDF(1-2页美国信纸尺寸)。仅需python3;当标题或艺术家为非拉丁字符(如中文)时还需要Pillow。如果没有它,chart2pdf.py 和 tab2pdf.py 会拒绝运行而非打印?;在虚拟环境中安装(python3 -m venv v && v/bin/pip install pillow)并使用该Python运行脚本,或传递--allow-lossy。
脚本位于此文件旁的scripts/目录;从技能文件夹运行它们,或提供完整路径。
歌曲文件
每首歌一个目录,包含三个文件:
<slug>/
<slug>.py 真实来源:结构化数据,可手动编辑(从 templates/song-template.py 开始)
<slug>.tab 由 scripts/tabgen.py 生成
<slug>.pdf 伴奏图表,由 scripts/chart2pdf.py 直接从 <slug>.py 生成
<slug>.py 提供 META / BARS / SECTIONS / CHORDS / LYRICS。重复的乐段只编写一次,并在每次出现的位置标记引用,因此一次修正即可更新所有副本。切勿将重复展开为独立副本。
LYRICS 将小节号映射到该小节对应的歌词。歌词可能来自所有者,或来源中可见的内容(例如制表符视频中的屏幕歌词)。切勿自行编造歌词,或凭记忆或通过网络搜索填充;如果没有来源显示歌词,则保留 LYRICS = {} 并告知所有者可自行添加。无歌词的歌曲也能正常渲染。歌词按原样打印,每次重新生成时保留。
渲染
python3 scripts/chart2pdf.py <slug>/<slug>.py -o <slug>/<slug>.pdf [--paper letter|a4]
python3 scripts/tabgen.py <slug>/<slug>.py <slug>/<slug>.tab --bars <如果 META slots == 16 则为 1,否则为 3> --cut compact
PDF 是一份图表,风格类似于在线制表符播放器:每行若干小节,每个段落开头有粗体段落标签,重复乐段在重复记号之间只绘制一次并标注次数(x4),重复前面段落的段落缩写为一行(Chorus 2 = Chorus (bars 13-16)),和弦名称标注在 CHORDS 定义的小节上方,歌词放在所属小节下方。默认使用美国信纸尺寸,最多2页:制表符数字保持9pt或更大,在字体缩小之前会先收紧间距并折叠重复,如果歌曲仍然无法容纳则拒绝并显示其名称。报告页数。处理非拉丁歌词或标题时需要 Pillow(见上文)。--collapse-sections 强制使用引用行。
长版单行PDF仍然可用:tabgen.py ... --cut compact 然后 tab2pdf.py <slug>.tab -o <slug>-long.pdf。--cut compact 是文本表单。 它是唯一携带重复记法(折叠乐段标记为 A-B xN)的裁剪模式。--cut full 是调试视图(每个小节,外加格式中不显示的节拍标尺行),永远不是交付物。为输出提供完整路径。
文本格式:标题行(曲名、艺术家、调性、速度、拍号、调弦、来源、图例),然后每个段落一个 [Name - bars a-b . m:ss] 标题,一行和弦,一行小节号,一行节奏行 R|,四行弦行 G D A E;然后是注意事项,最后是 [Checked] 块。谱表行固定为77个字符,因此每首歌以相同比例打印;如果某行过长,则减少每行的小节数。
从来源创建歌曲文件
严格按照以下步骤执行;这是该技能的核心。
- 只取来源实际展示的内容。 制表符截图或PDF可以读取。录音链接则不能:你无法听取音频。从歌曲URL中只获取打印的曲名、速度和段落名称,其他一律不要。绝不凭对歌曲的记忆提供小节。一个可见的空白胜过一个看起来正确但实际上不对的小节。
- 仅限贝斯轨道。 如果来源显示多种乐器,则只取贝斯并说明使用了哪个轨道。如果有两个贝斯轨道或贝斯加倍:询问,不要自行选择。
- 交叉检查每个重复,并只编码一次。 阅读每个出现的位置并进行比较。一致是最强的验证手段;不一致意味着至少有一个读数是错误的。出现位置一致:只编码一次。不一致:说明情况,分别给出两种计数,将读数标记为估计值。没有任何重复的小节无法交叉检查;在表单上说明这一点。
- 绝不断言未经检查的内容。 像“与A-B小节相同”这样的声明是从数据生成的,而不是手动输入的。段落小节范围由边界计算得出。
- 结构、和弦、速度。 使用来源自身的标签填充
SECTIONS。为每个小节提供其和弦条目:和弦确定了品位于哪根弦上(第7品在E弦上是B,在A弦上是E),因此tabgen.py会推导出弦线,如果某个品/和弦对在所有弦上均不匹配则报错。在META中填写速度;段落时间戳由速度计算得出。 - 报告未完成的工作。 哪些小节缺失,哪些是估计值,哪个来源提供了什么。每次转录结束时都要包含这些信息,而不是一个“一切正常”的声明。
凭肉眼读取节奏和从未测量过的品距是已知的薄弱点;在 CAVEATS 中说明。
建议
在转录完成或应要求时,提供三种类型的建议,并与转录内容明确分开:练习(首先要练习什么)、音乐性(和声进行的作用)以及编配(简化或添加)。编配建议是你的创作;切勿让它看起来像是来源所说。
检查
仓库中的 tests/bass-tab/run.sh 会渲染一首示例歌曲并与记录的基线进行比较,并检查虚构歌曲的图表(段落标签、折叠重复、歌词对齐、2页限制)。