Reme

添加音频

https://github.com/BAKAOLC/STS2-RitsuLib/blob/main/Docs/zh/FmodAndAudio.md

方法一:使用fmod加载bank

使用塔2使用的fmod工具进行加载。一些通过event加载的音频(比如角色选择等)通过bank方式加载会方便一些不用修改代码。

下载fmod

前往官网 https://www.fmod.com/download#fmodstudio ,下载2.03.06版本的fmod studio。

alt text

安装完毕后打开。

下载原版工程

先下载一个拥有原版音频guid对应的工程,可以下载ritsulib作者制作的音频示例工程(整个一起下载): https://github.com/BAKAOLC/STS2_FModProject_Minimal ,或者网盘: https://pan.baidu.com/s/1yuxPkDpCV8EVLkDubqiirg?pwd=apar

下载完毕后打开。

导入音频

点击左侧的Assets栏,将你的音频拖入其中或者右键Import Assets

alt text

重命名bank

点击中间的Banks栏,将两个bank重命名为你的项目的名字,最好也是XXXMaster

  • XXX最好删除重建一个,但是Master不能删除然后重建。

alt text

新建event

点击左侧的Events栏,可以右键新建文件夹,套一些文件夹改名防止你和别人的id撞上。然后右键新建event。

alt text

右键你的 event,点击 Assign To Bank,选择 Test 或者你重命名的那个。(不是 Master 那个

alt text

接着点击Window - Mixer Routing,需要创建和原版一致的routing,这里是master/sfx,然后把你的音频放在此处。

例如原版游戏代码中的路径为event:/sfx/healevent:/music/act3_a1_v1之类,那么你就需要分别放在master/sfxmaster/music组下。

这一步会让你的音频受到游戏的音量与效果影响,例如sfx受到音响音量影响music受到音乐音量影响。

alt text

新建sheet

然后点击你刚才的event,中间会出现sheet界面。在其中右键新建一个任意类型的sheet。

  • 简单来说,timeline可以实现音频拼接或者延迟触发,action可以多个音频随机触发一个(右键add multi instrument)等,parameter可以调整音频的参数等。

alt text

例如我们新建一个timeline sheet,然后点击assets将音频素材拖到轨道里。

alt text

构建

  • 点击菜单栏的File,点击Build,然后再点击Export GUIDs

  • 从你保存的项目的根目录找到Build这个文件夹,复制GUIDs.txtDesktop/Test.bank(或者你的命名的bank,不是任何其他带有Master的bank)到你的mod项目中,例如复制到Test/audios里。

  • 你也可以设置自动构建的路径,点击Edit - Preference - Build选择构建路径。

alt text

导出预设

Godot 里通常不会直接导入.bankGUIDs.txt,这可能会导致打包的 .pck 文件中缺失这些文件,导致游戏运行时无法加载这些音频。
请确保你的导出设置里 “资源” 选项卡中 “筛选导出非资源文件或文件夹” 中包含了.bankGUIDs.txt(或其他任何你需要的文件)。

alt text

代码加载

在你的初始化函数中加载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using STS2RitsuLib.Audio;

namespace Test.Scripts;

[ModInitializer(nameof(Init))]
public class Entry
{
public static void Init()
{
// 其余省略
FmodStudioDeferredBankRegistration.RegisterBank("res://Test/audios/Test.bank");
FmodStudioDeferredBankRegistration.RegisterStudioGuidMappings("res://Test/audios/GUIDs.txt");
}
}

然后你指定的fmod就被加载到游戏里了。例如使用:

  • 人物音频:
1
2
3
4
5
6
7
Audio: new(
// AttackSfx: null,
// CastSfx: null,
// DeathSfx: null,
CharacterSelectSfx: "event:/sfx/kokodayo"
// CharacterTransitionSfx: "event:/sfx/ui/wipe_ironclad"
),
  • 卡牌音效:
1
2
3
4
5
await DamageCmd.Attack(DynamicVars.Damage.BaseValue)
.FromCard(this)
.WithHitFx(sfx: "event:/sfx/sword_slash") // 伤害音效
.Targeting(cardPlay.Target!)
.Execute(choiceContext);

1
SfxCmd.Play("event:/sfx/block_gain");

方法二:使用fmod加载音频文件(wav, ogg, mp3)

如果你想自由播放音频,可以通过这种形式。

准备工作

  • 由于fmod只能加载 未经godot处理过的音频 ,有三种方式(选一种即可),推荐第方法1和2:
  1. 安装fmod插件 6.1.0-4.5.0,点击addons.zip下载(或者网盘 https://pan.baidu.com/s/1yuxPkDpCV8EVLkDubqiirg?pwd=apar ),把解压出来的addons复制到你的项目里,然后在编辑器菜单点击项目 - 项目设置 - 插件启用它。

  2. 禁用对你需要通过fmod加载的音频的导入,原样导出。如下操作。

alt text

  1. 把音频复制到和你mod同级目录内加载。

导入资源

如果你是方法1和2,把你的音频文件放到你喜欢的位置,例如Test/audios/test.ogg

如果你是方法3,把音频复制到和你mod同级目录内。

加载并播放

(可选)首先找个地方预载你的音频,例如你的初始化函数Entry.Init里:

1
2
3
4
5
public static void Init()
{
// 其余省略
FmodStudioStreamingFiles.TryPreloadAsSound("res://Test/audios/waveform.ogg");
}

在你需要播放音频的地方播放:

1
FmodStudioStreamingFiles.TryPlaySoundFile("res://Test/audios/waveform.ogg");
Author: Reme
Link:https://glitchedreme.github.io/SlayTheSpire2ModdingTutorials/docs/04-ritsulib/04-10-add-audio/
版权声明:本文采用 CC BY-NC-SA 4.0 CN 协议进行许可