内容
# Music2DAW
Music2DAW 是一个 .NET 10 工具包,用于检查、编辑和导出 FL Studio 项目文件(`.flp`)。它结合了 FLP 解析器、无损事件重写器、安排的 MIDI 导出器和用于 VS Code 和 Copilot 的本地 stdio MCP 服务器。
该项目旨在为开发者和 AI 代理提供一种可复制的方式来检查 FL Studio 项目,进行有针对性的编辑,导出可互操作的數據,并打开结果在 FL Studio 中进行最终的听觉验证。
## 功能
- 检查 FLP 元数据、通道、生成器、样本、模式、钢琴卷帘笔记、播放列表剪辑、混音器插入、效果槽、插件状态、嵌入式预设文本提示和顺序乐器风险警告。
- 导出安排的 Type 1 标准 MIDI,包含 FL 速度、PPQ、播放列表剪辑、通道轨道、MIDI 通道分配和保守的通用 MIDI 程序。
- 编写包含 FL 特有的乐器和混音器信息的 JSON 清单,这些信息 MIDI 无法表示。
- 在不修改源项目的情况下,提取原始通道和混音器插件状态块。
- 编写具有针对性速度、通道、路由、音符、播放列表和混音器编辑的新 FLP 副本。
- 在 FL Studio 中启动 FLP 项目。
- 通过本地 stdio MCP 服务器公开相同的检查、编辑、导出和启动工作流程。
## 构建
设置脚本恢复并构建 .NET 10 解决方案,运行测试,并生成 `.vscode/mcp.json` 使用的 MCP 服务器 DLL。
```powershell
.\scripts\setup-agent-tools.ps1
```
在不需要完整测试运行的情况下,可以使用 `-SkipTests` 进行快速本地重建。
对于没有 .NET SDK 的代理,请从最新的 GitHub 版本下载独立的 Windows CLI 和 VS Code 技能包。有关安装和工作区设置,请参阅 [`setup.md`](setup.md)。
## 选择接口
Music2DAW 通过相同的 `Music2Daw.Core` 服务和编辑请求模型提供两个接口。
### 命令行界面
从具有终端访问权限的任何环境使用 CLI:
```powershell
dotnet run --project src\Music2Daw.Cli -- inspect "C:\path\song.flp"
dotnet run --project src\Music2Daw.Cli -- export `
"C:\path\song.flp" `
"C:\path\output"
dotnet run --project src\Music2Daw.Cli -- edit `
"C:\path\base.flp" `
"C:\path\new-song.flp" `
"C:\path\edit-request.json"
dotnet run --project src\Music2Daw.Cli -- launch `
"C:\path\song.flp"
```
导出目录包含:
```text
song.mid
song.manifest.json
plugin-states/
```
### VS Code MCP
构建解决方案,然后从 VS Code 启动已检查的服务器配置:
1. 运行 `MCP: List Servers`。
2. 启动 `music2daw`。
3. 允许 Copilot 使用可用的工具。
服务器公开:
- `fl_studio_capabilities`
- `inspect_flp`
- `edit_flp`
- `export_music_bundle`
- `launch_fl_studio_project`
配置的服务器命令是:
```powershell
dotnet src\Music2Daw.Mcp\bin\Debug\net10.0\Music2Daw.Mcp.dll
```
在重建后重启 `music2daw` 服务器,以便 VS Code 发现更新的工具模式。
## 安全编辑行为
Music2DAW 永远不会原地修改源 FLP。编辑写入到不同的输出路径,只更改目标 FL 事件,保留其他事件,通过临时文件写入,并重新解析结果后再发布。
对于 MCP 和 CLI 编辑:
- 模式、通道、混音器和播放列表轨道 ID 为零基。
- 音符和播放列表位置使用项目的 PPQ 刻度。
- `append` 可以将音符分层到现有模式上。
- `playlistAdditions` 可以在不替换排列的情况下追加剪辑。
- 显式提供 `playlist` 替换完整的排列。
- `pluginStateCopies` 可以从一个现有的通道复制完整的、不透明的乐器状态到另一个。
将 `song-brief.yaml` 和 `edit-request.json` 与项目一起保存,以便编辑保持可审查和可复制。
## AI-first FLP 工作流程
仓库将 FL Studio 项目视为可复制的构建工件:
```text
song brief + structural template + edit request
-> FLP output
-> inspection and export reports
-> FL Studio listening check
```
完整的工作流程在 [`docs/AI_FIRST_FLP_WORKFLOW.md`](docs/AI_FIRST_FLP_WORKFLOW.md) 中有记录:
1. 检查源项目。
2. 编写音乐简介。
3. 创建结构化的 `edit-request.json`。
4. 构建新的 FLP 输出。
5. 检查输出并验证预期更改。
6. 导出 MIDI、清单和插件状态文件。
7. 启动 FL Studio 并聆听预设、样本、平衡、过渡和剪辑问题。
8. 将修订保存为新的 FLP 文件。
对于新作曲,使用有效的 FLP 作为结构和插件状态模板。替换每个继承的音符承载模式/通道对,并替换整个播放列表。
在以下位置提供可重用的工作流程资源:
- `.github/skills/create-flp-project/`
- `.github/skills/edit-flp-project/`
- `.github/prompts/`
- `templates/flp-project/`
## 格式限制
FLP 是一种未公开的、不断演变的二进制格式。解析器已在 FL Studio `25.1.2.4896` 上验证,包括 80 字节的 FL Studio 25 播放列表记录布局。应在依赖混音器或播放列表详细信息进行存档转换之前测试其他 FL Studio 25 版本。
第三方插件预设保留为不透明的供应商数据。Music2DAW 保留未经修改的原始事件和插件状态字节,但 MIDI 导出使用根据通道、生成器、插件和样本名称推断的尽力而为的通用 MIDI 程序。
Music2DAW 编辑已知的 FL 事件记录,而不是模拟 FL Studio UI 输入。它当前不从零创建任意生成器或效果,不重建不透明的供应商预设内部结构,也不提供 FL Studio 原生插件加载的稳定外部替代。最终的预设、样本、路由和音质验证必须在 FL Studio 中进行。
## 归属和许可
Music2DAW 在 [GNU General Public License, version 3 or later](LICENSE) 下获得许可。
此存储库包括 [Monad FLParser](https://github.com/monadgroup/FLParser) 的修改版。原始的 GPL-3.0 许可文本保留在 [`src/Monad.FLParser/LICENSE`](src/Monad.FLParser/LICENSE) 中。
Monad FLParser 致谢 [andrewrk/node-flp](https://github.com/andrewrk/node-flp) 为上游基础。解析器文档和原始归属保留在 [`src/Monad.FLParser/README.md`](src/Monad.FLParser/README.md) 中。
FL Studio 是 [Image-Line](https://www.image-line.com/flstudio/) 的产品。Music2DAW 是一个独立项目,不作为官方 Image-Line 工具呈现。
## 验证
对于解析器或编辑器更改:
```powershell
dotnet build Music2Daw.slnx
dotnet test tests\Music2Daw.Tests\Music2Daw.Tests.csproj
```
对于已编辑的项目:
```powershell
dotnet run --project src\Music2Daw.Cli -- inspect <output.flp>
dotnet run --project src\Music2Daw.Cli -- export <output.flp> <export-directory>
```
在使用输出之前检查它,并保持源项目不变。