语音 link

Ren’Py支持对话文本与语音播放的联结。使用 voice 语句可以实现这个功能,voice 语句指定了播放的语音文件:

voice "line0001.ogg"
"欢迎来到Ren'Py"

通常来说,某个语音会被后面的互动行为中断。voice sustain 语句则可以保证语音会播放完毕,即使遇到某个互动行为。

voice "line0001.ogg"
"欢迎来到Ren'Py..."

voice sustain
"... 你的电子小说引擎。"

config.voice_filename_format 配置项允许你定制化语音文件名,使用的时候省略文件夹和文件扩展名。

语音标签(tag) link

Ren’Py内置了一个语音标签(tag)系统,使得针对某个选定的角色语音的静音和取消静音成为可能。若要活用这个优势,需要在使用 Character() 创建每一个角色对象时都提供一个voice_tag入参,就可以使用 SetVoiceMute()ToggleVoiceMute() 切换角色语音的静音和取消静音状态。

举例:

define e = Character("艾琳", voice_tag="eileen")
define l = Character("露西", voice_tag="lucy")

screen voice_toggle:
    vbox:
        textbutton "艾琳静音" action ToggleVoiceMute("eileen")
        textbutton "露西静音" action ToggleVoiceMute("lucy")

label start:
    show screen voice_toggle

    voice "e01.ogg"
    e "你可以开关一个角色的语音。"

    voice "l01.ogg"
    l "耶!我现在终于可以让你闭嘴了!"

    voice "l02.ogg"
    l "等下……也就是说我也被静音了!真的假的?"

自动语音 link

Ren’Py提供了自动匹配语音文件并播放的功能,不用在每行对话脚本之前都写一条voice语句就可以实现语音播放。

要实现这个功能的话,我们创建的语音文件名必须跟对话脚本每行的标识号(identifier)严格匹配。若要确定应该用那个标识号,需要将对话脚本导出为一个表格,操作如下:在启动器上选择“提取对话”,“以制表符分隔的表格 (dialogue.tab)”,“继续”。然后会生成一个文件——dialogue.tab,它可以使用表格程序打开。

表格的第一列就是需要使用的标识号,其他列则是对话的更多别的信息。

要让Ren’Py自动播放语音,需要将 config.auto_voice 设置为一个包含 {id} 格式的字符串。当对话发生, {id} 会被对话标识符替换,并自动组成一个音频文件名。若音频文件名对应的文件真实存在,则那个文件就会播放。

举例,比如我们如下定义:

config.auto_voice = "voice/{id}.ogg"

对话标识号是 demo_minigame_03fc91ef ,那么当对应的对话显示时,Ren’Py会寻找文件 voice/demo_minigame_03fc91ef.ogg 。如果文件存在,Ren’Py会播放这个文件。

包含多种语言的语音 link

得益于Ren’Py的多语言支持系统,游戏可以使用 图片和文件的多语言支持 在多种语言中进行转换。 原生语言为英语的游戏可以翻译为法语:

voice "omelette.ogg"
e "I like scrambled eggs with cheese..."

放好英语版本的语音文件 game/omelette.ogg 和法语版本 game/tl/french/omelette.ogg, 就能在Ren’Py启用法语版后,播放法语的语音了。

自动语音时的效果也类似,只要翻译文件的路径以 game/tl/<language>/ 开头, 会自动匹配 game/目录中的同名文件。

语音函数 link

_get_voice_info() link

返回目前say语句对应正在播放语音的有关信息。只有当say语句执行时,该函数才能被调用。

返回对象具有以下几个字段(field):

VoiceInfo.filename link

正在播放语音的文件名,如果没有任何文件在播放则返回None。

VoiceInfo.auto_filename link

Ren’Py意图使用自动语音搜索的文件名,如果未找到则返回None。

VoiceInfo.tag link

目前发言角色(character)的voice_tag参数。

VoiceInfo.sustain link

该值为False时,用户互动行为会中断语音播放。改值为True时,一次用户互动行为后语音会持续播放。

voice(filename, tag=None) link

播放voice通道上名为filename的文件。等效于voice语句。

filename

想要播放的语音文件名。函数会使用 config.voice_filename_format() 拼装成将用播放的文件名。

tag

若该入参非空,其值应该是一个字符串,给定了需要播放的语音标签(tag)。若该入参为None,将使用默认值,即触发下一次互动行为前角色的voice_tag。

语音标签(tag)用于指定发言角色,并允许用户针对某个角色的语音进行静音或取消静音。

voice_can_replay() link

若当前语音允许回放则返回True。

voice_replay() link

若当前语音允许回放,则回放该语音。

voice_sustain(ignored='', **kwargs) link

等效于voice sustain语句。

Voice Actions link

PlayCharacterVoice(voice_tag, sample, selected=False) link

在voice通道上播放sample语音文件,并将其视为由带有 voice_tag 的某个角色所说。

sample

语音文件完整路径。不会对该文件的做任何语音相关的处理。

selected

若该值为True,当sample文件正在播放,调用该行为(action)函数的按钮会被标记为“被选中(selected)”。

SetCharacterVolume(voice_tag, volume=None) link

该行为允许每个角色的语音音量都可以调整。若 volume 值为None,将返回 voice_tag 对应的音量值。否则的话, voice_tag 对应的音量值会被设置为 volume

volume 是一个介于0.0至1.0之间的值,在包含 voice 通道的混合器(mixer)音量中则是一个分量。

SetVoiceMute(voice_tag, mute) link

mute 值为True,带有给定语音标签 voice_tag 的所有语音会被静音。若 mute 值为False,取消语音标签 voice_tag 所有语音的静音。

ToggleVoiceMute(voice_tag, invert=False) link

切换 voice_tag 的静音状态。 默认情况下,指定 voice_tag 处于静音状态时将选择对应的语音tag对象。如果 invert 值是True,则会选择不处于静音状态时语言tag对象。

VoiceReplay(*args, **kwargs) link

回放最近一次播放的语音。