news 2026/9/3 16:31:05

从音频到谱面:游戏音乐扒谱完整实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从音频到谱面:游戏音乐扒谱完整实战指南

扒谱这件事,最考验人的往往不是识谱能力,而是“明明听到了旋律,却不知道它在谱面上对应哪个音”。本文以《Deltarune》OST 中的《Sunset of Seven Suns》为解析对象,整理一套从音频分析、乐理判断到最终出谱的完整扒谱流程。无论你是想复刻游戏音乐、做视频改编,还是单纯想提升听音能力,这套方法都可以直接复用。

文章会覆盖工具选择、音乐基础、降速技巧、Python 辅助分析、常见问题排查等内容,尽量做到每一步都有可执行方案。开始之前先说明一点:这首曲子的具体小节结构、调性和配器,以你手上实际音频版本为准。不同抓轨版本、不同播放器均衡设置都会造成听感差异,所以扒谱过程中的反复校对比“第一次就听准”更重要。

1. 背景与核心概念

1.1 什么是扒谱

“扒谱”这个词在音乐爱好者圈子里很常见,通俗讲就是把别人作品里的音符听写下来。它不只是记录主旋律,还包括和弦、低音、节奏型、力度变化、音色层次等维度。对于游戏音乐爱好者来说,扒谱是还原乐曲、制作 MIDI、进行二次创作的起点;对于音频算法工程师或音视频开发者来说,扒谱思维也能帮助理解音频分析的基本逻辑。

从专业角度定义,扒谱是对录音作品进行逆向分析的行为,输出物可以是五线谱、简谱、MIDI 文件、和弦谱,甚至是一个完整的 DAW 工程。扒谱本身不要求一次听准,更多是依赖系统的分段训练和工具辅助,所以它也经常被拿来当练耳教材。

1.2 为什么选择《Deltarune》音乐作为练习对象

《Deltarune》是 Toby Fox 继《Undertale》之后推出的独立 RPG 作品,其原声带在玩家群体中有很高的讨论度。Toby Fox 的音乐风格很特别,经常在复古电子音色、chiptune 质感和旋律记忆点之间取得平衡,节奏鲜明,和声又不会过于晦涩,非常适合作为扒谱练习素材。

回到《Sunset of Seven Suns》这首曲子,标题里虽然挂着“扒谱”两个字,但真正有价值的不是“把音符抄下来”,而是通过扒谱去理解作曲者如何安排音色、织体和和声进行。尤其对游戏音乐来说,很多听感来自合成器音色和混音处理,谱面只能还原音高与节奏,无法完全还原音色,这就需要我们在扒谱过程中把“听到的声音”和“写下的谱子”做双向对照。

1.3 扒谱的交付物

一次完整的游戏音乐扒谱,交付物通常包括:

  • 主旋律五线谱或简谱
  • 和弦标记,包括级数和功能
  • 低音或贝斯声部
  • 节奏型说明
  • MIDI 文件
  • 音色与力度标注

如果后续要做翻弹、编曲或视频演示,这些信息都会非常有用。本文会以这些交付物为目标,按步骤展开。

2. 环境准备与工具选择

2.1 硬件与系统要求

扒谱对硬件要求不高,关键是一个能听清中低频的耳机或监听音箱。普通耳机可以用,但如果 100Hz 以下的低频听不清,后期就需要借助频谱图或 EQ 滤波来辅助判断。操作系统方面,Windows、macOS、Linux 都可以,下面提到的工具也都有跨平台版本。

2.2 核心软件清单

软件用途费用说明
Audacity音频降速、滤波、循环播放免费开源,操作简单,适合快速处理音频
Sonic Visualiser频谱观察、峰值标记、谐波分析免费开源,专业音频可视化分析工具
MuseScore写谱、导出 PDF/MIDI免费开源制谱软件,跨平台
DAW多轨扒带、MIDI 编辑部分付费可选 Reaper、FL Studio、Logic Pro、Cubase

如果不想一开始就装太多软件,可以先从 Audacity 加 MuseScore 的组合开始,这两款足够完成基础的扒谱与制谱。

2.3 Python 辅助环境(可选)

如果你习惯用脚本处理音频,可以安装 Python 3,然后安装几个常用库:

pip install librosa numpy matplotlib

其中 librosa 是音频分析库,numpy 负责数值计算,matplotlib 用来画频普图。后续章节会给出几个可直接运行的辅助脚本。

2.4 示例项目目录

建议为每次扒谱单独建一个目录,方便中间版本管理:

sunset-seven-suns/ ├── audio/ │ ├── 01-raw.mp3 │ ├── 02-tempo-75.mp3 │ └── 03-bass-only.mp3 ├── notes/ │ ├── melody.md │ ├── chords.md │ └── bass.md ├── scripts/ │ ├── midi_to_freq.py │ └── inspect_audio.py └── score/ └── sunset_seven_suns.mscz

目录里 audio 放原始和处理后的音频,notes 放文字记录,scripts 放辅助脚本,score 放最终谱面工程。这样的结构在项目后期会非常方便回溯。

3. 核心原理:扒谱需要掌握的音乐基础

3.1 音高与 MIDI 音符换算

扒谱最终要把听到的声音映射到谱面,而音高和频率之间的关系是可以精确计算的。MIDI 规范里,69 号音符对应 A4,标准音频率为 440Hz。任意音符频率的计算公式是:

f = 440 * 2^((n - 69) / 12)

其中 n 是 MIDI 音符编号,比如中央 C 是 60。用 Python 实现如下:

def midi_note_to_freq(midi_note): return 440.0 * (2 ** ((midi_note - 69) / 12)) for note in [60, 64, 67, 69]: print(note, round(midi_note_to_freq(note), 2))

运行结果:

60 261.63 64 329.63 67 392.0 69 440.0

这段代码很实用:当你从频谱图上看到某个峰值的频率,就可以反推它最接近哪个音高。比如看到 392Hz 左右的大能量峰值,基本可以判断是 G4。

3.2 调性判断

判断一首曲子是什么调,最直接的方法是听结尾。大多数音乐会在结尾回到主和弦,最后一个音或最后一个和弦往往就是调性中心。之后再结合谱面里的升降号,判断是大调还是小调。

游戏音乐常用自然大调与自然小调,但 Toby Fox 也经常使用多利亚、利底亚这类调式营造特殊氛围。如果你发现结尾和弦“既像大调又像小调”,可以先标记出全曲出现频率最高的几个和弦,再判断是哪种调式。

3.3 节拍与速度判断

扒谱前先确定速度和拍号,否则后续音符时值会一头雾水。操作方法是:在 DAW 或节拍器里按住一个鼓点或低频脉冲对拍,先感觉大致 BPM,再用节拍器微调。确定拍号时,注意重音规律,四拍子重音在每小节第一拍,三拍子是“强、弱、弱”。

如果原曲节奏不稳,或者在乐句之间有自由速度,可以先把明显的小节边界标出来,再逐句处理,不要一开始就强行量化。

3.4 和弦识别策略

和弦识别是扒谱中比较费时间的环节。推荐顺序是:

  1. 先听低音,确定根音。
  2. 再听最高音,确定旋律音或和弦外音。
  3. 用三度叠置关系试出中间音。
  4. 判断颜色,是大三和弦、小三和弦、七和弦,还是挂留和弦。

以《Sunset of Seven Suns》为例,如果铺底是合成器长音,和弦切换不会太快,可以先抓每小节第一个和弦,再细化后半小节的变化。这里有个经验:不要一次把整个和弦全部听出来,先记录根音和最低音,再逐步补上其他声部。

3.5 配器分层

扒谱前先做“配器分层”,把混音拆成五层:

  • 主旋律层:人声、主音合成器、主音吉他
  • 和声层:和弦垫底、背景琶音
  • 低音层:贝斯、合成器低音
  • 节奏层:鼓组、打击乐
  • 音效装饰层:过渡音效、噪声、逆播采样

在纸上或者笔记软件里把五层和时间轴对应起来,后面扒每一层时就有一条清晰线索,不会在主旋律里迷失。

4. 完整实战流程

4.1 段落规划

开始扒谱前,先完整听三遍原曲。第一遍整体感受情绪和配器;第二遍标记段落,比如前奏、A 段、B 段、间奏、尾奏;第三遍确定每个段落的开始时间。

在笔记里可以用这样的表格记录:

段落时间范围主要乐器备注
前奏00:00 - 00:12合成器垫底、鼓柔和进入
A 段00:12 - 00:34主旋律加入速度稳定
间奏00:34 - 00:40鼓、低音过渡段落

有了段落表后,扒谱可以按段落推进,不用从头到尾一次性完成。

4.2 降速与变速处理

慢速听是扒谱最重要的基本功。Audacity 里可以直接用“效果 -> 改变速度”或“效果 -> 改变音高与速度”来处理。其中“改变速度”会同时改变音高,适合辨别旋律走向;如果想要保持音高不变,只放慢节奏,可以用“改变音高与速度”里的“改变速度”选项,或者用 ffmpeg 命令行。

ffmpeg 的处理方式:

ffmpeg -i 01-raw.mp3 -filter:a "atempo=0.75" 02-tempo-75.mp3

atempo 参数表示速度倍率,0.75 表示变成原来的 75%。注意老版本 ffmpeg 只支持 0.5 到 2.0,新版本范围更宽。如果一次降速太多,可以连续处理两次:

ffmpeg -i 01-raw.mp3 -filter:a "atempo=0.8,atempo=0.8" 02-tempo-64.mp3

这样能避免单次过度变速带来的音质劣化。

4.3 分频段听

混音中不同乐器分布在不同的频段,用滤波器把它们分离开,能降低听辨难度。Audacity 里可以用“效果 -> 低通滤波”和“效果 -> 高通滤波”。

常见频段划分:

  • 低音鼓与贝斯:0Hz - 200Hz
  • 中低频:200Hz - 800Hz
  • 中频主体:800Hz - 2500Hz
  • 高频与空气感:2500Hz 以上

比如要抓低音声部,先复制一份音频,加上低通滤波 200Hz,再降速,就能更清楚地听到贝斯音符的振动频率。注意滤波器斜率会影响听感,不同曲目需要微调截止频率。

4.4 主旋律扒谱

段落和速度确定后,开始扒主旋律。在 MuseScore 里新建乐谱,设置好调号和拍号,然后按小节录入。

录入时建议用“单音符试错法”:在原曲播放到某个旋律音时,先在钢琴或 MIDI 键盘上试出候选音,再用 MuseScore 里的同一音符播放对比。如果听起来比原曲高,就向下调整半音,反之向上调整,直到音高重合。

主旋律扒完后,先不要急着处理和弦,把整段的旋律音高和节奏记完整,然后再进入下一层。

4.5 和弦与低音扒谱

主旋律完成之后,开始扒和声层和低音层。推荐使用 DAW 的钢琴卷帘窗,在 MIDI 轨中把低音声部和弦声部分别放在不同的轨道,便于视觉对照。

顺序仍然是先低音后高音。低音确定了根音,和弦中间的填充音会更容易判断。比如低音是 C,主旋律里有 E,那么这个和弦很可能是 C 大三和弦;如果主旋律里有 Eb,那可能是 C 小三和弦或 Ab 大和弦。

4.6 连音与装饰音处理

游戏音乐里经常会有滑音、装饰音和十六分音符琶音,这些在谱面上需要简化还是保留,取决于使用目的。

如果是做还原向谱面,要把明显的装饰音记录成小音符;如果是做改编向谱面,只需要保留和弦骨架和节奏型。建议扒谱时先把听到的装饰音都记下来,后期再根据演奏难度筛选。

4.7 导出与校对

扒完所有声部后,导出 PDF 和 MIDI,然后完整播放一遍 MIDI,对照原曲逐段核对:

  • 速度是否一致
  • 小节边界是否对齐
  • 和弦是否有明显的色彩偏差
  • 低音进行是否流畅

如果只听 MIDI 会觉得“差不多”,但在原曲 A/B 切换时发现和弦别扭,就要回到对应小节继续调整。

5. Python 辅助分析实战

如果不想全部用耳朵硬听,可以用 Python 做一些客观辅助分析。下面给出几个可以直接运行的例子。

5.1 读取音频基本信息

import librosa audio_path = "audio/01-raw.mp3" y, sr = librosa.load(audio_path, sr=22050) duration = librosa.get_duration(y=y, sr=sr) print(f"采样率: {sr} Hz") print(f"音频时长: {duration:.2f} 秒") print(f"采样点数: {len(y)}")

这里把音频统一重采样到 22050Hz,可以加快计算速度。输出能够帮你确认音频时长是否和笔记表格一致。

5.2 提取整体速度

import librosa import numpy as np audio_path = "audio/01-raw.mp3" y, sr = librosa.load(audio_path, sr=22050) tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr) tempo_val = float(np.mean(tempo)) print(f"自动估计速度: {tempo_val:.2f} BPM")

不同版本的 librosa 对 beat_track 的返回值类型有差异,有的是标量,有的是数组,所以这里统一用np.mean取平均。自动估计只能作为参考,最终速度还是要结合你对鼓点的听感。

5.3 用 Chroma 特征观察和弦倾向

Chroma 特征可以把音频映射到 12 个音名,用来观察某个段落中哪些音高出现得比较多,是判断和弦和调性的辅助工具。

import librosa import numpy as np audio_path = "audio/01-raw.mp3" y, sr = librosa.load(audio_path, sr=22050) hop_length = 512 chroma = librosa.feature.chroma_cqt(y=y, sr=sr, hop_length=hop_length) print("chroma 形状:", chroma.shape) print("第 0 帧的 12 维能量:", np.round(chroma[:, 0], 3))

输出中 12 维分别对应 C、C#、D、D#、E、F、F#、G、G#、A、A#、B 的能量。如果某段音乐在索引 0、4、7 上能量明显偏高,就暗示 C、E、G 三个音出现的概率较高,可能对应 C 大三和弦。

5.4 绘制频谱峰值

import librosa import numpy as np import matplotlib.pyplot as plt audio_path = "audio/01-raw.mp3" y, sr = librosa.load(audio_path, sr=22050) # 取中间一小段做短时傅里叶变换 start = int(10.0 * sr) end = int(11.0 * sr) window = y[start:end] fft = np.fft.rfft(window * np.hanning(len(window))) freq = np.fft.rfftfreq(len(window), d=1 / sr) amp = np.abs(fft) # 找能量最高的前 5 个频率 top_indices = np.argsort(amp)[-5:][::-1] for idx in top_indices: print(f"{freq[idx]:.2f} Hz, amplitude={amp[idx]:.2f}")

这个脚本会输出某一段音频里能量最大的几个频率,你可以对照 3.1 节的 MIDI 频率表判断它们接近哪些音符。需要提示的是,频谱峰值会受到泛音和混音影响,只能作为辅助,不要完全替代听音。

6. 常见问题与排查思路

问题现象常见原因解决思路
低音完全听不清耳机低频响应差或混音里低音被掩蔽用低通滤波单独听贝斯频段
速度忽快忽慢,对不上拍子原曲使用了自由速度或变速先标记段落边界,再逐段处理
和弦听起来“多一个音”中间层可能是经过音或装饰音先保留根音和核心三度音,再判断外音
降速后音高也变了使用了“改变速度”而不是“改变节拍”用 Audacity 的“改变音高与速度”或 ffmpeg atempo
MuseScore 里节奏对不齐拍号判断错误重新听重音,确定正确拍号
Python 分析结果和听力不一致分析窗口太大或频谱被泛音干扰缩短分析窗口,结合多个频段观察

6.1 低音听不清怎么办

这是最常见的扒谱问题。解决思路是把音频复制一份,用 Audacity 的低通滤波滤掉 200Hz 以上的内容,然后再降速播放。如果没有明显改善,可以再降低截止频率到 150Hz。耳机方面,封闭式头戴耳机通常比普通耳塞更容易表现低频细节。

6.2 和弦总是判断不准确

和弦判断不准往往不是听力问题,而是声部太多导致注意力被干扰。建议先用 MIDI 键盘或者纯音把低音弹出来,然后只关注和弦中最高音和最低音之间的音程。如果最高音是根音上方的大三度,基本可以确定是大三和弦;如果是小三度,则是小三和弦。七和弦和挂留和弦可以在基础三和弦确定后,再逐音添加判断。

6.3 速度特别快的乐段处理

遇到快速琶音或密集音符,不要用 100% 速度死磕。先把速度降到 50%,听完音符轮廓,再逐步提升到 70%、85%。如果降到 50% 依然听不出具体音高,就配合频谱图找峰值频率,把每个峰值对应的 MIDI 音符先列出来,再连成旋律线。

6.4 原曲有轻微跑调

一些抓轨音频或现场版本可能存在微小音高偏差,导致每个音都夹在两个半音之间。这种情况建议在 DAW 里用音高修正插件把段落整体移动若干音分,先对齐到标准调性,再继续扒谱。对游戏 OST 来说这种情况很少,但不同版本的音频确实有可能存在差异。

7. 最佳实践与工程建议

7.1 文件和命名规范

每次扒谱建议把所有音频和工程文件统一归档。处理后的音频可以在名字后缀写明处理方式,比如bass-only-200hztempo-75section-A-loop。这样可以避免扒到一半时搞不清楚某个文件是哪个版本。

7.2 分层记录,不要只记旋律

很多人扒谱只记主旋律,最后发现和声和低音完全没概念。建议在项目开始时就建立melody.mdchords.mdbass.mddrums.md四个笔记文件,每扒完一段就把结果填进去。这个习惯在整理长曲子和多段落曲目时尤其重要。

7.3 用颜色标记不确定内容

在 MuseScore 或 DAW 里,可以用颜色标注听感不确定的音符。比如蓝色表示确定,红色表示存疑。完成后把红色音符集中复核一遍。这样能减少“整体扒完但某几个和弦错得离谱”的情况。

7.4 定期备份工程文件

MuseScore 和 DAW 工程文件建议做好多版本备份,可以手动复制,也可以用 Git 管理。虽然谱面文件体积不大,但频繁修改后还是容易覆盖重要版本。建议每完成一个段落就另存一个版本。

7.5 注意版权边界

扒谱本身是学习行为,但公开发布谱面、MIDI 或改编视频时,要注意原曲版权的约定。Deltarune 的 OST 属于游戏官方版权所有,个人学习与交流使用通常没问题,但商用或大规模传播需要谨慎。在 CSDN 等平台分享时,建议注明原曲来源与作者,并且不把扒谱成果包装成原创曲目。

7.6 不要迷信频谱分析

音频分析工具能显示能量分布,但不能直接告诉你调性和音乐语法。一个 440Hz 的峰值可能是 A4,也可能是 A3 的二次谐波,甚至可能来自失真的互调产物。所以频谱图适合做参考,但最终判断一定要用自己的耳朵和乐理知识。

7.7 保持听感校准习惯

练耳是一个积累过程。可以每隔一段时间做一次基础听音练习,比如听单音、听音程、听三和弦,这样扒谱时反应速度会明显提升。扒谱学到的音高感,本质上是一次次“听-判断-验证”循环积累出来的。

8. 总结与学习路线

扒谱是一项需要耐心和系统方法的技能。从《Sunset of Seven Suns》这首曲子入手,你至少可以完整经历“音频准备 -> 段落规划 -> 降速听辨 -> 旋律和弦低音记录 -> 制谱导出 -> 校对调整”的全流程。这篇文章的核心是让你掌握一套可复用的方法,而不是只针对某一首曲子。

完成第一次扒谱后,下一步可以尝试:

  • 换一首同样来自《Deltarune》的曲子,练习不同配器和节奏型。
  • 尝试给扒出的旋律配上自己的和弦进行,做一个小改编。
  • 学习更多音乐理论,比如调式互换、转调、重属和弦,这些都会让扒谱时的“猜和弦”变成“推导和弦”。
  • 了解 DAW 里的 MIDI 编辑和音色调制,探索游戏音乐音色是如何合成的。

我的个人建议是:扒谱的时候,每完成一段就用 MIDI 播放一遍,闭上眼睛听,感受这段和声是否站得住。如果哪里感觉多余或空泛,不要急着改谱面,先回到原曲听三遍,再决定是保留还是调整。多次循环之后,你对音乐的判断力会明显提升。

如果这篇文章对你有帮助,可以先收藏,然后打开 Audacity 和 MuseScore 实际动手扒一段八小节的主旋律。扒谱这件事,听十篇教程,不如完整扒完一首曲子。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 16:30:34

单片机毕设项目:基于 STM32 的本地人机交互水压温度监控终端设计 基于 STM32 的物联网管道水压温度报警平台设计(015406)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/9/3 16:30:24

STM32扫地机器人控制系统:实时控制与量产级硬件设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 16:28:28

自己动手写一个tomcat之8多应用

写在前面 本文看下我们的tomcat如何支持多应用的场景。 1:正文 当多应用时,就不能简单用context容器调用wrapper容器了,因为此时会有多个context容器,需要根据url的上下文信息来确定使用哪个context容器。这相当于是多了一个新…

作者头像 李华
网站建设 2026/9/3 16:24:16

PyTorch实现U-Net图像分割:从原理到实战的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 16:22:23

Gemini Spark AI Agent框架:从原理到实践的智能办公自动化指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华