使用PowerShell批量生成语音TTS文件

在校对《封印者》语音包的过程中,为了确认每个技能和语音ID的对应关系,其中一个方法就是将音频文件替换为容易辨识的内容,然后在游戏里试验并记录对应关系。

本文以缇娜的至高之翼语音为例进行讲解。拆包得到的语音文件名有一定规律,例如“VOICE_USN_SI_RARE_COSTUME_3_ARMS_SKILL_1.OGG”和“VOICE_USN_SI_RARE_COSTUME_3_ARMS_SKILL_11_1.OGG”。我们要做的就是利用Windows自带的PowerShell来根据文件名合成出对应的TTS语音。

代码如下:

用法如下:

首先新建一个文件夹,例如“CloTTS”。然后将上述代码保存为ps1文件,例如“CloTTS\CloTTS.ps1”。然后在资源管理器空白处按住Shift点击鼠标右键,选择“在此处打开PowerShell窗口”。我们假设解包出的原始语音包按文件夹分类存放,目录结构如下:

C:\Tina_RareCostume2
1.ogg
2.ogg

C:\Tina_RareCostume3
1.ogg
2.ogg

在PowerShell窗口中输入

该脚本就会在CloTTS\Output下生成两个文件夹“Tina_RareCostume2”和“Tina_RareCostume3”,里面是产生的TTS WAV音频文件。然后使用你喜欢的转码工具(例如foobar 2000)将文件转换为OGG即可。其实,只要将文件夹拖进PowerShell窗口就会自动变成路径。

细节解释:

语音合成使用了Microsoft Zira Desktop。这是Windows自带的英文女声音源,你也可以换成你喜欢的(比如解锁Cortana之后用她的语音)。修改$syn.Rate可以修改语速(-10~10)。

在构造音频内容的时候,需要做一些处理,例如文件名的共用前缀可以省略。下划线要替换掉,否则语音引擎会读成“underscore”。此外,原始文件的命名可能导致语音歧义,如“VOICE_USN_SI_RARE_COSTUME_3_ARMS_SKILL_30_1”中的“30 1”,容易与31混淆。我们使用MakeVoiceString函数来做相应的处理。首先替换掉公共前缀,然后利用正则表达式将两个数字中间有空格的情况替换为“30,#1”的形式(这样语音引擎会读作“thirty, number one”),最后将其余的下划线替换为空格即可。制作其他角色的语音的时候只要针对性修改这里的规则即可。

发表评论