原声带切换器

原声带切换器

创建你自己的配乐!用户可以将音乐文件放在任务文件夹内,模组会在游戏中替换它们。

Soundtrack Switcher

你提供音乐。没有预装歌曲。无需 REDmod。不修改任何游戏文件:此模组的一切都通过 AudioXL 的自定义声音和一个脚本实现。

音乐是营造场景氛围的非常强大的因素(观看演示视频)。它可以完全改变一个场景的感觉,有时甚至通过它自身的缺席来做到。此模组旨在帮助你设定合适的氛围,和/或为一次游玩增添新鲜的转折。(我最初想到这个点子是在思考“如果配乐全是任务名称会怎样!”如果你不知道的话,大多数主线任务的名称都是真实的歌曲名。)

[youtube]uc5BSGwYJJI[/youtube] [youtube]hRjeAmeCMQg[/youtube]

工作原理 [youtube]_5l47MfIuJI[/youtube]

  • 使用内部任务名称作为文件夹名,其中包含用于特定音乐提示的文件夹(这就是你放置文件的地方)
  • .mp3、.ogg、.flac 和 .wav 都可用。无需重命名任何文件。(警告:关于存储空间的信息请查看性能部分
  • 响度与游戏自身的配乐匹配,因此不会太响或太轻。
  • 音轨在游戏结束自身音乐的地方结束,并带有淡出。
  • 循环播放直到 STOP 或下一首歌曲(未测试,请谨慎使用):文件名以 .loop 结尾
  • 在模组设置中有开/关切换。关闭无需重启,开启需要重启。
  • 仅适用于剧情配乐。(目前……)

需求

RED4ext redscript AudioXL (0.4.3) AudioXL patch for Soundtrack Switcher(在此处上传) Mod Settings(可选,仅用于游戏内的开/关切换)

为什么需要 AudioXL 补丁

AudioXL 是让模组能够在游戏请求自身音乐的地方播放自己的文件的原因。它非常出色,没有它这个模组就不会存在。然而,有两件事它(还)做不到,而补丁提供了这些功能:

1. 在场景结束时结束你的音轨。 当游戏结束一段音乐时,它会触发一个停止事件,但该事件作用于游戏自身的音乐,而不是替换的音乐。因此,没有补丁的话,你的音轨不会在场景结束时停止——它会一直播放,直到其他某个提示恰好开始。补丁允许一个声音命名结束它的事件,因此你的音轨会在原本音乐结束的同一拍上结束,并带有淡出。

2. 在游戏中关闭替换。 开/关切换的工作原理是从引擎的声音表中清除你的提示并将其放回,这就是让你重新听到游戏自身音乐的方式。AudioXL 无法从外部做到这一点。

你必须安装补丁吗?模组没有它也能工作:你的音轨仍然会播放。你失去的是结束——你的音轨会越过它所属的场景,直到另一个提示开始——以及游戏内切换。第一个原因就是为什么补丁被列为必需而非可选。

安装

按照顺序安装 AudioXL,然后安装 SoundtrackSwitcher,然后安装 AudioXL patch for Soundtrack Switcher,这样补丁会覆盖 AudioXL 的两个文件。 打开模组的 \red4ext\plugins\AudioXL\sounds\SoundtrackSwitcher 文件夹,找到任务,找到提示。 将你的音轨放入该提示的文件夹中。 在 SoundtrackSwitcher 文件夹中运行 rescan.bat。它会打印出找到的内容。 启动游戏。

要撤销替换,请删除你的音轨,再次运行 rescan.bat,然后重启。一个没有你的音轨的文件夹会播放游戏自身的音乐。

你可以使用模组管理器。我个人使用 MO2。

关于 prepare.exe(位于主文件中)

模组附带了一个名为 prepare.exe 的小工具,rescan.bat 会对你添加的每个音轨运行它。它解码你的文件,按照广播标准(EBU R128)测量其响度,将其提升到游戏自身音乐的水平,限制峰值以便安静的音轨可以在不削波的情况下被提升,并将结果写入你的文件旁边。

它在游戏启动前运行,这正是关键所在:在你游玩时不会进行任何解码、测量或转换。

它从不访问网络。它读取你指向的一个文件,并在其旁边写入一个文件。 它没有代码签名,因此 Windows SmartScreen 第一次可能会提示“Windows 保护了你的电脑”,病毒扫描器也可能仅仅因为它是一个未知的新二进制文件而将其标记。两者都是误报。 源代码在 GitHub 上,每个版本都由 GitHub Actions 构建,因此你可以确切地阅读它做了什么,或者自己构建并将你自己的构建放入其中。 你也可以直接删除它。模组仍然可以工作,你的文件将按原样播放,不进行响度匹配。

添加原始歌曲作为预览

这对于理解你正在替换的内容很有用,尤其是当一个任务文件夹中有多个提示时。 单独的预览下载会根据你自己安装的游戏文件,将游戏自身的音乐渲染到每个提示的文件夹中,命名为 original.ogg。不会分发任何受版权保护的内容。它需要 WolvenKit 的 CLI 和 ffmpeg,这就是为什么它是一个单独的可选文件。

性能

设计规则很简单:所有耗时的操作都在你运行 rescan.bat 时完成,游玩时不做任何耗时操作。

存储(请阅读此部分) 模组本身,未添加任何音轨:2.6 MB。 你添加的每个音轨都会消耗你的文件本身加上一份准备好的副本,每分钟音频 10.6 MB (未压缩的 16 位立体声;这让游戏无需解码任何内容即可播放。对我来说,文件大小是换取稳定性的良好代价)。 替换每个提示——24.5 小时的音乐——将大约需要 15 GB。这是(预期的)上限。 可选的预览下载会将游戏自身的音乐渲染到文件夹中:如果全部渲染,大约 1.4 GB。比较完成后请删除它们。

游玩时(CPU) 游玩时此模组的任何部分都不会运行。应该没有游戏内性能影响。 游戏按名称启动你的音轨,游戏自身的停止事件结束它;模组的脚本仅在会话开始和结束时运行。 你的音轨作为单个立体声声部混合,无需解码,因为它是提前转换好的。这是引擎拥有的最廉价的声音类型。 补丁对游戏发布的每个声音事件增加一次原子读取,并且仅当你的某个音轨正在播放且游戏触发结束它的事件时才进行实际工作。 游戏中的任何内容都没有在脚本中被包装、替换或挂钩,因此没有其他脚本模组会因为安装了此模组而付出代价。

加载时(CPU) 你的音轨在游戏设置音频时被注册一次:作为测试,四个音轨耗时 22 毫秒,已测量。添加音轨后的首次启动还会从磁盘读取该音轨一次。 小型脚本文件与 redscript 编译的所有其他内容一起编译;你不会在加载时间中看到它。

如果有任何关于性能的疑虑,欢迎反馈。

鸣谢

DigitalVixen 开发了 AudioXL,WopsS 和 RED4ext 团队,jac3km4 和 redscript 团队,psiberx 提供了场景所依赖的工具。

源代码和权限

https://github.com/remo4248/cp2077-soundtrack-switcher

随你喜欢地使用它,注明出处不胜感激。