Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

NsfComposer

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 渲染引擎,生成排版整洁的简谱图片。支持修改谱面标题,导出指定时长的内容。

🛠️ 技术实现原理

  1. 6502 模拟执行:NsfComposer 内部运行了一个轻量级的 6502 CPU 模拟器,通过调用 NSF 的 INIT 和 PLAY 例程来驱动音乐播放。
  2. APU 寄存器捕获:实时拦截对方波通道寄存器($4000-$4007)的写入操作,记录 timer 和音量变化。
  3. 频率与音符合成:使用公式 freqHz ≈ CPU_CLOCK / (16 * (timer + 1)) 将寄存器数值转换为频率,并结合音量包络合成 NoteEvent 序列。
  4. 简谱渲染:利用 WPF 的 DrawingVisual 进行矢量绘图,支持处理八度点、时值线、附点及连音线。

🚀 快速开始

环境要求

  • Windows 10/11
  • .NET 8.0 Runtime

使用步骤

  1. 加载文件:点击“打开...”按钮,选择 .nsf 文件。程序会自动读取标题和作者(标题支持手动修改)。
  2. 设置选项:
    • 曲目:选择要转换的曲目序号。
    • 通道:选择“方波 1”或“方波 2”(多数游戏主旋律在方波 2)。
    • 时长:设置转换时长(建议不超过 200 秒)。
  3. 根音修正(可选):如果自动定调不符合预期,可进行半音级的微调。
  4. 生成并保存:点击“转换为简谱并导出图片”,选择保存路径。

小贴士:如果不确定主旋律在哪个通道,可以配合 virtuNSF 等播放器,通过屏蔽通道(Channel Mask)来确认。

📂 项目结构

  • Services/:包含 6502 模拟器、NSF 播放逻辑、简谱生成及渲染引擎。
  • ViewModels/:MVVM 模式下的 UI 交互逻辑。
  • Models/:音符事件、NSF 文件及简谱令牌等实体定义。
  • docs/:项目设计文档与技术细节说明。

本项目使用 C# 和 WPF 开发,基于 .NET 8.0 框架。使用了Cursor AI辅助编程 © 2025 糖君

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages