[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80828":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":12,"forks30d":12,"starsTrendScore":16,"compositeScore":12,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":12,"starSnapshotCount":12,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},80828,"FH6_Radio_tool","Disthinker\u002FFH6_Radio_tool","Disthinker","FH6 Radio Tool is a lightweight desktop utility for customizing in-game radio music. It helps users edit RadioInfo_CN.xml, manage custom song titles and artists, validate WAV audio files, automatically map extracted FMOD bank audio by sample length, balance replacement track volume, and generate a ready-to-rebuild audio folder for Fmod Bank Tools.",null,"Python",41,0,37,20,1,3,4,false,"master",true,[],"2026-06-12 02:04:07","# FH6 Radio Tool\n\nFH6 Radio Tool 是一个用于《Forza Horizon 6》电台音乐替换的 Windows 桌面工具。它基于 Python \u002F PySide6 开发，重点是让普通玩家可以用自己的音乐替换游戏电台歌曲，并尽量减少手工编辑 XML、手动转换音频和手动管理备份的成本。\n\n当前版本：`v3.1.7`\n\n## 功能概览\n\n- 扫描游戏目录，自动定位 `RadioInfo_*.xml` 和 `media\u002FAudio\u002FFMODBanks`。\n- 选择电台和原曲槽位，将自定义音乐分配到指定 slot。\n- 自动准备替换音频，统一输出为适合 FMOD rebuild 的 WAV。\n- 编辑、试听、导入、导出 TrackDrop \u002F PostDrop \u002F Loop marker。\n- 生成 patched XML 和 `fmod_ready_wav` rebuild 工作区。\n- 自动调用 Fmod Bank Tools 执行 Extract \u002F Rebuild。\n- 生成 Mod 输出包，或一键备份并替换游戏文件。\n- 支持主菜单 \u002F Press Start 音乐替换：`GLB_RadioPressStart.assets.bank`。\n- 提供开发者模式，用于全 bank Extract、统计和 XML-bank 映射研究。\n\n## v3.1.7 更新重点\n\n相比 `v3.1.3`，`v3.1.7` 主要修复用户反馈的稳定性、marker\u002Faudio 和 Loop 分析问题：\n\n- Marker Export \u002F Import 现在会导出当前已分配音乐的完整配置，可作为批量编辑模板。\n- Export 会同步当前 UI 中尚未保存的 marker 数值。\n- 播放器改为 Play \u002F Pause \u002F Resume \u002F Reset 语义，暂停不再清零。\n- 进度条和波形支持点击、拖动 seek。\n- 波形上显示 TrackDrop \u002F PostDrop 竖线，以及 TrackLoop \u002F PostRaceLoop 区间。\n- XML 写入前会读取最终 `fmod_ready_wav` 的真实 sample length。\n- 如果转换前后 sample 数变化，marker 会按比例缩放到最终 WAV 坐标系。\n- 应用替换时会先生成 marker 编辑用 prepared WAV，之后试听、波形和 marker 编辑都基于处理后的音频。\n- 应用替换音频改为后台任务，处理 FLAC\u002FMP3\u002F非 48k WAV 时界面不会卡死，并持续输出 Runtime Log。\n- 第二步试听列表始终使用 prepared WAV，非 WAV 源文件也可以正常试听、显示波形和编辑 marker。\n- 新增“游戏音量增益”和“试听游戏音量模板”，用户可在保存前实时试听 dB 调整效果。\n- 第三步生成 Mod 包 \u002F 一键替换只复用 prepared WAV，不再重新转码或重新做音量匹配。\n- `SampleLength`、`End` 和已存在的 duration-like 字段会使用最终 WAV 的真实值。\n- 同一 `SoundName` 的重复 XML 节点会同步更新，减少改错节点导致的游戏内偏移。\n- 音频导入统一标准化为 PCM WAV、48000 Hz、Stereo、16-bit。\n- 增加响度匹配、峰值保护和 Runtime Log 音频处理报告。\n- 修复 Fmod Extract 模板或外部工具窗口文本为空时可能出现的 `NoneType.strip` 崩溃。\n\n## 环境要求\n\n- Windows 10 \u002F 11。\n- Python 3.10 或更新版本，用于源码运行。\n- Fmod Bank Tools，需要用户自行下载并在工具中选择 `Fmod_Bank_Tools.exe`。\n- 足够的磁盘空间用于 Extract \u002F Rebuild 输出和备份。\n\n依赖见 [requirements.txt](requirements.txt)：\n\n- `PySide6`\n- `pywinauto`\n- `imageio-ffmpeg`\n\n`setup_env.bat` 会创建 `.venv` 并安装依赖。`imageio-ffmpeg` 通常会提供可用的 FFmpeg，无需用户手动配置 PATH。\n\n## 快速开始\n\n1. 将项目解压或 clone 到简单路径，例如 `E:\\FH6RadioTool`。\n2. 首次运行：\n\n   ```bat\n   setup_env.bat\n   ```\n\n3. 启动工具：\n\n   ```bat\n   run_tool.bat\n   ```\n\n4. 在工具中选择游戏根目录和音乐目录。\n5. 选择目标电台，勾选要替换的原曲 slot。\n6. 勾选相同数量的自定义音乐，点击应用替换。\n7. 试听并调整 marker，必要时导入或导出 marker CSV。\n8. 选择最终操作：\n   - 生成 Mod 包：只生成输出文件，不覆盖游戏。\n   - 一键替换到游戏：自动备份后覆盖 XML 和 bank。\n\n## 常用工作流程\n\n### 普通电台音乐替换\n\n1. 扫描游戏目录。\n2. 扫描音乐目录。\n3. 选择电台和 slot。\n4. 应用替换。\n5. 编辑 marker。\n6. 生成 Mod 包或一键替换。\n\n工具会在流程中准备音频、生成 XML、创建 `fmod_ready_wav`，并调用 Fmod Bank Tools 进行 Extract \u002F Rebuild。\n\n### Marker 批量编辑\n\n1. 在工具中分配歌曲。\n2. 点击 Export markers \u002F 导出 Marker。\n3. 使用 Excel、WPS 或 LibreOffice 编辑 CSV。\n4. 点击 Import markers \u002F 导入 Marker。\n5. 检查 UI 中 marker 是否刷新。\n6. 再次导出或生成包。\n\nCSV 默认使用 UTF-8-SIG 编码，marker 单位为 samples。\n\n### 主菜单音乐替换\n\n主菜单 \u002F Press Start 音乐目标固定为：\n\n```text\nGLB_RadioPressStart.assets.bank\n```\n\n用户只需要选择新的主菜单音乐文件。工具会根据游戏根目录自动定位目标 bank，并执行生成包或一键替换流程。\n\n### 开发者模式\n\n开发者模式用于研究音频 bank 结构，不建议普通玩家日常使用。它可以：\n\n- Extract 全部候选 bank。\n- 生成 bank 音频统计。\n- 生成 XML 到 bank \u002F sound 的映射 CSV。\n- 分析 DJ、stinger、音效和跨 bank 关系。\n\n## 音频处理说明\n\n导入音频会被统一处理为：\n\n```text\nPCM WAV\n48000 Hz\nStereo\n16-bit\n```\n\n工具会在步骤 1 “应用选择替换”时分析源音频响度和峰值，应用安全增益，并生成用于试听、波形和 marker 编辑的 prepared WAV。步骤 2 中可以通过“游戏音量增益”进行 `-6 dB` 到 `+6 dB` 的人工微调；点击“保存当前”后才会按新增益重新生成 prepared WAV。步骤 3 只复制 prepared WAV，不再重新转码或重新做音量匹配。\n\n支持 FFmpeg 可读取的常见格式，例如 WAV、FLAC、MP3、M4A、AAC、OGG、WMA。\n\n## Marker 与 XML 写入说明\n\n工具内部 marker 使用 sample 坐标。普通替换流程中，用户点击应用替换后会先生成 prepared WAV；之后的试听、波形和 marker 编辑都基于该 prepared WAV。生成 XML 前，工具仍会以最终 ready WAV 为准复核：\n\n- `TrackDrop`\n- `PostDrop`\n- `TrackLoopStart`\n- `TrackLoopEnd`\n- `PostRaceLoopStart`\n- `PostRaceLoopEnd`\n- `End`\n\n如果源音频和最终 WAV 的 sample length 不一致，工具会按比例缩放 marker，避免游戏内 loop 起点、终点和工具内试听位置明显不一致。\n\n## 输出目录\n\n常见生成目录：\n\n- `output\u002F`：最终输出 XML、ready WAV、rebuild bank、manifest。\n- `work\u002F`：中间文件、诊断报告、映射 CSV、运行数据库。\n- `backup\u002F`：一键替换和手动备份产生的恢复点。\n- `dist_release\u002F`：打包脚本生成的发布包。\n\n这些目录属于本地生成内容，默认不会提交到 Git。\n\n## 构建\n\n推荐优先使用 PyInstaller 打包：\n\n```bat\nbuild_pyinstaller_release.bat\n```\n\nNuitka 构建脚本仍保留，用于实验或备用：\n\n```bat\nbuild_nuitka_release.bat\n```\n\n源码包构建：\n\n```bat\nbuild_source_release.bat\n```\n\n构建产物默认输出到 `dist_release\u002F`，不会提交到仓库。\n\n## 故障排查\n\n### 找不到 FFmpeg\n\n先重新运行：\n\n```bat\nsetup_env.bat\n```\n\n如果仍失败，可以在系统 PATH 中安装 FFmpeg，或在工具设置中选择自己的 `ffmpeg.exe`。\n\n### Fmod Bank Tools 没有自动点击 Extract \u002F Rebuild\n\n- 确认选择的是 `Fmod_Bank_Tools.exe`。\n- 不要在 Extract \u002F Rebuild 过程中关闭 Fmod Bank Tools。\n- 如果自动点击失败，请查看 Runtime Log 中的 Win32 \u002F pywinauto 提示。\n\n### 生成包失败但游戏文件未被覆盖\n\n这是预期保护行为。工具会先完成 Extract \u002F XML \u002F Rebuild 校验，再执行覆盖。若中途失败，请查看 Runtime Log 和 `work\u002F` 中的诊断报告。\n\n### 游戏内播放位置与工具试听不一致\n\n请使用 `v3.1.7` 或更新版本重新生成。新版会在写 XML 前按最终 WAV sample length 缩放 marker，并同步 `SampleLength` \u002F `End`。\n\n## 文档\n\n- [中文使用指南](docs\u002FUser_Guide_ZH.md)\n- [English User Guide](docs\u002FUser_Guide_EN.md)\n- [中文 Marker 参考](docs\u002FMarker_Reference_ZH.md)\n- [English Marker Reference](docs\u002FMarker_Reference_EN.md)\n- [第三方许可说明](docs\u002FTHIRD_PARTY_LICENSES.md)\n\n## 注意事项\n\n- 本工具不会分发 Fmod Bank Tools，也不会内置游戏文件。\n- 替换游戏文件前请确认已有备份。\n- 自动 marker \u002F loop 分析只作为候选结果，最终仍建议人工试听确认。\n- 推荐使用短路径，避免外部工具遇到路径或权限问题，例如：\n\n  ```text\n  E:\\FH6RadioTool\n  E:\\FH6Music\n  E:\\FmodBankTools\n  ```\n","FH6 Radio Tool 是一个专为《Forza Horizon 6》设计的轻量级桌面工具，用于自定义游戏内的电台音乐。它基于 Python 和 PySide6 开发，允许用户轻松替换游戏中的音乐，同时自动处理 XML 文件编辑、音频文件转换和备份管理等繁琐任务。其核心功能包括扫描游戏目录、自动定位相关文件、分配自定义音乐到指定槽位、准备适合 FMOD rebuild 的 WAV 文件、编辑和试听 TrackDrop\u002FPostDrop\u002FLoop marker 以及生成最终的 Mod 输出包或直接替换游戏文件。此外，该工具还支持主菜单音乐替换，并提供开发者模式以研究音频 bank 结构。适用于希望个性化游戏体验且不熟悉复杂音频编辑的玩家。",2,"2026-06-11 04:02:29","CREATED_QUERY"]