NsfComposer 是一个专门为红白机(NES)音乐爱好者和创作者设计的工具。它可以将 NES 游戏的 NSF (Nintendo Sound Format) 文件中的音乐轨道解析并转换为直观的**简谱(Numbered Musical Notation)**形式,并导出为图片保存。
- NSF 文件解析:直接读取 NSF 文件头信息,获取曲目数量、加载地址、原始标题及作者信息。
- 多曲目支持:支持载入包含多个曲目的 NSF 文件,并允许用户自由选择要转换的曲目(从 1 开始计数)。
- 方波轨道转换:专注于 NES 最具代表性的方波轨道(Square 1 和 Square 2)。用户可根据主旋律所在通道进行选择。
- 自动时值量化:内置智能算法,自动分析播放速率并选择合适的节拍网格,将毫秒级的时间跨度映射为标准的简谱时值(全音符、四分、八分、十六分音符等)。
- 自动调性识别与根音修正:
- 程序会自动统计频率分布,选择升降号最少的方案作为初始调性。
- 根音修正:支持手动半音偏移(例如从 1=C 修正为 1=D,可设置 +2),方便适配特定乐器的演奏需求。
- 高画质图片导出:基于 WPF 渲染引擎,生成排版整洁的简谱图片。支持修改谱面标题,导出指定时长的内容。
- 6502 模拟执行:NsfComposer 内部运行了一个轻量级的 6502 CPU 模拟器,通过调用 NSF 的
INIT和PLAY例程来驱动音乐播放。 - APU 寄存器捕获:实时拦截对方波通道寄存器($4000-$4007)的写入操作,记录 timer 和音量变化。
- 频率与音符合成:使用公式
freqHz ≈ CPU_CLOCK / (16 * (timer + 1))将寄存器数值转换为频率,并结合音量包络合成NoteEvent序列。 - 简谱渲染:利用 WPF 的
DrawingVisual进行矢量绘图,支持处理八度点、时值线、附点及连音线。
- Windows 10/11
- .NET 8.0 Runtime
- 加载文件:点击“打开...”按钮,选择
.nsf文件。程序会自动读取标题和作者(标题支持手动修改)。 - 设置选项:
- 曲目:选择要转换的曲目序号。
- 通道:选择“方波 1”或“方波 2”(多数游戏主旋律在方波 2)。
- 时长:设置转换时长(建议不超过 200 秒)。
- 根音修正(可选):如果自动定调不符合预期,可进行半音级的微调。
- 生成并保存:点击“转换为简谱并导出图片”,选择保存路径。
小贴士:如果不确定主旋律在哪个通道,可以配合 virtuNSF 等播放器,通过屏蔽通道(Channel Mask)来确认。
Services/:包含 6502 模拟器、NSF 播放逻辑、简谱生成及渲染引擎。ViewModels/:MVVM 模式下的 UI 交互逻辑。Models/:音符事件、NSF 文件及简谱令牌等实体定义。docs/:项目设计文档与技术细节说明。
本项目使用 C# 和 WPF 开发,基于 .NET 8.0 框架。使用了Cursor AI辅助编程 © 2025 糖君